CB-10668 removed bin/node_modules, updated create.js to use root
node_modules
diff --git a/bin/lib/create.js b/bin/lib/create.js
index 85159d1..764c8dd 100755
--- a/bin/lib/create.js
+++ b/bin/lib/create.js
@@ -83,7 +83,7 @@
     // Copy in the new ones.
     var binDir = path.join(ROOT, 'bin');
     shell.cp('-r', srcScriptsDir, projectPath);
-    shell.cp('-r', path.join(binDir, 'node_modules'), destScriptsDir);
+    shell.cp('-r', path.join(ROOT, 'node_modules'), destScriptsDir);
 
     // Copy the check_reqs script
     shell.cp(path.join(binDir, 'check_reqs*'), destScriptsDir);
diff --git a/bin/node_modules/cordova-common/.jscs.json b/bin/node_modules/cordova-common/.jscs.json
deleted file mode 100644
index 5cc7e26..0000000
--- a/bin/node_modules/cordova-common/.jscs.json
+++ /dev/null
@@ -1,24 +0,0 @@
-{
-    "disallowMixedSpacesAndTabs": true,
-    "disallowTrailingWhitespace": true,
-    "validateLineBreaks": "LF",
-    "validateIndentation": 4,
-    "requireLineFeedAtFileEnd": true,
-
-    "disallowSpaceAfterPrefixUnaryOperators": true,
-    "disallowSpaceBeforePostfixUnaryOperators": true,
-    "requireSpaceAfterLineComment": true,
-    "requireCapitalizedConstructors": true,
-
-    "disallowSpacesInNamedFunctionExpression": {
-        "beforeOpeningRoundBrace": true
-    },
-
-    "requireSpaceAfterKeywords": [
-      "if",
-      "else",
-      "for",
-      "while",
-      "do"
-    ]
-}
diff --git a/bin/node_modules/cordova-common/.jshintignore b/bin/node_modules/cordova-common/.jshintignore
deleted file mode 100644
index d606f61..0000000
--- a/bin/node_modules/cordova-common/.jshintignore
+++ /dev/null
@@ -1 +0,0 @@
-spec/fixtures/*
diff --git a/bin/node_modules/cordova-common/.npmignore b/bin/node_modules/cordova-common/.npmignore
deleted file mode 100644
index 5d14118..0000000
--- a/bin/node_modules/cordova-common/.npmignore
+++ /dev/null
@@ -1,2 +0,0 @@
-spec
-coverage
diff --git a/bin/node_modules/cordova-common/.ratignore b/bin/node_modules/cordova-common/.ratignore
deleted file mode 100644
index 26f7205..0000000
--- a/bin/node_modules/cordova-common/.ratignore
+++ /dev/null
@@ -1,2 +0,0 @@
-fixtures
-coverage
diff --git a/bin/node_modules/cordova-common/README.md b/bin/node_modules/cordova-common/README.md
deleted file mode 100644
index f19b59f..0000000
--- a/bin/node_modules/cordova-common/README.md
+++ /dev/null
@@ -1,149 +0,0 @@
-<!--
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-#  KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
--->
-
-# cordova-common
-Expoeses shared functionality used by [cordova-lib](https://github.com/apache/cordova-lib/) and Cordova platforms.
-## Exposed APIs
-
-### `events`
-  
-Represents special instance of NodeJS EventEmitter which is intended to be used to post events to cordova-lib and cordova-cli
-
-Usage:
-```
-var events = require('cordova-common').events;
-events.emit('warn', 'Some warning message')
-```
-
-There are the following events supported by cordova-cli: `verbose`, `log`, `info`, `warn`, `error`.
-
-### `CordovaError`
-
-An error class used by Cordova to throw cordova-specific errors. The CordovaError class is inherited from Error, so CordovaError instances is also valid Error instances (`instanceof` check succeeds).
-
-Usage:
-
-```
-var CordovaError = require('cordova-common').CordovaError;
-throw new CordovaError('Some error message', SOME_ERR_CODE);
-```
-
-See [CordovaError](src/CordovaError/CordovaError.js) for supported error codes.
-
-### `ConfigParser`
-
-Exposes functionality to deal with cordova project `config.xml` files. For ConfigParser API reference check [ConfigParser Readme](src/ConfigParser/README.md).
-
-Usage:
-```
-var ConfigParser = require('cordova-common').ConfigParser;
-var appConfig = new ConfigParser('path/to/cordova-app/config.xml');
-console.log(appconfig.name() + ':' + appConfig.version());
-```
-
-### `PluginInfoProvider` and `PluginInfo`
-
-`PluginInfo` is a wrapper for cordova plugins' `plugin.xml` files. This class may be instantiated directly or via `PluginInfoProvider`. The difference is that `PluginInfoProvider` caches `PluginInfo` instances based on plugin source directory.
-
-Usage:
-```
-var PluginInfo: require('cordova-common').PluginInfo;
-var PluginInfoProvider: require('cordova-common').PluginInfoProvider;
-
-// The following instances are equal
-var plugin1 = new PluginInfo('path/to/plugin_directory');
-var plugin2 = new PluginInfoProvider().get('path/to/plugin_directory');
-
-console.log('The plugin ' + plugin1.id + ' has version ' + plugin1.version)
-```
-
-### `ActionStack`
-
-Utility module for dealing with sequential tasks. Provides a set of tasks that are needed to be done and reverts all tasks that are already completed if one of those tasks fail to complete. Used internally by cordova-lib and platform's plugin installation routines.
-
-Usage:
-```
-var ActionStack = require('cordova-common').ActionStack;
-var stack = new ActionStack()
-
-var action1 = stack.createAction(task1, [<task parameters>], task1_reverter, [<reverter_parameters>]);
-var action2 = stack.createAction(task2, [<task parameters>], task2_reverter, [<reverter_parameters>]);
-
-stack.push(action1);
-stack.push(action2);
-
-stack.process()
-.then(function() {
-    // all actions succeded
-})
-.catch(function(error){
-    // One of actions failed with error
-})
-```
-
-### `superspawn`
-
-Module for spawning child processes with some advanced logic.
-
-Usage:
-```
-var superspawn = require('cordova-common').superspawn;
-superspawn.spawn('adb', ['devices'])
-.then(function(devices){
-    // Do something...
-})
-```
-
-### `xmlHelpers`
-
-A set of utility methods for dealing with xml files.
-
-Usage:
-```
-var xml = require('cordova-common').xmlHelpers;
-
-var xmlDoc1 = xml.parseElementtreeSync('some/xml/file');
-var xmlDoc2 = xml.parseElementtreeSync('another/xml/file');
-
-xml.mergeXml(doc1, doc2); // doc2 now contains all the nodes from doc1
-```
-
-### Other APIs
-
-The APIs listed below are also exposed but are intended to be only used internally by cordova plugin installation routines.
-
-```
-PlatformJson
-ConfigChanges
-ConfigKeeper
-ConfigFile
-mungeUtil
-```
-
-## Setup
-* Clone this repository onto your local machine
-    `git clone https://git-wip-us.apache.org/repos/asf/cordova-lib.git`
-* In terminal, navigate to the inner cordova-common directory
-    `cd cordova-lib/cordova-common`
-* Install dependencies and npm-link
-    `npm install && npm link`
-* Navigate to cordova-lib directory and link cordova-common
-    `cd ../cordova-lib && npm link cordova-common && npm install`
diff --git a/bin/node_modules/cordova-common/RELEASENOTES.md b/bin/node_modules/cordova-common/RELEASENOTES.md
deleted file mode 100644
index 5a4cc51..0000000
--- a/bin/node_modules/cordova-common/RELEASENOTES.md
+++ /dev/null
@@ -1,34 +0,0 @@
-<!--
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-#  KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
--->
-# Cordova-common Release Notes
-
-### 1.0.0 (Oct 29, 2015)
-
-* CB-9890 Documents cordova-common
-* CB-9598 Correct cordova-lib -> cordova-common in README
-* Pick ConfigParser changes from apache@0c3614e
-* CB-9743 Removes system frameworks handling from ConfigChanges
-* CB-9598 Cleans out code which has been moved to `cordova-common`
-* Pick ConfigParser changes from apache@ddb027b
-* Picking CordovaError changes from apache@a3b1fca
-* CB-9598 Adds tests and fixtures based on existing cordova-lib ones
-* CB-9598 Initial implementation for cordova-common
-
diff --git a/bin/node_modules/cordova-common/cordova-common.js b/bin/node_modules/cordova-common/cordova-common.js
deleted file mode 100644
index 59b52fc..0000000
--- a/bin/node_modules/cordova-common/cordova-common.js
+++ /dev/null
@@ -1,42 +0,0 @@
-/**
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements.  See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership.  The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-    KIND, either express or implied.  See the License for the
-    specific language governing permissions and limitations
-    under the License.
-*/
-
-/* jshint node:true */
-
-// For now expose plugman and cordova just as they were in the old repos
-exports = module.exports = {
-    events: require('./src/events'),
-    superspawn: require('./src/superspawn'),
-
-    ActionStack: require('./src/ActionStack'),
-    CordovaError: require('./src/CordovaError/CordovaError'),
-    CordovaExternalToolErrorContext: require('./src/CordovaError/CordovaExternalToolErrorContext'),
-    PlatformJson: require('./src/PlatformJson'),
-    ConfigParser: require('./src/ConfigParser/ConfigParser.js'),
-
-    PluginInfo: require('./src/PluginInfo/PluginInfo.js'),
-    PluginInfoProvider: require('./src/PluginInfo/PluginInfoProvider.js'),
-
-    ConfigChanges: require('./src/ConfigChanges/ConfigChanges.js'),
-    ConfigKeeper: require('./src/ConfigChanges/ConfigKeeper.js'),
-    ConfigFile: require('./src/ConfigChanges/ConfigFile.js'),
-    mungeUtil: require('./src/ConfigChanges/munge-util.js'),
-
-    xmlHelpers: require('./src/util/xml-helpers')
-};
diff --git a/bin/node_modules/cordova-common/node_modules/.bin/semver b/bin/node_modules/cordova-common/node_modules/.bin/semver
deleted file mode 100644
index 317eb29..0000000
--- a/bin/node_modules/cordova-common/node_modules/.bin/semver
+++ /dev/null
@@ -1 +0,0 @@
-../semver/bin/semver
\ No newline at end of file
diff --git a/bin/node_modules/cordova-common/node_modules/.bin/shjs b/bin/node_modules/cordova-common/node_modules/.bin/shjs
deleted file mode 100644
index a044997..0000000
--- a/bin/node_modules/cordova-common/node_modules/.bin/shjs
+++ /dev/null
@@ -1 +0,0 @@
-../shelljs/bin/shjs
\ No newline at end of file
diff --git a/bin/node_modules/cordova-common/node_modules/bplist-parser/.npmignore b/bin/node_modules/cordova-common/node_modules/bplist-parser/.npmignore
deleted file mode 100644
index a9b46ea..0000000
--- a/bin/node_modules/cordova-common/node_modules/bplist-parser/.npmignore
+++ /dev/null
@@ -1,8 +0,0 @@
-/build/*
-node_modules
-*.node
-*.sh
-*.swp
-.lock*
-npm-debug.log
-.idea
diff --git a/bin/node_modules/cordova-common/node_modules/bplist-parser/README.md b/bin/node_modules/cordova-common/node_modules/bplist-parser/README.md
deleted file mode 100644
index 37e5e1c..0000000
--- a/bin/node_modules/cordova-common/node_modules/bplist-parser/README.md
+++ /dev/null
@@ -1,47 +0,0 @@
-bplist-parser
-=============
-
-Binary Mac OS X Plist (property list) parser.
-
-## Installation
-
-```bash
-$ npm install bplist-parser
-```
-
-## Quick Examples
-
-```javascript
-var bplist = require('bplist-parser');
-
-bplist.parseFile('myPlist.bplist', function(err, obj) {
-  if (err) throw err;
-
-  console.log(JSON.stringify(obj));
-});
-```
-
-## License
-
-(The MIT License)
-
-Copyright (c) 2012 Near Infinity Corporation
-
-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/bin/node_modules/cordova-common/node_modules/bplist-parser/bplistParser.js b/bin/node_modules/cordova-common/node_modules/bplist-parser/bplistParser.js
deleted file mode 100644
index 1054c56..0000000
--- a/bin/node_modules/cordova-common/node_modules/bplist-parser/bplistParser.js
+++ /dev/null
@@ -1,337 +0,0 @@
-'use strict';
-
-// adapted from http://code.google.com/p/plist/source/browse/trunk/src/com/dd/plist/BinaryPropertyListParser.java
-
-var fs = require('fs');
-var debug = false;
-
-exports.maxObjectSize = 100 * 1000 * 1000; // 100Meg
-exports.maxObjectCount = 32768;
-
-// EPOCH = new SimpleDateFormat("yyyy MM dd zzz").parse("2001 01 01 GMT").getTime();
-// ...but that's annoying in a static initializer because it can throw exceptions, ick.
-// So we just hardcode the correct value.
-var EPOCH = 978307200000;
-
-// UID object definition
-var UID = exports.UID = function(id) {
-  this.UID = id;
-}
-
-var parseFile = exports.parseFile = function (fileNameOrBuffer, callback) {
-  function tryParseBuffer(buffer) {
-    var err = null;
-    var result;
-    try {
-      result = parseBuffer(buffer);
-    } catch (ex) {
-      err = ex;
-    }
-    callback(err, result);
-  }
-
-  if (Buffer.isBuffer(fileNameOrBuffer)) {
-    return tryParseBuffer(fileNameOrBuffer);
-  } else {
-    fs.readFile(fileNameOrBuffer, function (err, data) {
-      if (err) { return callback(err); }
-      tryParseBuffer(data);
-    });
-  }
-};
-
-var parseBuffer = exports.parseBuffer = function (buffer) {
-  var result = {};
-
-  // check header
-  var header = buffer.slice(0, 'bplist'.length).toString('utf8');
-  if (header !== 'bplist') {
-    throw new Error("Invalid binary plist. Expected 'bplist' at offset 0.");
-  }
-
-  // Handle trailer, last 32 bytes of the file
-  var trailer = buffer.slice(buffer.length - 32, buffer.length);
-  // 6 null bytes (index 0 to 5)
-  var offsetSize = trailer.readUInt8(6);
-  if (debug) {
-    console.log("offsetSize: " + offsetSize);
-  }
-  var objectRefSize = trailer.readUInt8(7);
-  if (debug) {
-    console.log("objectRefSize: " + objectRefSize);
-  }
-  var numObjects = readUInt64BE(trailer, 8);
-  if (debug) {
-    console.log("numObjects: " + numObjects);
-  }
-  var topObject = readUInt64BE(trailer, 16);
-  if (debug) {
-    console.log("topObject: " + topObject);
-  }
-  var offsetTableOffset = readUInt64BE(trailer, 24);
-  if (debug) {
-    console.log("offsetTableOffset: " + offsetTableOffset);
-  }
-
-  if (numObjects > exports.maxObjectCount) {
-    throw new Error("maxObjectCount exceeded");
-  }
-
-  // Handle offset table
-  var offsetTable = [];
-
-  for (var i = 0; i < numObjects; i++) {
-    var offsetBytes = buffer.slice(offsetTableOffset + i * offsetSize, offsetTableOffset + (i + 1) * offsetSize);
-    offsetTable[i] = readUInt(offsetBytes, 0);
-    if (debug) {
-      console.log("Offset for Object #" + i + " is " + offsetTable[i] + " [" + offsetTable[i].toString(16) + "]");
-    }
-  }
-
-  // Parses an object inside the currently parsed binary property list.
-  // For the format specification check
-  // <a href="http://www.opensource.apple.com/source/CF/CF-635/CFBinaryPList.c">
-  // Apple's binary property list parser implementation</a>.
-  function parseObject(tableOffset) {
-    var offset = offsetTable[tableOffset];
-    var type = buffer[offset];
-    var objType = (type & 0xF0) >> 4; //First  4 bits
-    var objInfo = (type & 0x0F);      //Second 4 bits
-    switch (objType) {
-    case 0x0:
-      return parseSimple();
-    case 0x1:
-      return parseInteger();
-    case 0x8:
-      return parseUID();
-    case 0x2:
-      return parseReal();
-    case 0x3:
-      return parseDate();
-    case 0x4:
-      return parseData();
-    case 0x5: // ASCII
-      return parsePlistString();
-    case 0x6: // UTF-16
-      return parsePlistString(true);
-    case 0xA:
-      return parseArray();
-    case 0xD:
-      return parseDictionary();
-    default:
-      throw new Error("Unhandled type 0x" + objType.toString(16));
-    }
-
-    function parseSimple() {
-      //Simple
-      switch (objInfo) {
-      case 0x0: // null
-        return null;
-      case 0x8: // false
-        return false;
-      case 0x9: // true
-        return true;
-      case 0xF: // filler byte
-        return null;
-      default:
-        throw new Error("Unhandled simple type 0x" + objType.toString(16));
-      }
-    }
-
-    function parseInteger() {
-      var length = Math.pow(2, objInfo);
-      if (length < exports.maxObjectSize) {
-        return readUInt(buffer.slice(offset + 1, offset + 1 + length));
-      } else {
-        throw new Error("To little heap space available! Wanted to read " + length + " bytes, but only " + exports.maxObjectSize + " are available.");
-      }
-    }
-
-    function parseUID() {
-      var length = objInfo + 1;
-      if (length < exports.maxObjectSize) {
-        return new UID(readUInt(buffer.slice(offset + 1, offset + 1 + length)));
-      } else {
-        throw new Error("To little heap space available! Wanted to read " + length + " bytes, but only " + exports.maxObjectSize + " are available.");
-      }
-    }
-
-    function parseReal() {
-      var length = Math.pow(2, objInfo);
-      if (length < exports.maxObjectSize) {
-        var realBuffer = buffer.slice(offset + 1, offset + 1 + length);
-        if (length === 4) {
-          return realBuffer.readFloatBE(0);
-        }
-        else if (length === 8) {
-          return realBuffer.readDoubleBE(0);
-        }
-      } else {
-        throw new Error("To little heap space available! Wanted to read " + length + " bytes, but only " + exports.maxObjectSize + " are available.");
-      }
-    }
-
-    function parseDate() {
-      if (objInfo != 0x3) {
-        console.error("Unknown date type :" + objInfo + ". Parsing anyway...");
-      }
-      var dateBuffer = buffer.slice(offset + 1, offset + 9);
-      return new Date(EPOCH + (1000 * dateBuffer.readDoubleBE(0)));
-    }
-
-    function parseData() {
-      var dataoffset = 1;
-      var length = objInfo;
-      if (objInfo == 0xF) {
-        var int_type = buffer[offset + 1];
-        var intType = (int_type & 0xF0) / 0x10;
-        if (intType != 0x1) {
-          console.error("0x4: UNEXPECTED LENGTH-INT TYPE! " + intType);
-        }
-        var intInfo = int_type & 0x0F;
-        var intLength = Math.pow(2, intInfo);
-        dataoffset = 2 + intLength;
-        if (intLength < 3) {
-          length = readUInt(buffer.slice(offset + 2, offset + 2 + intLength));
-        } else {
-          length = readUInt(buffer.slice(offset + 2, offset + 2 + intLength));
-        }
-      }
-      if (length < exports.maxObjectSize) {
-        return buffer.slice(offset + dataoffset, offset + dataoffset + length);
-      } else {
-        throw new Error("To little heap space available! Wanted to read " + length + " bytes, but only " + exports.maxObjectSize + " are available.");
-      }
-    }
-
-    function parsePlistString (isUtf16) {
-      isUtf16 = isUtf16 || 0;
-      var enc = "utf8";
-      var length = objInfo;
-      var stroffset = 1;
-      if (objInfo == 0xF) {
-        var int_type = buffer[offset + 1];
-        var intType = (int_type & 0xF0) / 0x10;
-        if (intType != 0x1) {
-          console.err("UNEXPECTED LENGTH-INT TYPE! " + intType);
-        }
-        var intInfo = int_type & 0x0F;
-        var intLength = Math.pow(2, intInfo);
-        var stroffset = 2 + intLength;
-        if (intLength < 3) {
-          length = readUInt(buffer.slice(offset + 2, offset + 2 + intLength));
-        } else {
-          length = readUInt(buffer.slice(offset + 2, offset + 2 + intLength));
-        }
-      }
-      // length is String length -> to get byte length multiply by 2, as 1 character takes 2 bytes in UTF-16
-      length *= (isUtf16 + 1);
-      if (length < exports.maxObjectSize) {
-        var plistString = new Buffer(buffer.slice(offset + stroffset, offset + stroffset + length));
-        if (isUtf16) {
-          plistString = swapBytes(plistString);
-          enc = "ucs2";
-        }
-        return plistString.toString(enc);
-      } else {
-        throw new Error("To little heap space available! Wanted to read " + length + " bytes, but only " + exports.maxObjectSize + " are available.");
-      }
-    }
-
-    function parseArray() {
-      var length = objInfo;
-      var arrayoffset = 1;
-      if (objInfo == 0xF) {
-        var int_type = buffer[offset + 1];
-        var intType = (int_type & 0xF0) / 0x10;
-        if (intType != 0x1) {
-          console.error("0xa: UNEXPECTED LENGTH-INT TYPE! " + intType);
-        }
-        var intInfo = int_type & 0x0F;
-        var intLength = Math.pow(2, intInfo);
-        arrayoffset = 2 + intLength;
-        if (intLength < 3) {
-          length = readUInt(buffer.slice(offset + 2, offset + 2 + intLength));
-        } else {
-          length = readUInt(buffer.slice(offset + 2, offset + 2 + intLength));
-        }
-      }
-      if (length * objectRefSize > exports.maxObjectSize) {
-        throw new Error("To little heap space available!");
-      }
-      var array = [];
-      for (var i = 0; i < length; i++) {
-        var objRef = readUInt(buffer.slice(offset + arrayoffset + i * objectRefSize, offset + arrayoffset + (i + 1) * objectRefSize));
-        array[i] = parseObject(objRef);
-      }
-      return array;
-    }
-
-    function parseDictionary() {
-      var length = objInfo;
-      var dictoffset = 1;
-      if (objInfo == 0xF) {
-        var int_type = buffer[offset + 1];
-        var intType = (int_type & 0xF0) / 0x10;
-        if (intType != 0x1) {
-          console.error("0xD: UNEXPECTED LENGTH-INT TYPE! " + intType);
-        }
-        var intInfo = int_type & 0x0F;
-        var intLength = Math.pow(2, intInfo);
-        dictoffset = 2 + intLength;
-        if (intLength < 3) {
-          length = readUInt(buffer.slice(offset + 2, offset + 2 + intLength));
-        } else {
-          length = readUInt(buffer.slice(offset + 2, offset + 2 + intLength));
-        }
-      }
-      if (length * 2 * objectRefSize > exports.maxObjectSize) {
-        throw new Error("To little heap space available!");
-      }
-      if (debug) {
-        console.log("Parsing dictionary #" + tableOffset);
-      }
-      var dict = {};
-      for (var i = 0; i < length; i++) {
-        var keyRef = readUInt(buffer.slice(offset + dictoffset + i * objectRefSize, offset + dictoffset + (i + 1) * objectRefSize));
-        var valRef = readUInt(buffer.slice(offset + dictoffset + (length * objectRefSize) + i * objectRefSize, offset + dictoffset + (length * objectRefSize) + (i + 1) * objectRefSize));
-        var key = parseObject(keyRef);
-        var val = parseObject(valRef);
-        if (debug) {
-          console.log("  DICT #" + tableOffset + ": Mapped " + key + " to " + val);
-        }
-        dict[key] = val;
-      }
-      return dict;
-    }
-  }
-
-  return [ parseObject(topObject) ];
-};
-
-function readUInt(buffer, start) {
-  start = start || 0;
-
-  var l = 0;
-  for (var i = start; i < buffer.length; i++) {
-    l <<= 8;
-    l |= buffer[i] & 0xFF;
-  }
-  return l;
-}
-
-// we're just going to toss the high order bits because javascript doesn't have 64-bit ints
-function readUInt64BE(buffer, start) {
-  var data = buffer.slice(start, start + 8);
-  return data.readUInt32BE(4, 8);
-}
-
-function swapBytes(buffer) {
-  var len = buffer.length;
-  for (var i = 0; i < len; i += 2) {
-    var a = buffer[i];
-    buffer[i] = buffer[i+1];
-    buffer[i+1] = a;
-  }
-  return buffer;
-}
diff --git a/bin/node_modules/cordova-common/node_modules/bplist-parser/package.json b/bin/node_modules/cordova-common/node_modules/bplist-parser/package.json
deleted file mode 100644
index d558dc3..0000000
--- a/bin/node_modules/cordova-common/node_modules/bplist-parser/package.json
+++ /dev/null
@@ -1,52 +0,0 @@
-{
-  "name": "bplist-parser",
-  "version": "0.1.0",
-  "description": "Binary plist parser.",
-  "main": "bplistParser.js",
-  "scripts": {
-    "test": "./node_modules/nodeunit/bin/nodeunit test"
-  },
-  "keywords": [
-    "bplist",
-    "plist",
-    "parser"
-  ],
-  "author": {
-    "name": "Joe Ferner",
-    "email": "joe.ferner@nearinfinity.com"
-  },
-  "license": "MIT",
-  "devDependencies": {
-    "nodeunit": "~0.9.1"
-  },
-  "repository": {
-    "type": "git",
-    "url": "https://github.com/nearinfinity/node-bplist-parser.git"
-  },
-  "gitHead": "82d14f8defa7fc1e9f78a469c76c235ac244fd8f",
-  "bugs": {
-    "url": "https://github.com/nearinfinity/node-bplist-parser/issues"
-  },
-  "homepage": "https://github.com/nearinfinity/node-bplist-parser",
-  "_id": "bplist-parser@0.1.0",
-  "_shasum": "630823f2056437d4dbefc20e84017f8bac48e008",
-  "_from": "bplist-parser@^0.1.0",
-  "_npmVersion": "1.4.14",
-  "_npmUser": {
-    "name": "joeferner",
-    "email": "joe@fernsroth.com"
-  },
-  "maintainers": [
-    {
-      "name": "joeferner",
-      "email": "joe@fernsroth.com"
-    }
-  ],
-  "dist": {
-    "shasum": "630823f2056437d4dbefc20e84017f8bac48e008",
-    "tarball": "http://registry.npmjs.org/bplist-parser/-/bplist-parser-0.1.0.tgz"
-  },
-  "directories": {},
-  "_resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.1.0.tgz",
-  "readme": "ERROR: No README data found!"
-}
diff --git a/bin/node_modules/cordova-common/node_modules/bplist-parser/test/airplay.bplist b/bin/node_modules/cordova-common/node_modules/bplist-parser/test/airplay.bplist
deleted file mode 100644
index 931adea..0000000
--- a/bin/node_modules/cordova-common/node_modules/bplist-parser/test/airplay.bplist
+++ /dev/null
Binary files differ
diff --git a/bin/node_modules/cordova-common/node_modules/bplist-parser/test/iTunes-small.bplist b/bin/node_modules/cordova-common/node_modules/bplist-parser/test/iTunes-small.bplist
deleted file mode 100644
index b7edb14..0000000
--- a/bin/node_modules/cordova-common/node_modules/bplist-parser/test/iTunes-small.bplist
+++ /dev/null
Binary files differ
diff --git a/bin/node_modules/cordova-common/node_modules/bplist-parser/test/parseTest.js b/bin/node_modules/cordova-common/node_modules/bplist-parser/test/parseTest.js
deleted file mode 100644
index 02a98e3..0000000
--- a/bin/node_modules/cordova-common/node_modules/bplist-parser/test/parseTest.js
+++ /dev/null
@@ -1,141 +0,0 @@
-'use strict';
-
-// tests are adapted from https://github.com/TooTallNate/node-plist
-
-var path = require('path');
-var nodeunit = require('nodeunit');
-var bplist = require('../');
-
-module.exports = {
-  'iTunes Small': function (test) {
-    var file = path.join(__dirname, "iTunes-small.bplist");
-    var startTime1 = new Date();
-
-    bplist.parseFile(file, function (err, dicts) {
-      if (err) {
-        throw err;
-      }
-
-      var endTime = new Date();
-      console.log('Parsed "' + file + '" in ' + (endTime - startTime1) + 'ms');
-      var dict = dicts[0];
-      test.equal(dict['Application Version'], "9.0.3");
-      test.equal(dict['Library Persistent ID'], "6F81D37F95101437");
-      test.done();
-    });
-  },
-
-  'sample1': function (test) {
-    var file = path.join(__dirname, "sample1.bplist");
-    var startTime = new Date();
-
-    bplist.parseFile(file, function (err, dicts) {
-      if (err) {
-        throw err;
-      }
-
-      var endTime = new Date();
-      console.log('Parsed "' + file + '" in ' + (endTime - startTime) + 'ms');
-      var dict = dicts[0];
-      test.equal(dict['CFBundleIdentifier'], 'com.apple.dictionary.MySample');
-      test.done();
-    });
-  },
-
-  'sample2': function (test) {
-    var file = path.join(__dirname, "sample2.bplist");
-    var startTime = new Date();
-
-    bplist.parseFile(file, function (err, dicts) {
-      if (err) {
-        throw err;
-      }
-
-      var endTime = new Date();
-      console.log('Parsed "' + file + '" in ' + (endTime - startTime) + 'ms');
-      var dict = dicts[0];
-      test.equal(dict['PopupMenu'][2]['Key'], "\n        #import <Cocoa/Cocoa.h>\n\n#import <MacRuby/MacRuby.h>\n\nint main(int argc, char *argv[])\n{\n  return macruby_main(\"rb_main.rb\", argc, argv);\n}\n");
-      test.done();
-    });
-  },
-
-  'airplay': function (test) {
-    var file = path.join(__dirname, "airplay.bplist");
-    var startTime = new Date();
-
-    bplist.parseFile(file, function (err, dicts) {
-      if (err) {
-        throw err;
-      }
-
-      var endTime = new Date();
-      console.log('Parsed "' + file + '" in ' + (endTime - startTime) + 'ms');
-
-      var dict = dicts[0];
-      test.equal(dict['duration'], 5555.0495000000001);
-      test.equal(dict['position'], 4.6269989039999997);
-      test.done();
-    });
-  },
-
-  'utf16': function (test) {
-    var file = path.join(__dirname, "utf16.bplist");
-    var startTime = new Date();
-
-    bplist.parseFile(file, function (err, dicts) {
-      if (err) {
-        throw err;
-      }
-
-      var endTime = new Date();
-      console.log('Parsed "' + file + '" in ' + (endTime - startTime) + 'ms');
-
-      var dict = dicts[0];
-      test.equal(dict['CFBundleName'], 'sellStuff');
-      test.equal(dict['CFBundleShortVersionString'], '2.6.1');
-      test.equal(dict['NSHumanReadableCopyright'], '©2008-2012, sellStuff, Inc.');
-      test.done();
-    });
-  },
-
-  'utf16chinese': function (test) {
-    var file = path.join(__dirname, "utf16_chinese.plist");
-    var startTime = new Date();
-
-    bplist.parseFile(file, function (err, dicts) {
-      if (err) {
-        throw err;
-      }
-
-      var endTime = new Date();
-      console.log('Parsed "' + file + '" in ' + (endTime - startTime) + 'ms');
-
-      var dict = dicts[0];
-      test.equal(dict['CFBundleName'], '天翼阅读');
-      test.equal(dict['CFBundleDisplayName'], '天翼阅读');
-      test.done();
-    });
-  },
-
-
-
-  'uid': function (test) {
-    var file = path.join(__dirname, "uid.bplist");
-    var startTime = new Date();
-
-    bplist.parseFile(file, function (err, dicts) {
-      if (err) {
-        throw err;
-      }
-
-      var endTime = new Date();
-      console.log('Parsed "' + file + '" in ' + (endTime - startTime) + 'ms');
-
-      var dict = dicts[0];
-      test.deepEqual(dict['$objects'][1]['NS.keys'], [{UID:2}, {UID:3}, {UID:4}]);
-      test.deepEqual(dict['$objects'][1]['NS.objects'], [{UID: 5}, {UID:6}, {UID:7}]);
-      test.deepEqual(dict['$top']['root'], {UID:1});
-      test.done();
-    });
-  }
-};
diff --git a/bin/node_modules/cordova-common/node_modules/bplist-parser/test/sample1.bplist b/bin/node_modules/cordova-common/node_modules/bplist-parser/test/sample1.bplist
deleted file mode 100644
index 5b808ff..0000000
--- a/bin/node_modules/cordova-common/node_modules/bplist-parser/test/sample1.bplist
+++ /dev/null
Binary files differ
diff --git a/bin/node_modules/cordova-common/node_modules/bplist-parser/test/sample2.bplist b/bin/node_modules/cordova-common/node_modules/bplist-parser/test/sample2.bplist
deleted file mode 100644
index fc42979..0000000
--- a/bin/node_modules/cordova-common/node_modules/bplist-parser/test/sample2.bplist
+++ /dev/null
Binary files differ
diff --git a/bin/node_modules/cordova-common/node_modules/bplist-parser/test/uid.bplist b/bin/node_modules/cordova-common/node_modules/bplist-parser/test/uid.bplist
deleted file mode 100644
index 59f341e..0000000
--- a/bin/node_modules/cordova-common/node_modules/bplist-parser/test/uid.bplist
+++ /dev/null
Binary files differ
diff --git a/bin/node_modules/cordova-common/node_modules/bplist-parser/test/utf16.bplist b/bin/node_modules/cordova-common/node_modules/bplist-parser/test/utf16.bplist
deleted file mode 100644
index ba4bcfa..0000000
--- a/bin/node_modules/cordova-common/node_modules/bplist-parser/test/utf16.bplist
+++ /dev/null
Binary files differ
diff --git a/bin/node_modules/cordova-common/node_modules/bplist-parser/test/utf16_chinese.plist b/bin/node_modules/cordova-common/node_modules/bplist-parser/test/utf16_chinese.plist
deleted file mode 100644
index ba1e2d7..0000000
--- a/bin/node_modules/cordova-common/node_modules/bplist-parser/test/utf16_chinese.plist
+++ /dev/null
Binary files differ
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/.npmignore b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/.npmignore
deleted file mode 100644
index 3c3629e..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/.npmignore
+++ /dev/null
@@ -1 +0,0 @@
-node_modules
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/.travis.yml b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/.travis.yml
deleted file mode 100644
index ae381fc..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/.travis.yml
+++ /dev/null
@@ -1,7 +0,0 @@
-language: node_js
-sudo: false 
-node_js:
-  - "0.10"
-install: npm install
-script:
-  - npm test
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/README.md b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/README.md
deleted file mode 100644
index 3b93e5f..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/README.md
+++ /dev/null
@@ -1,14 +0,0 @@
-[![Build Status](https://travis-ci.org/stevengill/cordova-registry-mapper.svg?branch=master)](https://travis-ci.org/stevengill/cordova-registry-mapper)
-
-#Cordova Registry Mapper
-
-This module is used to map Cordova plugin ids to package names and vice versa.
-
-When Cordova users add plugins to their projects using ids
-(e.g. `cordova plugin add org.apache.cordova.device`),
-this module will map that id to the corresponding package name so `cordova-lib` knows what to fetch from **npm**.
-
-This module was created so the Apache Cordova project could migrate its plugins from
-the [Cordova Registry](http://registry.cordova.io/)
-to [npm](https://registry.npmjs.com/)
-instead of having to maintain a registry.
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/index.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/index.js
deleted file mode 100644
index 6c5091d..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/index.js
+++ /dev/null
@@ -1,199 +0,0 @@
-var map = {
-    'org.apache.cordova.battery-status':'cordova-plugin-battery-status',
-    'org.apache.cordova.camera':'cordova-plugin-camera',
-    'org.apache.cordova.console':'cordova-plugin-console',
-    'org.apache.cordova.contacts':'cordova-plugin-contacts',
-    'org.apache.cordova.device':'cordova-plugin-device',
-    'org.apache.cordova.device-motion':'cordova-plugin-device-motion',
-    'org.apache.cordova.device-orientation':'cordova-plugin-device-orientation',
-    'org.apache.cordova.dialogs':'cordova-plugin-dialogs',
-    'org.apache.cordova.file':'cordova-plugin-file',
-    'org.apache.cordova.file-transfer':'cordova-plugin-file-transfer',
-    'org.apache.cordova.geolocation':'cordova-plugin-geolocation',
-    'org.apache.cordova.globalization':'cordova-plugin-globalization',
-    'org.apache.cordova.inappbrowser':'cordova-plugin-inappbrowser',
-    'org.apache.cordova.media':'cordova-plugin-media',
-    'org.apache.cordova.media-capture':'cordova-plugin-media-capture',
-    'org.apache.cordova.network-information':'cordova-plugin-network-information',
-    'org.apache.cordova.splashscreen':'cordova-plugin-splashscreen',
-    'org.apache.cordova.statusbar':'cordova-plugin-statusbar',
-    'org.apache.cordova.vibration':'cordova-plugin-vibration',
-    'org.apache.cordova.test-framework':'cordova-plugin-test-framework',
-    'com.msopentech.websql' : 'cordova-plugin-websql',
-    'com.msopentech.indexeddb' : 'cordova-plugin-indexeddb',
-    'com.microsoft.aad.adal' : 'cordova-plugin-ms-adal',
-    'com.microsoft.capptain' : 'capptain-cordova',
-    'com.microsoft.services.aadgraph' : 'cordova-plugin-ms-aad-graph',
-    'com.microsoft.services.files' : 'cordova-plugin-ms-files',
-    'om.microsoft.services.outlook' : 'cordova-plugin-ms-outlook',
-    'com.pbakondy.sim' : 'cordova-plugin-sim',
-    'android.support.v4' : 'cordova-plugin-android-support-v4',
-    'android.support.v7-appcompat' : 'cordova-plugin-android-support-v7-appcompat',
-    'com.google.playservices' : 'cordova-plugin-googleplayservices',
-    'com.google.cordova.admob' : 'cordova-plugin-admobpro',
-    'com.rjfun.cordova.extension' : 'cordova-plugin-extension',
-    'com.rjfun.cordova.plugin.admob' : 'cordova-plugin-admob',
-    'com.rjfun.cordova.flurryads' : 'cordova-plugin-flurry',
-    'com.rjfun.cordova.facebookads' : 'cordova-plugin-facebookads',
-    'com.rjfun.cordova.httpd' : 'cordova-plugin-httpd',
-    'com.rjfun.cordova.iad' : 'cordova-plugin-iad',
-    'com.rjfun.cordova.iflyspeech' : 'cordova-plugin-iflyspeech',
-    'com.rjfun.cordova.lianlianpay' : 'cordova-plugin-lianlianpay',
-    'com.rjfun.cordova.mobfox' : 'cordova-plugin-mobfox',
-    'com.rjfun.cordova.mopub' : 'cordova-plugin-mopub',
-    'com.rjfun.cordova.mmedia' : 'cordova-plugin-mmedia',
-    'com.rjfun.cordova.nativeaudio' : 'cordova-plugin-nativeaudio',
-    'com.rjfun.cordova.plugin.paypalmpl' : 'cordova-plugin-paypalmpl',
-    'com.rjfun.cordova.smartadserver' : 'cordova-plugin-smartadserver',
-    'com.rjfun.cordova.sms' : 'cordova-plugin-sms',
-    'com.rjfun.cordova.wifi' : 'cordova-plugin-wifi',
-    'com.ohh2ahh.plugins.appavailability' : 'cordova-plugin-appavailability',
-    'org.adapt-it.cordova.fonts' : 'cordova-plugin-fonts',
-    'de.martinreinhardt.cordova.plugins.barcodeScanner' : 'cordova-plugin-barcodescanner',
-    'de.martinreinhardt.cordova.plugins.urlhandler' : 'cordova-plugin-urlhandler',
-    'de.martinreinhardt.cordova.plugins.email' : 'cordova-plugin-email',
-    'de.martinreinhardt.cordova.plugins.certificates' : 'cordova-plugin-certificates',
-    'de.martinreinhardt.cordova.plugins.sqlite' : 'cordova-plugin-sqlite',
-    'fr.smile.cordova.fileopener' : 'cordova-plugin-fileopener',
-    'org.smile.websqldatabase.initializer' : 'cordova-plugin-websqldatabase-initializer',
-    'org.smile.websqldatabase.wpdb' : 'cordova-plugin-websqldatabase',
-    'org.jboss.aerogear.cordova.push' : 'aerogear-cordova-push',
-    'org.jboss.aerogear.cordova.oauth2' : 'aerogear-cordova-oauth2',
-    'org.jboss.aerogear.cordova.geo' : 'aerogear-cordova-geo',
-    'org.jboss.aerogear.cordova.crypto' : 'aerogear-cordova-crypto',
-    'org.jboss.aerogaer.cordova.otp' : 'aerogear-cordova-otp',
-    'uk.co.ilee.applewatch' : 'cordova-plugin-apple-watch',
-    'uk.co.ilee.directions' : 'cordova-plugin-directions',
-    'uk.co.ilee.gamecenter' : 'cordova-plugin-game-center',
-    'uk.co.ilee.jailbreakdetection' : 'cordova-plugin-jailbreak-detection',
-    'uk.co.ilee.nativetransitions' : 'cordova-plugin-native-transitions',
-    'uk.co.ilee.pedometer' : 'cordova-plugin-pedometer',
-    'uk.co.ilee.shake' : 'cordova-plugin-shake',
-    'uk.co.ilee.touchid' : 'cordova-plugin-touchid',
-    'com.knowledgecode.cordova.websocket' : 'cordova-plugin-websocket',
-    'com.elixel.plugins.settings' : 'cordova-plugin-settings',
-    'com.cowbell.cordova.geofence' : 'cordova-plugin-geofence',
-    'com.blackberry.community.preventsleep' : 'cordova-plugin-preventsleep',
-    'com.blackberry.community.gamepad' : 'cordova-plugin-gamepad',
-    'com.blackberry.community.led' : 'cordova-plugin-led',
-    'com.blackberry.community.thumbnail' : 'cordova-plugin-thumbnail',
-    'com.blackberry.community.mediakeys' : 'cordova-plugin-mediakeys',
-    'com.blackberry.community.simplebtlehrplugin' : 'cordova-plugin-bluetoothheartmonitor',
-    'com.blackberry.community.simplebeaconplugin' : 'cordova-plugin-bluetoothibeacon',
-    'com.blackberry.community.simplebtsppplugin' : 'cordova-plugin-bluetoothspp',
-    'com.blackberry.community.clipboard' : 'cordova-plugin-clipboard',
-    'com.blackberry.community.curl' : 'cordova-plugin-curl',
-    'com.blackberry.community.qt' : 'cordova-plugin-qtbridge',
-    'com.blackberry.community.upnp' : 'cordova-plugin-upnp',
-    'com.blackberry.community.PasswordCrypto' : 'cordova-plugin-password-crypto',
-    'com.blackberry.community.deviceinfoplugin' : 'cordova-plugin-deviceinfo',
-    'com.blackberry.community.gsecrypto' : 'cordova-plugin-bb-crypto',
-    'com.blackberry.community.mongoose' : 'cordova-plugin-mongoose',
-    'com.blackberry.community.sysdialog' : 'cordova-plugin-bb-sysdialog',
-    'com.blackberry.community.screendisplay' : 'cordova-plugin-screendisplay',
-    'com.blackberry.community.messageplugin' : 'cordova-plugin-bb-messageretrieve',
-    'com.blackberry.community.emailsenderplugin' : 'cordova-plugin-emailsender',
-    'com.blackberry.community.audiometadata' : 'cordova-plugin-audiometadata',
-    'com.blackberry.community.deviceemails' : 'cordova-plugin-deviceemails',
-    'com.blackberry.community.audiorecorder' : 'cordova-plugin-audiorecorder',
-    'com.blackberry.community.vibration' : 'cordova-plugin-vibrate-intense',
-    'com.blackberry.community.SMSPlugin' : 'cordova-plugin-bb-sms',
-    'com.blackberry.community.extractZipFile' : 'cordova-plugin-bb-zip',
-    'com.blackberry.community.lowlatencyaudio' : 'cordova-plugin-bb-nativeaudio',
-    'com.blackberry.community.barcodescanner' : 'phonegap-plugin-barcodescanner',
-    'com.blackberry.app' : 'cordova-plugin-bb-app',
-    'com.blackberry.bbm.platform' : 'cordova-plugin-bbm',
-    'com.blackberry.connection' : 'cordova-plugin-bb-connection',
-    'com.blackberry.identity' : 'cordova-plugin-bb-identity',
-    'com.blackberry.invoke.card' : 'cordova-plugin-bb-card',
-    'com.blackberry.invoke' : 'cordova-plugin-bb-invoke',
-    'com.blackberry.invoked' : 'cordova-plugin-bb-invoked',
-    'com.blackberry.io.filetransfer' : 'cordova-plugin-bb-filetransfer',
-    'com.blackberry.io' : 'cordova-plugin-bb-io',
-    'com.blackberry.notification' : 'cordova-plugin-bb-notification',
-    'com.blackberry.payment' : 'cordova-plugin-bb-payment',
-    'com.blackberry.pim.calendar' : 'cordova-plugin-bb-calendar',
-    'com.blackberry.pim.contacts' : 'cordova-plugin-bb-contacts',
-    'com.blackberry.pim.lib' : 'cordova-plugin-bb-pimlib',
-    'com.blackberry.push' : 'cordova-plugin-bb-push',
-    'com.blackberry.screenshot' : 'cordova-plugin-screenshot',
-    'com.blackberry.sensors' : 'cordova-plugin-bb-sensors',
-    'com.blackberry.system' : 'cordova-plugin-bb-system',
-    'com.blackberry.ui.contextmenu' : 'cordova-plugin-bb-ctxmenu',
-    'com.blackberry.ui.cover' : 'cordova-plugin-bb-cover',
-    'com.blackberry.ui.dialog' : 'cordova-plugin-bb-dialog',
-    'com.blackberry.ui.input' : 'cordova-plugin-touch-keyboard',
-    'com.blackberry.ui.toast' : 'cordova-plugin-toast',
-    'com.blackberry.user.identity' : 'cordova-plugin-bb-idservice',
-    'com.blackberry.utils' : 'cordova-plugin-bb-utils',
-    'net.yoik.cordova.plugins.screenorientation' : 'cordova-plugin-screen-orientation',
-    'com.phonegap.plugins.barcodescanner' : 'phonegap-plugin-barcodescanner',
-    'com.manifoldjs.hostedwebapp' : 'cordova-plugin-hostedwebapp',
-    'com.initialxy.cordova.themeablebrowser' : 'cordova-plugin-themeablebrowser',
-    'gr.denton.photosphere' : 'cordova-plugin-panoramaviewer',
-    'nl.x-services.plugins.actionsheet' : 'cordova-plugin-actionsheet',
-    'nl.x-services.plugins.socialsharing' : 'cordova-plugin-x-socialsharing',
-    'nl.x-services.plugins.googleplus' : 'cordova-plugin-googleplus',
-    'nl.x-services.plugins.insomnia' : 'cordova-plugin-insomnia',
-    'nl.x-services.plugins.toast' : 'cordova-plugin-x-toast',
-    'nl.x-services.plugins.calendar' : 'cordova-plugin-calendar',
-    'nl.x-services.plugins.launchmyapp' : 'cordova-plugin-customurlscheme',
-    'nl.x-services.plugins.flashlight' : 'cordova-plugin-flashlight',
-    'nl.x-services.plugins.sslcertificatechecker' : 'cordova-plugin-sslcertificatechecker',
-    'com.bridge.open' : 'cordova-open',
-    'com.bridge.safe' : 'cordova-safe',
-    'com.disusered.open' : 'cordova-open',
-    'com.disusered.safe' : 'cordova-safe',
-    'me.apla.cordova.app-preferences' : 'cordova-plugin-app-preferences',
-    'com.konotor.cordova' : 'cordova-plugin-konotor',
-    'io.intercom.cordova' : 'cordova-plugin-intercom',
-    'com.onesignal.plugins.onesignal' : 'onesignal-cordova-plugin',
-    'com.danjarvis.document-contract': 'cordova-plugin-document-contract',
-    'com.eface2face.iosrtc' : 'cordova-plugin-iosrtc',
-    'com.mobileapptracking.matplugin' : 'cordova-plugin-tune',
-    'com.marianhello.cordova.background-geolocation' : 'cordova-plugin-mauron85-background-geolocation',
-    'fr.louisbl.cordova.locationservices' : 'cordova-plugin-locationservices',
-    'fr.louisbl.cordova.gpslocation' : 'cordova-plugin-gpslocation',
-    'com.hiliaox.weibo' : 'cordova-plugin-weibo',
-    'com.uxcam.cordova.plugin' : 'cordova-uxcam',
-    'de.fastr.phonegap.plugins.downloader' : 'cordova-plugin-fastrde-downloader',
-    'de.fastr.phonegap.plugins.injectView' : 'cordova-plugin-fastrde-injectview',
-    'de.fastr.phonegap.plugins.CheckGPS' : 'cordova-plugin-fastrde-checkgps',
-    'de.fastr.phonegap.plugins.md5chksum' : ' cordova-plugin-fastrde-md5',
-    'io.repro.cordova' : 'cordova-plugin-repro',
-    're.notifica.cordova': 'cordova-plugin-notificare-push',
-    'com.megster.cordova.ble': 'cordova-plugin-ble-central',
-    'com.megster.cordova.bluetoothserial': 'cordova-plugin-bluetooth-serial',
-    'com.megster.cordova.rfduino': 'cordova-plugin-rfduino',
-    'cz.velda.cordova.plugin.devicefeedback': 'cordova-plugin-velda-devicefeedback',
-    'cz.Velda.cordova.plugin.devicefeedback': 'cordova-plugin-velda-devicefeedback',
-    'org.scriptotek.appinfo': 'cordova-plugin-appinfo',
-    'com.yezhiming.cordova.appinfo': 'cordova-plugin-appinfo',
-    'pl.makingwaves.estimotebeacons': 'cordova-plugin-estimote',
-    'com.evothings.ble': 'cordova-plugin-ble',
-    'com.appsee.plugin' : 'cordova-plugin-appsee',
-    'am.armsoft.plugins.listpicker': 'cordova-plugin-listpicker',
-    'com.pushbots.push': 'pushbots-cordova-plugin',
-    'com.admob.google': 'cordova-admob',
-    'admob.ads.google': 'cordova-admob-ads',
-    'admob.google.plugin': 'admob-google',
-    'com.admob.admobads': 'admob-ads',
-    'com.connectivity.monitor': 'cordova-connectivity-monitor',
-    'com.ios.libgoogleadmobads': 'cordova-libgoogleadmobads',
-    'com.google.play.services': 'cordova-google-play-services',
-    'android.support.v13': 'cordova-android-support-v13',
-    'android.support.v4': 'cordova-android-support-v4',
-    'com.analytics.google': 'cordova-plugin-analytics',
-    'com.analytics.adid.google': 'cordova-plugin-analytics-adid',
-    'com.chariotsolutions.nfc.plugin': 'phonegap-nfc',
-    'com.samz.mixpanel': 'cordova-plugin-mixpanel'
-}
-
-module.exports.oldToNew = map;
-
-var reverseMap = {};
-Object.keys(map).forEach(function(elem){
-    reverseMap[map[elem]] = elem;
-})
-
-module.exports.newToOld = reverseMap;
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/.bin/tape b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/.bin/tape
deleted file mode 100644
index dc4bc23..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/.bin/tape
+++ /dev/null
@@ -1 +0,0 @@
-../tape/bin/tape
\ No newline at end of file
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/.npmignore b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/.npmignore
deleted file mode 100644
index 07e6e47..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/.npmignore
+++ /dev/null
@@ -1 +0,0 @@
-/node_modules
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/.travis.yml b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/.travis.yml
deleted file mode 100644
index cc4dba2..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/.travis.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-language: node_js
-node_js:
-  - "0.8"
-  - "0.10"
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/LICENSE b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/LICENSE
deleted file mode 100644
index ee27ba4..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/LICENSE
+++ /dev/null
@@ -1,18 +0,0 @@
-This software is released under the MIT license:
-
-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/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/bin/tape b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/bin/tape
deleted file mode 100644
index 500f1b1..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/bin/tape
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/usr/bin/env node
-
-var path = require('path');
-var glob = require('glob');
-
-process.argv.slice(2).forEach(function (arg) {
-    glob(arg, function (err, files) {
-        files.forEach(function (file) {
-            require(path.resolve(process.cwd(), file));
-        });
-    });
-});
-
-// vim: ft=javascript
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/example/array.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/example/array.js
deleted file mode 100644
index d36857d..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/example/array.js
+++ /dev/null
@@ -1,35 +0,0 @@
-var falafel = require('falafel');
-var test = require('../');
-
-test('array', function (t) {
-    t.plan(5);
-    
-    var src = '(' + function () {
-        var xs = [ 1, 2, [ 3, 4 ] ];
-        var ys = [ 5, 6 ];
-        g([ xs, ys ]);
-    } + ')()';
-    
-    var output = falafel(src, function (node) {
-        if (node.type === 'ArrayExpression') {
-            node.update('fn(' + node.source() + ')');
-        }
-    });
-    
-    var arrays = [
-        [ 3, 4 ],
-        [ 1, 2, [ 3, 4 ] ],
-        [ 5, 6 ],
-        [ [ 1, 2, [ 3, 4 ] ], [ 5, 6 ] ],
-    ];
-    
-    Function(['fn','g'], output)(
-        function (xs) {
-            t.same(arrays.shift(), xs);
-            return xs;
-        },
-        function (xs) {
-            t.same(xs, [ [ 1, 2, [ 3, 4 ] ], [ 5, 6 ] ]);
-        }
-    );
-});
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/example/fail.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/example/fail.js
deleted file mode 100644
index a7bf444..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/example/fail.js
+++ /dev/null
@@ -1,35 +0,0 @@
-var falafel = require('falafel');
-var test = require('../');
-
-test('array', function (t) {
-    t.plan(5);
-    
-    var src = '(' + function () {
-        var xs = [ 1, 2, [ 3, 4 ] ];
-        var ys = [ 5, 6 ];
-        g([ xs, ys ]);
-    } + ')()';
-    
-    var output = falafel(src, function (node) {
-        if (node.type === 'ArrayExpression') {
-            node.update('fn(' + node.source() + ')');
-        }
-    });
-    
-    var arrays = [
-        [ 3, 4 ],
-        [ 1, 2, [ 3, 4 ] ],
-        [ 5, 6 ],
-        [ [ 1, 2, [ 3, 4 ] ], [ 5, 6 ] ],
-    ];
-    
-    Function(['fn','g'], output)(
-        function (xs) {
-            t.same(arrays.shift(), xs);
-            return xs;
-        },
-        function (xs) {
-            t.same(xs, [ [ 1, 2, [ 3, 4444 ] ], [ 5, 6 ] ]);
-        }
-    );
-});
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/example/nested.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/example/nested.js
deleted file mode 100644
index 0e233d3..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/example/nested.js
+++ /dev/null
@@ -1,51 +0,0 @@
-var falafel = require('falafel');
-var test = require('../');
-
-test('nested array test', function (t) {
-    t.plan(5);
-    
-    var src = '(' + function () {
-        var xs = [ 1, 2, [ 3, 4 ] ];
-        var ys = [ 5, 6 ];
-        g([ xs, ys ]);
-    } + ')()';
-    
-    var output = falafel(src, function (node) {
-        if (node.type === 'ArrayExpression') {
-            node.update('fn(' + node.source() + ')');
-        }
-    });
-    
-    t.test('inside test', function (q) {
-        q.plan(2);
-        q.ok(true, 'inside ok');
-        
-        setTimeout(function () {
-            q.ok(true, 'inside delayed');
-        }, 3000);
-    });
-    
-    var arrays = [
-        [ 3, 4 ],
-        [ 1, 2, [ 3, 4 ] ],
-        [ 5, 6 ],
-        [ [ 1, 2, [ 3, 4 ] ], [ 5, 6 ] ],
-    ];
-    
-    Function(['fn','g'], output)(
-        function (xs) {
-            t.same(arrays.shift(), xs);
-            return xs;
-        },
-        function (xs) {
-            t.same(xs, [ [ 1, 2, [ 3, 4 ] ], [ 5, 6 ] ]);
-        }
-    );
-});
-
-test('another', function (t) {
-    t.plan(1);
-    setTimeout(function () {
-        t.ok(true);
-    }, 100);
-});
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/example/nested_fail.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/example/nested_fail.js
deleted file mode 100644
index 3ab5cb3..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/example/nested_fail.js
+++ /dev/null
@@ -1,51 +0,0 @@
-var falafel = require('falafel');
-var test = require('../');
-
-test('nested array test', function (t) {
-    t.plan(5);
-    
-    var src = '(' + function () {
-        var xs = [ 1, 2, [ 3, 4 ] ];
-        var ys = [ 5, 6 ];
-        g([ xs, ys ]);
-    } + ')()';
-    
-    var output = falafel(src, function (node) {
-        if (node.type === 'ArrayExpression') {
-            node.update('fn(' + node.source() + ')');
-        }
-    });
-    
-    t.test('inside test', function (q) {
-        q.plan(2);
-        q.ok(true);
-        
-        setTimeout(function () {
-            q.equal(3, 4);
-        }, 3000);
-    });
-    
-    var arrays = [
-        [ 3, 4 ],
-        [ 1, 2, [ 3, 4 ] ],
-        [ 5, 6 ],
-        [ [ 1, 2, [ 3, 4 ] ], [ 5, 6 ] ],
-    ];
-    
-    Function(['fn','g'], output)(
-        function (xs) {
-            t.same(arrays.shift(), xs);
-            return xs;
-        },
-        function (xs) {
-            t.same(xs, [ [ 1, 2, [ 3, 4 ] ], [ 5, 6 ] ]);
-        }
-    );
-});
-
-test('another', function (t) {
-    t.plan(1);
-    setTimeout(function () {
-        t.ok(true);
-    }, 100);
-});
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/example/not_enough.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/example/not_enough.js
deleted file mode 100644
index 13b682b..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/example/not_enough.js
+++ /dev/null
@@ -1,35 +0,0 @@
-var falafel = require('falafel');
-var test = require('../');
-
-test('array', function (t) {
-    t.plan(8);
-    
-    var src = '(' + function () {
-        var xs = [ 1, 2, [ 3, 4 ] ];
-        var ys = [ 5, 6 ];
-        g([ xs, ys ]);
-    } + ')()';
-    
-    var output = falafel(src, function (node) {
-        if (node.type === 'ArrayExpression') {
-            node.update('fn(' + node.source() + ')');
-        }
-    });
-    
-    var arrays = [
-        [ 3, 4 ],
-        [ 1, 2, [ 3, 4 ] ],
-        [ 5, 6 ],
-        [ [ 1, 2, [ 3, 4 ] ], [ 5, 6 ] ],
-    ];
-    
-    Function(['fn','g'], output)(
-        function (xs) {
-            t.same(arrays.shift(), xs);
-            return xs;
-        },
-        function (xs) {
-            t.same(xs, [ [ 1, 2, [ 3, 4 ] ], [ 5, 6 ] ]);
-        }
-    );
-});
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/example/static/build.sh b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/example/static/build.sh
deleted file mode 100644
index c583640..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/example/static/build.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/bin/bash
-browserify ../timing.js -o bundle.js
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/example/static/index.html b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/example/static/index.html
deleted file mode 100644
index 45ccf07..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/example/static/index.html
+++ /dev/null
@@ -1,21 +0,0 @@
-<!doctype html>
-<html>
-<head>
-<style>
-body {
-    font-family: monospace;
-    white-space: pre;
-}
-</style>
-</head>
-<body>
-<script>
-if (typeof console === 'undefined') console = {};
-console.log = function (msg) {
-    var txt = document.createTextNode(msg);
-    document.body.appendChild(txt);
-};
-</script>
-<script src="bundle.js"></script>
-</body>
-</html>
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/example/static/server.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/example/static/server.js
deleted file mode 100644
index 80cea43..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/example/static/server.js
+++ /dev/null
@@ -1,4 +0,0 @@
-var http = require('http');
-var ecstatic = require('ecstatic')(__dirname);
-var server = http.createServer(ecstatic);
-server.listen(8000);
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/example/stream/object.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/example/stream/object.js
deleted file mode 100644
index 8f77f0f..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/example/stream/object.js
+++ /dev/null
@@ -1,10 +0,0 @@
-var test = require('../../');
-var path = require('path');
-
-test.createStream({ objectMode: true }).on('data', function (row) {
-    console.log(JSON.stringify(row))
-});
-
-process.argv.slice(2).forEach(function (file) {
-    require(path.resolve(file));
-});
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/example/stream/tap.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/example/stream/tap.js
deleted file mode 100644
index 9ea9ff7..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/example/stream/tap.js
+++ /dev/null
@@ -1,8 +0,0 @@
-var test = require('../../');
-var path = require('path');
-
-test.createStream().pipe(process.stdout);
-
-process.argv.slice(2).forEach(function (file) {
-    require(path.resolve(file));
-});
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/example/stream/test/x.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/example/stream/test/x.js
deleted file mode 100644
index 7dbb98a..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/example/stream/test/x.js
+++ /dev/null
@@ -1,5 +0,0 @@
-var test = require('../../../');
-test(function (t) {
-    t.plan(1);
-    t.equal('beep', 'boop');
-});
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/example/stream/test/y.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/example/stream/test/y.js
deleted file mode 100644
index 28606d5..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/example/stream/test/y.js
+++ /dev/null
@@ -1,11 +0,0 @@
-var test = require('../../../');
-test(function (t) {
-    t.plan(2);
-    t.equal(1+1, 2);
-    t.ok(true);
-});
-
-test('wheee', function (t) {
-    t.ok(true);
-    t.end();
-});
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/example/throw.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/example/throw.js
deleted file mode 100644
index 9a69ec0..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/example/throw.js
+++ /dev/null
@@ -1,10 +0,0 @@
-var falafel = require('falafel');
-var test = require('../');
-
-test('throw', function (t) {
-    t.plan(2);
-    
-    setTimeout(function () {
-        throw new Error('doom');
-    }, 100);
-});
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/example/timing.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/example/timing.js
deleted file mode 100644
index 0268dc7..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/example/timing.js
+++ /dev/null
@@ -1,12 +0,0 @@
-var test = require('../');
-
-test('timing test', function (t) {
-    t.plan(2);
-    
-    t.equal(typeof Date.now, 'function');
-    var start = new Date;
-    
-    setTimeout(function () {
-        t.equal(new Date - start, 100);
-    }, 100);
-});
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/example/too_many.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/example/too_many.js
deleted file mode 100644
index ee285fb..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/example/too_many.js
+++ /dev/null
@@ -1,35 +0,0 @@
-var falafel = require('falafel');
-var test = require('../');
-
-test('array', function (t) {
-    t.plan(3);
-    
-    var src = '(' + function () {
-        var xs = [ 1, 2, [ 3, 4 ] ];
-        var ys = [ 5, 6 ];
-        g([ xs, ys ]);
-    } + ')()';
-    
-    var output = falafel(src, function (node) {
-        if (node.type === 'ArrayExpression') {
-            node.update('fn(' + node.source() + ')');
-        }
-    });
-    
-    var arrays = [
-        [ 3, 4 ],
-        [ 1, 2, [ 3, 4 ] ],
-        [ 5, 6 ],
-        [ [ 1, 2, [ 3, 4 ] ], [ 5, 6 ] ],
-    ];
-    
-    Function(['fn','g'], output)(
-        function (xs) {
-            t.same(arrays.shift(), xs);
-            return xs;
-        },
-        function (xs) {
-            t.same(xs, [ [ 1, 2, [ 3, 4 ] ], [ 5, 6 ] ]);
-        }
-    );
-});
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/example/two.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/example/two.js
deleted file mode 100644
index 78e49c3..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/example/two.js
+++ /dev/null
@@ -1,18 +0,0 @@
-var test = require('../');
-
-test('one', function (t) {
-    t.plan(2);
-    t.ok(true);
-    setTimeout(function () {
-        t.equal(1+3, 4);
-    }, 100);
-});
-
-test('two', function (t) {
-    t.plan(3);
-    t.equal(5, 2+3);
-    setTimeout(function () {
-        t.equal('a'.charCodeAt(0), 97);
-        t.ok(true);
-    }, 50);
-});
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/index.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/index.js
deleted file mode 100644
index a44daf9..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/index.js
+++ /dev/null
@@ -1,140 +0,0 @@
-var defined = require('defined');
-var createDefaultStream = require('./lib/default_stream');
-var Test = require('./lib/test');
-var createResult = require('./lib/results');
-var through = require('through');
-
-var canEmitExit = typeof process !== 'undefined' && process
-    && typeof process.on === 'function' && process.browser !== true
-;
-var canExit = typeof process !== 'undefined' && process
-    && typeof process.exit === 'function'
-;
-
-var nextTick = typeof setImmediate !== 'undefined'
-    ? setImmediate
-    : process.nextTick
-;
-
-exports = module.exports = (function () {
-    var harness;
-    var lazyLoad = function () {
-        return getHarness().apply(this, arguments);
-    };
-    
-    lazyLoad.only = function () {
-        return getHarness().only.apply(this, arguments);
-    };
-    
-    lazyLoad.createStream = function (opts) {
-        if (!opts) opts = {};
-        if (!harness) {
-            var output = through();
-            getHarness({ stream: output, objectMode: opts.objectMode });
-            return output;
-        }
-        return harness.createStream(opts);
-    };
-    
-    return lazyLoad
-    
-    function getHarness (opts) {
-        if (!opts) opts = {};
-        opts.autoclose = !canEmitExit;
-        if (!harness) harness = createExitHarness(opts);
-        return harness;
-    }
-})();
-
-function createExitHarness (conf) {
-    if (!conf) conf = {};
-    var harness = createHarness({
-        autoclose: defined(conf.autoclose, false)
-    });
-    
-    var stream = harness.createStream({ objectMode: conf.objectMode });
-    var es = stream.pipe(conf.stream || createDefaultStream());
-    if (canEmitExit) {
-        es.on('error', function (err) { harness._exitCode = 1 });
-    }
-    
-    var ended = false;
-    stream.on('end', function () { ended = true });
-    
-    if (conf.exit === false) return harness;
-    if (!canEmitExit || !canExit) return harness;
-
-    var inErrorState = false;
-
-    process.on('exit', function (code) {
-        // let the process exit cleanly.
-        if (code !== 0) {
-            return
-        }
-
-        if (!ended) {
-            var only = harness._results._only;
-            for (var i = 0; i < harness._tests.length; i++) {
-                var t = harness._tests[i];
-                if (only && t.name !== only) continue;
-                t._exit();
-            }
-        }
-        harness.close();
-        process.exit(code || harness._exitCode);
-    });
-    
-    return harness;
-}
-
-exports.createHarness = createHarness;
-exports.Test = Test;
-exports.test = exports; // tap compat
-exports.test.skip = Test.skip;
-
-var exitInterval;
-
-function createHarness (conf_) {
-    if (!conf_) conf_ = {};
-    var results = createResult();
-    if (conf_.autoclose !== false) {
-        results.once('done', function () { results.close() });
-    }
-    
-    var test = function (name, conf, cb) {
-        var t = new Test(name, conf, cb);
-        test._tests.push(t);
-        
-        (function inspectCode (st) {
-            st.on('test', function sub (st_) {
-                inspectCode(st_);
-            });
-            st.on('result', function (r) {
-                if (!r.ok) test._exitCode = 1
-            });
-        })(t);
-        
-        results.push(t);
-        return t;
-    };
-    test._results = results;
-    
-    test._tests = [];
-    
-    test.createStream = function (opts) {
-        return results.createStream(opts);
-    };
-    
-    var only = false;
-    test.only = function (name) {
-        if (only) throw new Error('there can only be one only test');
-        results.only(name);
-        only = true;
-        return test.apply(null, arguments);
-    };
-    test._exitCode = 0;
-    
-    test.close = function () { results.close() };
-    
-    return test;
-}
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/lib/default_stream.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/lib/default_stream.js
deleted file mode 100644
index c8e9918..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/lib/default_stream.js
+++ /dev/null
@@ -1,31 +0,0 @@
-var through = require('through');
-var fs = require('fs');
-
-module.exports = function () {
-    var line = '';
-    var stream = through(write, flush);
-    return stream;
-    
-    function write (buf) {
-        for (var i = 0; i < buf.length; i++) {
-            var c = typeof buf === 'string'
-                ? buf.charAt(i)
-                : String.fromCharCode(buf[i])
-            ;
-            if (c === '\n') flush();
-            else line += c;
-        }
-    }
-    
-    function flush () {
-        if (fs.writeSync && /^win/.test(process.platform)) {
-            try { fs.writeSync(1, line + '\n'); }
-            catch (e) { stream.emit('error', e) }
-        }
-        else {
-            try { console.log(line) }
-            catch (e) { stream.emit('error', e) }
-        }
-        line = '';
-    }
-};
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/lib/results.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/lib/results.js
deleted file mode 100644
index fa414f4..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/lib/results.js
+++ /dev/null
@@ -1,189 +0,0 @@
-var EventEmitter = require('events').EventEmitter;
-var inherits = require('inherits');
-var through = require('through');
-var resumer = require('resumer');
-var inspect = require('object-inspect');
-var nextTick = typeof setImmediate !== 'undefined'
-    ? setImmediate
-    : process.nextTick
-;
-
-module.exports = Results;
-inherits(Results, EventEmitter);
-
-function Results () {
-    if (!(this instanceof Results)) return new Results;
-    this.count = 0;
-    this.fail = 0;
-    this.pass = 0;
-    this._stream = through();
-    this.tests = [];
-}
-
-Results.prototype.createStream = function (opts) {
-    if (!opts) opts = {};
-    var self = this;
-    var output, testId = 0;
-    if (opts.objectMode) {
-        output = through();
-        self.on('_push', function ontest (t, extra) {
-            if (!extra) extra = {};
-            var id = testId++;
-            t.once('prerun', function () {
-                var row = {
-                    type: 'test',
-                    name: t.name,
-                    id: id
-                };
-                if (has(extra, 'parent')) {
-                    row.parent = extra.parent;
-                }
-                output.queue(row);
-            });
-            t.on('test', function (st) {
-                ontest(st, { parent: id });
-            });
-            t.on('result', function (res) {
-                res.test = id;
-                res.type = 'assert';
-                output.queue(res);
-            });
-            t.on('end', function () {
-                output.queue({ type: 'end', test: id });
-            });
-        });
-        self.on('done', function () { output.queue(null) });
-    }
-    else {
-        output = resumer();
-        output.queue('TAP version 13\n');
-        self._stream.pipe(output);
-    }
-    
-    nextTick(function next() {
-        var t;
-        while (t = getNextTest(self)) {
-            t.run();
-            if (!t.ended) return t.once('end', function(){ nextTick(next); });
-        }
-        self.emit('done');
-    });
-    
-    return output;
-};
-
-Results.prototype.push = function (t) {
-    var self = this;
-    self.tests.push(t);
-    self._watch(t);
-    self.emit('_push', t);
-};
-
-Results.prototype.only = function (name) {
-    if (this._only) {
-        self.count ++;
-        self.fail ++;
-        write('not ok ' + self.count + ' already called .only()\n');
-    }
-    this._only = name;
-};
-
-Results.prototype._watch = function (t) {
-    var self = this;
-    var write = function (s) { self._stream.queue(s) };
-    t.once('prerun', function () {
-        write('# ' + t.name + '\n');
-    });
-    
-    t.on('result', function (res) {
-        if (typeof res === 'string') {
-            write('# ' + res + '\n');
-            return;
-        }
-        write(encodeResult(res, self.count + 1));
-        self.count ++;
-
-        if (res.ok) self.pass ++
-        else self.fail ++
-    });
-    
-    t.on('test', function (st) { self._watch(st) });
-};
-
-Results.prototype.close = function () {
-    var self = this;
-    if (self.closed) self._stream.emit('error', new Error('ALREADY CLOSED'));
-    self.closed = true;
-    var write = function (s) { self._stream.queue(s) };
-    
-    write('\n1..' + self.count + '\n');
-    write('# tests ' + self.count + '\n');
-    write('# pass  ' + self.pass + '\n');
-    if (self.fail) write('# fail  ' + self.fail + '\n')
-    else write('\n# ok\n')
-
-    self._stream.queue(null);
-};
-
-function encodeResult (res, count) {
-    var output = '';
-    output += (res.ok ? 'ok ' : 'not ok ') + count;
-    output += res.name ? ' ' + res.name.toString().replace(/\s+/g, ' ') : '';
-    
-    if (res.skip) output += ' # SKIP';
-    else if (res.todo) output += ' # TODO';
-    
-    output += '\n';
-    if (res.ok) return output;
-    
-    var outer = '  ';
-    var inner = outer + '  ';
-    output += outer + '---\n';
-    output += inner + 'operator: ' + res.operator + '\n';
-    
-    if (has(res, 'expected') || has(res, 'actual')) {
-        var ex = inspect(res.expected);
-        var ac = inspect(res.actual);
-        
-        if (Math.max(ex.length, ac.length) > 65) {
-            output += inner + 'expected:\n' + inner + '  ' + ex + '\n';
-            output += inner + 'actual:\n' + inner + '  ' + ac + '\n';
-        }
-        else {
-            output += inner + 'expected: ' + ex + '\n';
-            output += inner + 'actual:   ' + ac + '\n';
-        }
-    }
-    if (res.at) {
-        output += inner + 'at: ' + res.at + '\n';
-    }
-    if (res.operator === 'error' && res.actual && res.actual.stack) {
-        var lines = String(res.actual.stack).split('\n');
-        output += inner + 'stack:\n';
-        output += inner + '  ' + lines[0] + '\n';
-        for (var i = 1; i < lines.length; i++) {
-            output += inner + lines[i] + '\n';
-        }
-    }
-    
-    output += outer + '...\n';
-    return output;
-}
-
-function getNextTest (results) {
-    if (!results._only) {
-        return results.tests.shift();
-    }
-    
-    do {
-        var t = results.tests.shift();
-        if (!t) continue;
-        if (results._only === t.name) {
-            return t;
-        }
-    } while (results.tests.length !== 0)
-}
-
-function has (obj, prop) {
-    return Object.prototype.hasOwnProperty.call(obj, prop);
-}
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/lib/test.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/lib/test.js
deleted file mode 100644
index b9d6111..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/lib/test.js
+++ /dev/null
@@ -1,496 +0,0 @@
-var deepEqual = require('deep-equal');
-var defined = require('defined');
-var path = require('path');
-var inherits = require('inherits');
-var EventEmitter = require('events').EventEmitter;
-
-module.exports = Test;
-
-var nextTick = typeof setImmediate !== 'undefined'
-    ? setImmediate
-    : process.nextTick
-;
-
-inherits(Test, EventEmitter);
-
-var getTestArgs = function (name_, opts_, cb_) {
-    var name = '(anonymous)';
-    var opts = {};
-    var cb;
-
-    for (var i = 0; i < arguments.length; i++) {
-        var arg = arguments[i];
-        var t = typeof arg;
-        if (t === 'string') {
-            name = arg;
-        }
-        else if (t === 'object') {
-            opts = arg || opts;
-        }
-        else if (t === 'function') {
-            cb = arg;
-        }
-    }
-    return { name: name, opts: opts, cb: cb };
-};
-
-function Test (name_, opts_, cb_) {
-    if (! (this instanceof Test)) {
-        return new Test(name_, opts_, cb_);
-    }
-
-    var args = getTestArgs(name_, opts_, cb_);
-
-    this.readable = true;
-    this.name = args.name || '(anonymous)';
-    this.assertCount = 0;
-    this.pendingCount = 0;
-    this._skip = args.opts.skip || false;
-    this._plan = undefined;
-    this._cb = args.cb;
-    this._progeny = [];
-    this._ok = true;
-
-    if (args.opts.timeout !== undefined) {
-        this.timeoutAfter(args.opts.timeout);
-    }
-
-    for (var prop in this) {
-        this[prop] = (function bind(self, val) {
-            if (typeof val === 'function') {
-                return function bound() {
-                    return val.apply(self, arguments);
-                };
-            }
-            else return val;
-        })(this, this[prop]);
-    }
-}
-
-Test.prototype.run = function () {
-    if (!this._cb || this._skip) {
-        return this._end();
-    }
-    this.emit('prerun');
-    this._cb(this);
-    this.emit('run');
-};
-
-Test.prototype.test = function (name, opts, cb) {
-    var self = this;
-    var t = new Test(name, opts, cb);
-    this._progeny.push(t);
-    this.pendingCount++;
-    this.emit('test', t);
-    t.on('prerun', function () {
-        self.assertCount++;
-    })
-    
-    if (!self._pendingAsserts()) {
-        nextTick(function () {
-            self._end();
-        });
-    }
-    
-    nextTick(function() {
-        if (!self._plan && self.pendingCount == self._progeny.length) {
-            self._end();
-        }
-    });
-};
-
-Test.prototype.comment = function (msg) {
-    this.emit('result', msg.trim().replace(/^#\s*/, ''));
-};
-
-Test.prototype.plan = function (n) {
-    this._plan = n;
-    this.emit('plan', n);
-};
-
-Test.prototype.timeoutAfter = function(ms) {
-    if (!ms) throw new Error('timeoutAfter requires a timespan');
-    var self = this;
-    var timeout = setTimeout(function() {
-        self.fail('test timed out after ' + ms + 'ms');
-        self.end();
-    }, ms);
-    this.once('end', function() {
-        clearTimeout(timeout);
-    });
-}
-
-Test.prototype.end = function (err) { 
-    var self = this;
-    if (arguments.length >= 1) {
-        this.ifError(err);
-    }
-    
-    if (this.calledEnd) {
-        this.fail('.end() called twice');
-    }
-    this.calledEnd = true;
-    this._end();
-};
-
-Test.prototype._end = function (err) {
-    var self = this;
-    if (this._progeny.length) {
-        var t = this._progeny.shift();
-        t.on('end', function () { self._end() });
-        t.run();
-        return;
-    }
-    
-    if (!this.ended) this.emit('end');
-    var pendingAsserts = this._pendingAsserts();
-    if (!this._planError && this._plan !== undefined && pendingAsserts) {
-        this._planError = true;
-        this.fail('plan != count', {
-            expected : this._plan,
-            actual : this.assertCount
-        });
-    }
-    this.ended = true;
-};
-
-Test.prototype._exit = function () {
-    if (this._plan !== undefined &&
-        !this._planError && this.assertCount !== this._plan) {
-        this._planError = true;
-        this.fail('plan != count', {
-            expected : this._plan,
-            actual : this.assertCount,
-            exiting : true
-        });
-    }
-    else if (!this.ended) {
-        this.fail('test exited without ending', {
-            exiting: true
-        });
-    }
-};
-
-Test.prototype._pendingAsserts = function () {
-    if (this._plan === undefined) {
-        return 1;
-    }
-    else {
-        return this._plan - (this._progeny.length + this.assertCount);
-    }
-};
-
-Test.prototype._assert = function assert (ok, opts) {
-    var self = this;
-    var extra = opts.extra || {};
-    
-    var res = {
-        id : self.assertCount ++,
-        ok : Boolean(ok),
-        skip : defined(extra.skip, opts.skip),
-        name : defined(extra.message, opts.message, '(unnamed assert)'),
-        operator : defined(extra.operator, opts.operator)
-    };
-    if (has(opts, 'actual') || has(extra, 'actual')) {
-        res.actual = defined(extra.actual, opts.actual);
-    }
-    if (has(opts, 'expected') || has(extra, 'expected')) {
-        res.expected = defined(extra.expected, opts.expected);
-    }
-    this._ok = Boolean(this._ok && ok);
-    
-    if (!ok) {
-        res.error = defined(extra.error, opts.error, new Error(res.name));
-    }
-    
-    if (!ok) {
-        var e = new Error('exception');
-        var err = (e.stack || '').split('\n');
-        var dir = path.dirname(__dirname) + '/';
-        
-        for (var i = 0; i < err.length; i++) {
-            var m = /^[^\s]*\s*\bat\s+(.+)/.exec(err[i]);
-            if (!m) {
-                continue;
-            }
-            
-            var s = m[1].split(/\s+/);
-            var filem = /(\/[^:\s]+:(\d+)(?::(\d+))?)/.exec(s[1]);
-            if (!filem) {
-                filem = /(\/[^:\s]+:(\d+)(?::(\d+))?)/.exec(s[2]);
-                
-                if (!filem) {
-                    filem = /(\/[^:\s]+:(\d+)(?::(\d+))?)/.exec(s[3]);
-
-                    if (!filem) {
-                        continue;
-                    }
-                }
-            }
-            
-            if (filem[1].slice(0, dir.length) === dir) {
-                continue;
-            }
-            
-            res.functionName = s[0];
-            res.file = filem[1];
-            res.line = Number(filem[2]);
-            if (filem[3]) res.column = filem[3];
-            
-            res.at = m[1];
-            break;
-        }
-    }
-
-    self.emit('result', res);
-    
-    var pendingAsserts = self._pendingAsserts();
-    if (!pendingAsserts) {
-        if (extra.exiting) {
-            self._end();
-        } else {
-            nextTick(function () {
-                self._end();
-            });
-        }
-    }
-    
-    if (!self._planError && pendingAsserts < 0) {
-        self._planError = true;
-        self.fail('plan != count', {
-            expected : self._plan,
-            actual : self._plan - pendingAsserts
-        });
-    }
-};
-
-Test.prototype.fail = function (msg, extra) {
-    this._assert(false, {
-        message : msg,
-        operator : 'fail',
-        extra : extra
-    });
-};
-
-Test.prototype.pass = function (msg, extra) {
-    this._assert(true, {
-        message : msg,
-        operator : 'pass',
-        extra : extra
-    });
-};
-
-Test.prototype.skip = function (msg, extra) {
-    this._assert(true, {
-        message : msg,
-        operator : 'skip',
-        skip : true,
-        extra : extra
-    });
-};
-
-Test.prototype.ok
-= Test.prototype['true']
-= Test.prototype.assert
-= function (value, msg, extra) {
-    this._assert(value, {
-        message : msg,
-        operator : 'ok',
-        expected : true,
-        actual : value,
-        extra : extra
-    });
-};
-
-Test.prototype.notOk
-= Test.prototype['false']
-= Test.prototype.notok
-= function (value, msg, extra) {
-    this._assert(!value, {
-        message : msg,
-        operator : 'notOk',
-        expected : false,
-        actual : value,
-        extra : extra
-    });
-};
-
-Test.prototype.error
-= Test.prototype.ifError
-= Test.prototype.ifErr
-= Test.prototype.iferror
-= function (err, msg, extra) {
-    this._assert(!err, {
-        message : defined(msg, String(err)),
-        operator : 'error',
-        actual : err,
-        extra : extra
-    });
-};
-
-Test.prototype.equal
-= Test.prototype.equals
-= Test.prototype.isEqual
-= Test.prototype.is
-= Test.prototype.strictEqual
-= Test.prototype.strictEquals
-= function (a, b, msg, extra) {
-    this._assert(a === b, {
-        message : defined(msg, 'should be equal'),
-        operator : 'equal',
-        actual : a,
-        expected : b,
-        extra : extra
-    });
-};
-
-Test.prototype.notEqual
-= Test.prototype.notEquals
-= Test.prototype.notStrictEqual
-= Test.prototype.notStrictEquals
-= Test.prototype.isNotEqual
-= Test.prototype.isNot
-= Test.prototype.not
-= Test.prototype.doesNotEqual
-= Test.prototype.isInequal
-= function (a, b, msg, extra) {
-    this._assert(a !== b, {
-        message : defined(msg, 'should not be equal'),
-        operator : 'notEqual',
-        actual : a,
-        notExpected : b,
-        extra : extra
-    });
-};
-
-Test.prototype.deepEqual
-= Test.prototype.deepEquals
-= Test.prototype.isEquivalent
-= Test.prototype.same
-= function (a, b, msg, extra) {
-    this._assert(deepEqual(a, b, { strict: true }), {
-        message : defined(msg, 'should be equivalent'),
-        operator : 'deepEqual',
-        actual : a,
-        expected : b,
-        extra : extra
-    });
-};
-
-Test.prototype.deepLooseEqual
-= Test.prototype.looseEqual
-= Test.prototype.looseEquals
-= function (a, b, msg, extra) {
-    this._assert(deepEqual(a, b), {
-        message : defined(msg, 'should be equivalent'),
-        operator : 'deepLooseEqual',
-        actual : a,
-        expected : b,
-        extra : extra
-    });
-};
-
-Test.prototype.notDeepEqual
-= Test.prototype.notEquivalent
-= Test.prototype.notDeeply
-= Test.prototype.notSame
-= Test.prototype.isNotDeepEqual
-= Test.prototype.isNotDeeply
-= Test.prototype.isNotEquivalent
-= Test.prototype.isInequivalent
-= function (a, b, msg, extra) {
-    this._assert(!deepEqual(a, b, { strict: true }), {
-        message : defined(msg, 'should not be equivalent'),
-        operator : 'notDeepEqual',
-        actual : a,
-        notExpected : b,
-        extra : extra
-    });
-};
-
-Test.prototype.notDeepLooseEqual
-= Test.prototype.notLooseEqual
-= Test.prototype.notLooseEquals
-= function (a, b, msg, extra) {
-    this._assert(!deepEqual(a, b), {
-        message : defined(msg, 'should be equivalent'),
-        operator : 'notDeepLooseEqual',
-        actual : a,
-        expected : b,
-        extra : extra
-    });
-};
-
-Test.prototype['throws'] = function (fn, expected, msg, extra) {
-    if (typeof expected === 'string') {
-        msg = expected;
-        expected = undefined;
-    }
-
-    var caught = undefined;
-
-    try {
-        fn();
-    } catch (err) {
-        caught = { error : err };
-        var message = err.message;
-        delete err.message;
-        err.message = message;
-    }
-
-    var passed = caught;
-
-    if (expected instanceof RegExp) {
-        passed = expected.test(caught && caught.error);
-        expected = String(expected);
-    }
-
-    if (typeof expected === 'function') {
-        passed = caught.error instanceof expected;
-        caught.error = caught.error.constructor;
-    }
-
-    this._assert(passed, {
-        message : defined(msg, 'should throw'),
-        operator : 'throws',
-        actual : caught && caught.error,
-        expected : expected,
-        error: !passed && caught && caught.error,
-        extra : extra
-    });
-};
-
-Test.prototype.doesNotThrow = function (fn, expected, msg, extra) {
-    if (typeof expected === 'string') {
-        msg = expected;
-        expected = undefined;
-    }
-    var caught = undefined;
-    try {
-        fn();
-    }
-    catch (err) {
-        caught = { error : err };
-    }
-    this._assert(!caught, {
-        message : defined(msg, 'should not throw'),
-        operator : 'throws',
-        actual : caught && caught.error,
-        expected : expected,
-        error : caught && caught.error,
-        extra : extra
-    });
-};
-
-function has (obj, prop) {
-    return Object.prototype.hasOwnProperty.call(obj, prop);
-}
-
-Test.skip = function (name_, _opts, _cb) {
-    var args = getTestArgs.apply(null, arguments);
-    args.opts.skip = true;
-    return Test(args.name, args.opts, args.cb);
-};
-
-// vim: set softtabstop=4 shiftwidth=4:
-
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/deep-equal/.travis.yml b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/deep-equal/.travis.yml
deleted file mode 100644
index f1d0f13..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/deep-equal/.travis.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-language: node_js
-node_js:
-  - 0.4
-  - 0.6
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/deep-equal/LICENSE b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/deep-equal/LICENSE
deleted file mode 100644
index ee27ba4..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/deep-equal/LICENSE
+++ /dev/null
@@ -1,18 +0,0 @@
-This software is released under the MIT license:
-
-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/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/deep-equal/example/cmp.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/deep-equal/example/cmp.js
deleted file mode 100644
index 67014b8..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/deep-equal/example/cmp.js
+++ /dev/null
@@ -1,11 +0,0 @@
-var equal = require('../');
-console.dir([
-    equal(
-        { a : [ 2, 3 ], b : [ 4 ] },
-        { a : [ 2, 3 ], b : [ 4 ] }
-    ),
-    equal(
-        { x : 5, y : [6] },
-        { x : 5, y : 6 }
-    )
-]);
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/deep-equal/index.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/deep-equal/index.js
deleted file mode 100644
index dbc11f2..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/deep-equal/index.js
+++ /dev/null
@@ -1,94 +0,0 @@
-var pSlice = Array.prototype.slice;
-var objectKeys = require('./lib/keys.js');
-var isArguments = require('./lib/is_arguments.js');
-
-var deepEqual = module.exports = function (actual, expected, opts) {
-  if (!opts) opts = {};
-  // 7.1. All identical values are equivalent, as determined by ===.
-  if (actual === expected) {
-    return true;
-
-  } else if (actual instanceof Date && expected instanceof Date) {
-    return actual.getTime() === expected.getTime();
-
-  // 7.3. Other pairs that do not both pass typeof value == 'object',
-  // equivalence is determined by ==.
-  } else if (typeof actual != 'object' && typeof expected != 'object') {
-    return opts.strict ? actual === expected : actual == expected;
-
-  // 7.4. For all other Object pairs, including Array objects, equivalence is
-  // determined by having the same number of owned properties (as verified
-  // with Object.prototype.hasOwnProperty.call), the same set of keys
-  // (although not necessarily the same order), equivalent values for every
-  // corresponding key, and an identical 'prototype' property. Note: this
-  // accounts for both named and indexed properties on Arrays.
-  } else {
-    return objEquiv(actual, expected, opts);
-  }
-}
-
-function isUndefinedOrNull(value) {
-  return value === null || value === undefined;
-}
-
-function isBuffer (x) {
-  if (!x || typeof x !== 'object' || typeof x.length !== 'number') return false;
-  if (typeof x.copy !== 'function' || typeof x.slice !== 'function') {
-    return false;
-  }
-  if (x.length > 0 && typeof x[0] !== 'number') return false;
-  return true;
-}
-
-function objEquiv(a, b, opts) {
-  var i, key;
-  if (isUndefinedOrNull(a) || isUndefinedOrNull(b))
-    return false;
-  // an identical 'prototype' property.
-  if (a.prototype !== b.prototype) return false;
-  //~~~I've managed to break Object.keys through screwy arguments passing.
-  //   Converting to array solves the problem.
-  if (isArguments(a)) {
-    if (!isArguments(b)) {
-      return false;
-    }
-    a = pSlice.call(a);
-    b = pSlice.call(b);
-    return deepEqual(a, b, opts);
-  }
-  if (isBuffer(a)) {
-    if (!isBuffer(b)) {
-      return false;
-    }
-    if (a.length !== b.length) return false;
-    for (i = 0; i < a.length; i++) {
-      if (a[i] !== b[i]) return false;
-    }
-    return true;
-  }
-  try {
-    var ka = objectKeys(a),
-        kb = objectKeys(b);
-  } catch (e) {//happens when one is a string literal and the other isn't
-    return false;
-  }
-  // having the same number of owned properties (keys incorporates
-  // hasOwnProperty)
-  if (ka.length != kb.length)
-    return false;
-  //the same set of keys (although not necessarily the same order),
-  ka.sort();
-  kb.sort();
-  //~~~cheap key test
-  for (i = ka.length - 1; i >= 0; i--) {
-    if (ka[i] != kb[i])
-      return false;
-  }
-  //equivalent values for every corresponding key, and
-  //~~~possibly expensive deep test
-  for (i = ka.length - 1; i >= 0; i--) {
-    key = ka[i];
-    if (!deepEqual(a[key], b[key], opts)) return false;
-  }
-  return typeof a === typeof b;
-}
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/deep-equal/lib/is_arguments.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/deep-equal/lib/is_arguments.js
deleted file mode 100644
index 1ff150f..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/deep-equal/lib/is_arguments.js
+++ /dev/null
@@ -1,20 +0,0 @@
-var supportsArgumentsClass = (function(){
-  return Object.prototype.toString.call(arguments)
-})() == '[object Arguments]';
-
-exports = module.exports = supportsArgumentsClass ? supported : unsupported;
-
-exports.supported = supported;
-function supported(object) {
-  return Object.prototype.toString.call(object) == '[object Arguments]';
-};
-
-exports.unsupported = unsupported;
-function unsupported(object){
-  return object &&
-    typeof object == 'object' &&
-    typeof object.length == 'number' &&
-    Object.prototype.hasOwnProperty.call(object, 'callee') &&
-    !Object.prototype.propertyIsEnumerable.call(object, 'callee') ||
-    false;
-};
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/deep-equal/lib/keys.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/deep-equal/lib/keys.js
deleted file mode 100644
index 13af263..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/deep-equal/lib/keys.js
+++ /dev/null
@@ -1,9 +0,0 @@
-exports = module.exports = typeof Object.keys === 'function'
-  ? Object.keys : shim;
-
-exports.shim = shim;
-function shim (obj) {
-  var keys = [];
-  for (var key in obj) keys.push(key);
-  return keys;
-}
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/deep-equal/package.json b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/deep-equal/package.json
deleted file mode 100644
index 97e0572..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/deep-equal/package.json
+++ /dev/null
@@ -1,84 +0,0 @@
-{
-  "name": "deep-equal",
-  "version": "0.2.2",
-  "description": "node's assert.deepEqual algorithm",
-  "main": "index.js",
-  "directories": {
-    "lib": ".",
-    "example": "example",
-    "test": "test"
-  },
-  "scripts": {
-    "test": "tape test/*.js"
-  },
-  "devDependencies": {
-    "tape": "^3.5.0"
-  },
-  "repository": {
-    "type": "git",
-    "url": "http://github.com/substack/node-deep-equal.git"
-  },
-  "keywords": [
-    "equality",
-    "equal",
-    "compare"
-  ],
-  "author": {
-    "name": "James Halliday",
-    "email": "mail@substack.net",
-    "url": "http://substack.net"
-  },
-  "license": "MIT",
-  "testling": {
-    "files": "test/*.js",
-    "browsers": {
-      "ie": [
-        6,
-        7,
-        8,
-        9
-      ],
-      "ff": [
-        3.5,
-        10,
-        15
-      ],
-      "chrome": [
-        10,
-        22
-      ],
-      "safari": [
-        5.1
-      ],
-      "opera": [
-        12
-      ]
-    }
-  },
-  "gitHead": "05cd26a25f0d7babf0c2758827b4dafec9d0582e",
-  "bugs": {
-    "url": "https://github.com/substack/node-deep-equal/issues"
-  },
-  "homepage": "https://github.com/substack/node-deep-equal",
-  "_id": "deep-equal@0.2.2",
-  "_shasum": "84b745896f34c684e98f2ce0e42abaf43bba017d",
-  "_from": "deep-equal@~0.2.0",
-  "_npmVersion": "2.3.0",
-  "_nodeVersion": "0.10.35",
-  "_npmUser": {
-    "name": "substack",
-    "email": "mail@substack.net"
-  },
-  "maintainers": [
-    {
-      "name": "substack",
-      "email": "mail@substack.net"
-    }
-  ],
-  "dist": {
-    "shasum": "84b745896f34c684e98f2ce0e42abaf43bba017d",
-    "tarball": "http://registry.npmjs.org/deep-equal/-/deep-equal-0.2.2.tgz"
-  },
-  "_resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-0.2.2.tgz",
-  "readme": "ERROR: No README data found!"
-}
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/deep-equal/readme.markdown b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/deep-equal/readme.markdown
deleted file mode 100644
index f489c2a..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/deep-equal/readme.markdown
+++ /dev/null
@@ -1,61 +0,0 @@
-# deep-equal
-
-Node's `assert.deepEqual() algorithm` as a standalone module.
-
-This module is around [5 times faster](https://gist.github.com/2790507)
-than wrapping `assert.deepEqual()` in a `try/catch`.
-
-[![browser support](https://ci.testling.com/substack/node-deep-equal.png)](https://ci.testling.com/substack/node-deep-equal)
-
-[![build status](https://secure.travis-ci.org/substack/node-deep-equal.png)](https://travis-ci.org/substack/node-deep-equal)
-
-# example
-
-``` js
-var equal = require('deep-equal');
-console.dir([
-    equal(
-        { a : [ 2, 3 ], b : [ 4 ] },
-        { a : [ 2, 3 ], b : [ 4 ] }
-    ),
-    equal(
-        { x : 5, y : [6] },
-        { x : 5, y : 6 }
-    )
-]);
-```
-
-# methods
-
-``` js
-var deepEqual = require('deep-equal')
-```
-
-## deepEqual(a, b, opts)
-
-Compare objects `a` and `b`, returning whether they are equal according to a
-recursive equality algorithm.
-
-If `opts.strict` is `true`, use strict equality (`===`) to compare leaf nodes.
-The default is to use coercive equality (`==`) because that's how
-`assert.deepEqual()` works by default.
-
-# install
-
-With [npm](http://npmjs.org) do:
-
-```
-npm install deep-equal
-```
-
-# test
-
-With [npm](http://npmjs.org) do:
-
-```
-npm test
-```
-
-# license
-
-MIT. Derived largely from node's assert module.
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/deep-equal/test/cmp.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/deep-equal/test/cmp.js
deleted file mode 100644
index d141256..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/deep-equal/test/cmp.js
+++ /dev/null
@@ -1,89 +0,0 @@
-var test = require('tape');
-var equal = require('../');
-var isArguments = require('../lib/is_arguments.js');
-var objectKeys = require('../lib/keys.js');
-
-test('equal', function (t) {
-    t.ok(equal(
-        { a : [ 2, 3 ], b : [ 4 ] },
-        { a : [ 2, 3 ], b : [ 4 ] }
-    ));
-    t.end();
-});
-
-test('not equal', function (t) {
-    t.notOk(equal(
-        { x : 5, y : [6] },
-        { x : 5, y : 6 }
-    ));
-    t.end();
-});
-
-test('nested nulls', function (t) {
-    t.ok(equal([ null, null, null ], [ null, null, null ]));
-    t.end();
-});
-
-test('strict equal', function (t) {
-    t.notOk(equal(
-        [ { a: 3 }, { b: 4 } ],
-        [ { a: '3' }, { b: '4' } ],
-        { strict: true }
-    ));
-    t.end();
-});
-
-test('non-objects', function (t) {
-    t.ok(equal(3, 3));
-    t.ok(equal('beep', 'beep'));
-    t.ok(equal('3', 3));
-    t.notOk(equal('3', 3, { strict: true }));
-    t.notOk(equal('3', [3]));
-    t.end();
-});
-
-test('arguments class', function (t) {
-    t.ok(equal(
-        (function(){return arguments})(1,2,3),
-        (function(){return arguments})(1,2,3),
-        "compares arguments"
-    ));
-    t.notOk(equal(
-        (function(){return arguments})(1,2,3),
-        [1,2,3],
-        "differenciates array and arguments"
-    ));
-    t.end();
-});
-
-test('test the arguments shim', function (t) {
-    t.ok(isArguments.supported((function(){return arguments})()));
-    t.notOk(isArguments.supported([1,2,3]));
-    
-    t.ok(isArguments.unsupported((function(){return arguments})()));
-    t.notOk(isArguments.unsupported([1,2,3]));
-    
-    t.end();
-});
-
-test('test the keys shim', function (t) {
-    t.deepEqual(objectKeys.shim({ a: 1, b : 2 }), [ 'a', 'b' ]);
-    t.end();
-});
-
-test('dates', function (t) {
-    var d0 = new Date(1387585278000);
-    var d1 = new Date('Fri Dec 20 2013 16:21:18 GMT-0800 (PST)');
-    t.ok(equal(d0, d1));
-    t.end();
-});
-
-test('buffers', function (t) {
-    t.ok(equal(Buffer('xyz'), Buffer('xyz')));
-    t.end();
-});
-
-test('booleans and arrays', function (t) {
-    t.notOk(equal(true, []));
-    t.end();
-})
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/defined/.travis.yml b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/defined/.travis.yml
deleted file mode 100644
index 895dbd3..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/defined/.travis.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-language: node_js
-node_js:
-  - 0.6
-  - 0.8
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/defined/LICENSE b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/defined/LICENSE
deleted file mode 100644
index ee27ba4..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/defined/LICENSE
+++ /dev/null
@@ -1,18 +0,0 @@
-This software is released under the MIT license:
-
-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/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/defined/example/defined.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/defined/example/defined.js
deleted file mode 100644
index 7b5d982..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/defined/example/defined.js
+++ /dev/null
@@ -1,4 +0,0 @@
-var defined = require('../');
-var opts = { y : false, w : 4 };
-var x = defined(opts.x, opts.y, opts.w, 8);
-console.log(x);
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/defined/index.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/defined/index.js
deleted file mode 100644
index f8a2219..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/defined/index.js
+++ /dev/null
@@ -1,5 +0,0 @@
-module.exports = function () {
-    for (var i = 0; i < arguments.length; i++) {
-        if (arguments[i] !== undefined) return arguments[i];
-    }
-};
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/defined/package.json b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/defined/package.json
deleted file mode 100644
index 2452447..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/defined/package.json
+++ /dev/null
@@ -1,60 +0,0 @@
-{
-  "name": "defined",
-  "version": "0.0.0",
-  "description": "return the first argument that is `!== undefined`",
-  "main": "index.js",
-  "directories": {
-    "example": "example",
-    "test": "test"
-  },
-  "dependencies": {},
-  "devDependencies": {
-    "tap": "~0.3.0",
-    "tape": "~0.0.2"
-  },
-  "scripts": {
-    "test": "tap test/*.js"
-  },
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/substack/defined.git"
-  },
-  "homepage": "https://github.com/substack/defined",
-  "keywords": [
-    "undefined",
-    "short-circuit",
-    "||",
-    "or",
-    "//",
-    "defined-or"
-  ],
-  "author": {
-    "name": "James Halliday",
-    "email": "mail@substack.net",
-    "url": "http://substack.net"
-  },
-  "license": "MIT",
-  "_id": "defined@0.0.0",
-  "dist": {
-    "shasum": "f35eea7d705e933baf13b2f03b3f83d921403b3e",
-    "tarball": "http://registry.npmjs.org/defined/-/defined-0.0.0.tgz"
-  },
-  "_npmVersion": "1.1.59",
-  "_npmUser": {
-    "name": "substack",
-    "email": "mail@substack.net"
-  },
-  "maintainers": [
-    {
-      "name": "substack",
-      "email": "mail@substack.net"
-    }
-  ],
-  "_shasum": "f35eea7d705e933baf13b2f03b3f83d921403b3e",
-  "_from": "defined@~0.0.0",
-  "_resolved": "https://registry.npmjs.org/defined/-/defined-0.0.0.tgz",
-  "bugs": {
-    "url": "https://github.com/substack/defined/issues"
-  },
-  "readme": "ERROR: No README data found!"
-}
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/defined/readme.markdown b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/defined/readme.markdown
deleted file mode 100644
index 2280351..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/defined/readme.markdown
+++ /dev/null
@@ -1,51 +0,0 @@
-# defined
-
-return the first argument that is `!== undefined`
-
-[![build status](https://secure.travis-ci.org/substack/defined.png)](http://travis-ci.org/substack/defined)
-
-Most of the time when I chain together `||`s, I actually just want the first
-item that is not `undefined`, not the first non-falsy item.
-
-This module is like the defined-or (`//`) operator in perl 5.10+.
-
-# example
-
-``` js
-var defined = require('defined');
-var opts = { y : false, w : 4 };
-var x = defined(opts.x, opts.y, opts.w, 100);
-console.log(x);
-```
-
-```
-$ node example/defined.js
-false
-```
-
-The return value is `false` because `false` is the first item that is
-`!== undefined`.
-
-# methods
-
-``` js
-var defined = require('defined')
-```
-
-## var x = defined(a, b, c...)
-
-Return the first item in the argument list `a, b, c...` that is `!== undefined`.
-
-If all the items are `=== undefined`, return undefined.
-
-# install
-
-With [npm](https://npmjs.org) do:
-
-```
-npm install defined
-```
-
-# license
-
-MIT
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/defined/test/def.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/defined/test/def.js
deleted file mode 100644
index 48da517..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/defined/test/def.js
+++ /dev/null
@@ -1,22 +0,0 @@
-var defined = require('../');
-var test = require('tape');
-
-test('defined-or', function (t) {
-    var u = undefined;
-    
-    t.equal(defined(), u, 'empty arguments');
-    t.equal(defined(u), u, '1 undefined');
-    t.equal(defined(u, u), u, '2 undefined');
-    t.equal(defined(u, u, u, u), u, '4 undefineds');
-    
-    t.equal(defined(undefined, false, true), false, 'false[0]');
-    t.equal(defined(false, true), false, 'false[1]');
-    t.equal(defined(undefined, 0, true), 0, 'zero[0]');
-    t.equal(defined(0, true), 0, 'zero[1]');
-    
-    t.equal(defined(3, undefined, 4), 3, 'first arg');
-    t.equal(defined(undefined, 3, 4), 3, 'second arg');
-    t.equal(defined(undefined, undefined, 3), 3, 'third arg');
-    
-    t.end();
-});
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/.npmignore b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/.npmignore
deleted file mode 100644
index 2af4b71..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/.npmignore
+++ /dev/null
@@ -1,2 +0,0 @@
-.*.swp
-test/a/
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/.travis.yml b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/.travis.yml
deleted file mode 100644
index baa0031..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/.travis.yml
+++ /dev/null
@@ -1,3 +0,0 @@
-language: node_js
-node_js:
-  - 0.8
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/LICENSE b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/LICENSE
deleted file mode 100644
index 0c44ae7..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/LICENSE
+++ /dev/null
@@ -1,27 +0,0 @@
-Copyright (c) Isaac Z. Schlueter ("Author")
-All rights reserved.
-
-The BSD License
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-
-1. Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in the
-   documentation and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/README.md b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/README.md
deleted file mode 100644
index cc69164..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/README.md
+++ /dev/null
@@ -1,250 +0,0 @@
-# Glob
-
-Match files using the patterns the shell uses, like stars and stuff.
-
-This is a glob implementation in JavaScript.  It uses the `minimatch`
-library to do its matching.
-
-## Attention: node-glob users!
-
-The API has changed dramatically between 2.x and 3.x. This library is
-now 100% JavaScript, and the integer flags have been replaced with an
-options object.
-
-Also, there's an event emitter class, proper tests, and all the other
-things you've come to expect from node modules.
-
-And best of all, no compilation!
-
-## Usage
-
-```javascript
-var glob = require("glob")
-
-// options is optional
-glob("**/*.js", options, function (er, files) {
-  // files is an array of filenames.
-  // If the `nonull` option is set, and nothing
-  // was found, then files is ["**/*.js"]
-  // er is an error object or null.
-})
-```
-
-## Features
-
-Please see the [minimatch
-documentation](https://github.com/isaacs/minimatch) for more details.
-
-Supports these glob features:
-
-* Brace Expansion
-* Extended glob matching
-* "Globstar" `**` matching
-
-See:
-
-* `man sh`
-* `man bash`
-* `man 3 fnmatch`
-* `man 5 gitignore`
-* [minimatch documentation](https://github.com/isaacs/minimatch)
-
-## glob(pattern, [options], cb)
-
-* `pattern` {String} Pattern to be matched
-* `options` {Object}
-* `cb` {Function}
-  * `err` {Error | null}
-  * `matches` {Array<String>} filenames found matching the pattern
-
-Perform an asynchronous glob search.
-
-## glob.sync(pattern, [options])
-
-* `pattern` {String} Pattern to be matched
-* `options` {Object}
-* return: {Array<String>} filenames found matching the pattern
-
-Perform a synchronous glob search.
-
-## Class: glob.Glob
-
-Create a Glob object by instanting the `glob.Glob` class.
-
-```javascript
-var Glob = require("glob").Glob
-var mg = new Glob(pattern, options, cb)
-```
-
-It's an EventEmitter, and starts walking the filesystem to find matches
-immediately.
-
-### new glob.Glob(pattern, [options], [cb])
-
-* `pattern` {String} pattern to search for
-* `options` {Object}
-* `cb` {Function} Called when an error occurs, or matches are found
-  * `err` {Error | null}
-  * `matches` {Array<String>} filenames found matching the pattern
-
-Note that if the `sync` flag is set in the options, then matches will
-be immediately available on the `g.found` member.
-
-### Properties
-
-* `minimatch` The minimatch object that the glob uses.
-* `options` The options object passed in.
-* `error` The error encountered.  When an error is encountered, the
-  glob object is in an undefined state, and should be discarded.
-* `aborted` Boolean which is set to true when calling `abort()`.  There
-  is no way at this time to continue a glob search after aborting, but
-  you can re-use the statCache to avoid having to duplicate syscalls.
-* `statCache` Collection of all the stat results the glob search
-  performed.
-* `cache` Convenience object.  Each field has the following possible
-  values:
-  * `false` - Path does not exist
-  * `true` - Path exists
-  * `1` - Path exists, and is not a directory
-  * `2` - Path exists, and is a directory
-  * `[file, entries, ...]` - Path exists, is a directory, and the
-    array value is the results of `fs.readdir`
-
-### Events
-
-* `end` When the matching is finished, this is emitted with all the
-  matches found.  If the `nonull` option is set, and no match was found,
-  then the `matches` list contains the original pattern.  The matches
-  are sorted, unless the `nosort` flag is set.
-* `match` Every time a match is found, this is emitted with the matched.
-* `error` Emitted when an unexpected error is encountered, or whenever
-  any fs error occurs if `options.strict` is set.
-* `abort` When `abort()` is called, this event is raised.
-
-### Methods
-
-* `abort` Stop the search.
-
-### Options
-
-All the options that can be passed to Minimatch can also be passed to
-Glob to change pattern matching behavior.  Also, some have been added,
-or have glob-specific ramifications.
-
-All options are false by default, unless otherwise noted.
-
-All options are added to the glob object, as well.
-
-* `cwd` The current working directory in which to search.  Defaults
-  to `process.cwd()`.
-* `root` The place where patterns starting with `/` will be mounted
-  onto.  Defaults to `path.resolve(options.cwd, "/")` (`/` on Unix
-  systems, and `C:\` or some such on Windows.)
-* `dot` Include `.dot` files in normal matches and `globstar` matches.
-  Note that an explicit dot in a portion of the pattern will always
-  match dot files.
-* `nomount` By default, a pattern starting with a forward-slash will be
-  "mounted" onto the root setting, so that a valid filesystem path is
-  returned.  Set this flag to disable that behavior.
-* `mark` Add a `/` character to directory matches.  Note that this
-  requires additional stat calls.
-* `nosort` Don't sort the results.
-* `stat` Set to true to stat *all* results.  This reduces performance
-  somewhat, and is completely unnecessary, unless `readdir` is presumed
-  to be an untrustworthy indicator of file existence.  It will cause
-  ELOOP to be triggered one level sooner in the case of cyclical
-  symbolic links.
-* `silent` When an unusual error is encountered
-  when attempting to read a directory, a warning will be printed to
-  stderr.  Set the `silent` option to true to suppress these warnings.
-* `strict` When an unusual error is encountered
-  when attempting to read a directory, the process will just continue on
-  in search of other matches.  Set the `strict` option to raise an error
-  in these cases.
-* `cache` See `cache` property above.  Pass in a previously generated
-  cache object to save some fs calls.
-* `statCache` A cache of results of filesystem information, to prevent
-  unnecessary stat calls.  While it should not normally be necessary to
-  set this, you may pass the statCache from one glob() call to the
-  options object of another, if you know that the filesystem will not
-  change between calls.  (See "Race Conditions" below.)
-* `sync` Perform a synchronous glob search.
-* `nounique` In some cases, brace-expanded patterns can result in the
-  same file showing up multiple times in the result set.  By default,
-  this implementation prevents duplicates in the result set.
-  Set this flag to disable that behavior.
-* `nonull` Set to never return an empty set, instead returning a set
-  containing the pattern itself.  This is the default in glob(3).
-* `nocase` Perform a case-insensitive match.  Note that case-insensitive
-  filesystems will sometimes result in glob returning results that are
-  case-insensitively matched anyway, since readdir and stat will not
-  raise an error.
-* `debug` Set to enable debug logging in minimatch and glob.
-* `globDebug` Set to enable debug logging in glob, but not minimatch.
-
-## Comparisons to other fnmatch/glob implementations
-
-While strict compliance with the existing standards is a worthwhile
-goal, some discrepancies exist between node-glob and other
-implementations, and are intentional.
-
-If the pattern starts with a `!` character, then it is negated.  Set the
-`nonegate` flag to suppress this behavior, and treat leading `!`
-characters normally.  This is perhaps relevant if you wish to start the
-pattern with a negative extglob pattern like `!(a|B)`.  Multiple `!`
-characters at the start of a pattern will negate the pattern multiple
-times.
-
-If a pattern starts with `#`, then it is treated as a comment, and
-will not match anything.  Use `\#` to match a literal `#` at the
-start of a line, or set the `nocomment` flag to suppress this behavior.
-
-The double-star character `**` is supported by default, unless the
-`noglobstar` flag is set.  This is supported in the manner of bsdglob
-and bash 4.1, where `**` only has special significance if it is the only
-thing in a path part.  That is, `a/**/b` will match `a/x/y/b`, but
-`a/**b` will not.
-
-If an escaped pattern has no matches, and the `nonull` flag is set,
-then glob returns the pattern as-provided, rather than
-interpreting the character escapes.  For example,
-`glob.match([], "\\*a\\?")` will return `"\\*a\\?"` rather than
-`"*a?"`.  This is akin to setting the `nullglob` option in bash, except
-that it does not resolve escaped pattern characters.
-
-If brace expansion is not disabled, then it is performed before any
-other interpretation of the glob pattern.  Thus, a pattern like
-`+(a|{b),c)}`, which would not be valid in bash or zsh, is expanded
-**first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are
-checked for validity.  Since those two are valid, matching proceeds.
-
-## Windows
-
-**Please only use forward-slashes in glob expressions.**
-
-Though windows uses either `/` or `\` as its path separator, only `/`
-characters are used by this glob implementation.  You must use
-forward-slashes **only** in glob expressions.  Back-slashes will always
-be interpreted as escape characters, not path separators.
-
-Results from absolute patterns such as `/foo/*` are mounted onto the
-root setting using `path.join`.  On windows, this will by default result
-in `/foo/*` matching `C:\foo\bar.txt`.
-
-## Race Conditions
-
-Glob searching, by its very nature, is susceptible to race conditions,
-since it relies on directory walking and such.
-
-As a result, it is possible that a file that exists when glob looks for
-it may have been deleted or modified by the time it returns the result.
-
-As part of its internal implementation, this program caches all stat
-and readdir calls that it makes, in order to cut down on system
-overhead.  However, this also makes it even more susceptible to races,
-especially if the cache or statCache objects are reused between glob
-calls.
-
-Users are thus advised not to use a glob result as a guarantee of
-filesystem state in the face of rapid changes.  For the vast majority
-of operations, this is never a problem.
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/examples/g.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/examples/g.js
deleted file mode 100644
index be122df..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/examples/g.js
+++ /dev/null
@@ -1,9 +0,0 @@
-var Glob = require("../").Glob
-
-var pattern = "test/a/**/[cg]/../[cg]"
-console.log(pattern)
-
-var mg = new Glob(pattern, {mark: true, sync:true}, function (er, matches) {
-  console.log("matches", matches)
-})
-console.log("after")
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/examples/usr-local.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/examples/usr-local.js
deleted file mode 100644
index 327a425..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/examples/usr-local.js
+++ /dev/null
@@ -1,9 +0,0 @@
-var Glob = require("../").Glob
-
-var pattern = "{./*/*,/*,/usr/local/*}"
-console.log(pattern)
-
-var mg = new Glob(pattern, {mark: true}, function (er, matches) {
-  console.log("matches", matches)
-})
-console.log("after")
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/glob.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/glob.js
deleted file mode 100644
index f646c44..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/glob.js
+++ /dev/null
@@ -1,728 +0,0 @@
-// Approach:
-//
-// 1. Get the minimatch set
-// 2. For each pattern in the set, PROCESS(pattern)
-// 3. Store matches per-set, then uniq them
-//
-// PROCESS(pattern)
-// Get the first [n] items from pattern that are all strings
-// Join these together.  This is PREFIX.
-//   If there is no more remaining, then stat(PREFIX) and
-//   add to matches if it succeeds.  END.
-// readdir(PREFIX) as ENTRIES
-//   If fails, END
-//   If pattern[n] is GLOBSTAR
-//     // handle the case where the globstar match is empty
-//     // by pruning it out, and testing the resulting pattern
-//     PROCESS(pattern[0..n] + pattern[n+1 .. $])
-//     // handle other cases.
-//     for ENTRY in ENTRIES (not dotfiles)
-//       // attach globstar + tail onto the entry
-//       PROCESS(pattern[0..n] + ENTRY + pattern[n .. $])
-//
-//   else // not globstar
-//     for ENTRY in ENTRIES (not dotfiles, unless pattern[n] is dot)
-//       Test ENTRY against pattern[n]
-//       If fails, continue
-//       If passes, PROCESS(pattern[0..n] + item + pattern[n+1 .. $])
-//
-// Caveat:
-//   Cache all stats and readdirs results to minimize syscall.  Since all
-//   we ever care about is existence and directory-ness, we can just keep
-//   `true` for files, and [children,...] for directories, or `false` for
-//   things that don't exist.
-
-
-
-module.exports = glob
-
-var fs = require("fs")
-, minimatch = require("minimatch")
-, Minimatch = minimatch.Minimatch
-, inherits = require("inherits")
-, EE = require("events").EventEmitter
-, path = require("path")
-, isDir = {}
-, assert = require("assert").ok
-
-function glob (pattern, options, cb) {
-  if (typeof options === "function") cb = options, options = {}
-  if (!options) options = {}
-
-  if (typeof options === "number") {
-    deprecated()
-    return
-  }
-
-  var g = new Glob(pattern, options, cb)
-  return g.sync ? g.found : g
-}
-
-glob.fnmatch = deprecated
-
-function deprecated () {
-  throw new Error("glob's interface has changed. Please see the docs.")
-}
-
-glob.sync = globSync
-function globSync (pattern, options) {
-  if (typeof options === "number") {
-    deprecated()
-    return
-  }
-
-  options = options || {}
-  options.sync = true
-  return glob(pattern, options)
-}
-
-this._processingEmitQueue = false
-
-glob.Glob = Glob
-inherits(Glob, EE)
-function Glob (pattern, options, cb) {
-  if (!(this instanceof Glob)) {
-    return new Glob(pattern, options, cb)
-  }
-
-  if (typeof options === "function") {
-    cb = options
-    options = null
-  }
-
-  if (typeof cb === "function") {
-    this.on("error", cb)
-    this.on("end", function (matches) {
-      cb(null, matches)
-    })
-  }
-
-  options = options || {}
-
-  this._endEmitted = false
-  this.EOF = {}
-  this._emitQueue = []
-
-  this.paused = false
-  this._processingEmitQueue = false
-
-  this.maxDepth = options.maxDepth || 1000
-  this.maxLength = options.maxLength || Infinity
-  this.cache = options.cache || {}
-  this.statCache = options.statCache || {}
-
-  this.changedCwd = false
-  var cwd = process.cwd()
-  if (!options.hasOwnProperty("cwd")) this.cwd = cwd
-  else {
-    this.cwd = options.cwd
-    this.changedCwd = path.resolve(options.cwd) !== cwd
-  }
-
-  this.root = options.root || path.resolve(this.cwd, "/")
-  this.root = path.resolve(this.root)
-  if (process.platform === "win32")
-    this.root = this.root.replace(/\\/g, "/")
-
-  this.nomount = !!options.nomount
-
-  if (!pattern) {
-    throw new Error("must provide pattern")
-  }
-
-  // base-matching: just use globstar for that.
-  if (options.matchBase && -1 === pattern.indexOf("/")) {
-    if (options.noglobstar) {
-      throw new Error("base matching requires globstar")
-    }
-    pattern = "**/" + pattern
-  }
-
-  this.strict = options.strict !== false
-  this.dot = !!options.dot
-  this.mark = !!options.mark
-  this.sync = !!options.sync
-  this.nounique = !!options.nounique
-  this.nonull = !!options.nonull
-  this.nosort = !!options.nosort
-  this.nocase = !!options.nocase
-  this.stat = !!options.stat
-
-  this.debug = !!options.debug || !!options.globDebug
-  if (this.debug)
-    this.log = console.error
-
-  this.silent = !!options.silent
-
-  var mm = this.minimatch = new Minimatch(pattern, options)
-  this.options = mm.options
-  pattern = this.pattern = mm.pattern
-
-  this.error = null
-  this.aborted = false
-
-  // list of all the patterns that ** has resolved do, so
-  // we can avoid visiting multiple times.
-  this._globstars = {}
-
-  EE.call(this)
-
-  // process each pattern in the minimatch set
-  var n = this.minimatch.set.length
-
-  // The matches are stored as {<filename>: true,...} so that
-  // duplicates are automagically pruned.
-  // Later, we do an Object.keys() on these.
-  // Keep them as a list so we can fill in when nonull is set.
-  this.matches = new Array(n)
-
-  this.minimatch.set.forEach(iterator.bind(this))
-  function iterator (pattern, i, set) {
-    this._process(pattern, 0, i, function (er) {
-      if (er) this.emit("error", er)
-      if (-- n <= 0) this._finish()
-    })
-  }
-}
-
-Glob.prototype.log = function () {}
-
-Glob.prototype._finish = function () {
-  assert(this instanceof Glob)
-
-  var nou = this.nounique
-  , all = nou ? [] : {}
-
-  for (var i = 0, l = this.matches.length; i < l; i ++) {
-    var matches = this.matches[i]
-    this.log("matches[%d] =", i, matches)
-    // do like the shell, and spit out the literal glob
-    if (!matches) {
-      if (this.nonull) {
-        var literal = this.minimatch.globSet[i]
-        if (nou) all.push(literal)
-        else all[literal] = true
-      }
-    } else {
-      // had matches
-      var m = Object.keys(matches)
-      if (nou) all.push.apply(all, m)
-      else m.forEach(function (m) {
-        all[m] = true
-      })
-    }
-  }
-
-  if (!nou) all = Object.keys(all)
-
-  if (!this.nosort) {
-    all = all.sort(this.nocase ? alphasorti : alphasort)
-  }
-
-  if (this.mark) {
-    // at *some* point we statted all of these
-    all = all.map(this._mark, this)
-  }
-
-  this.log("emitting end", all)
-
-  this.EOF = this.found = all
-  this.emitMatch(this.EOF)
-}
-
-function alphasorti (a, b) {
-  a = a.toLowerCase()
-  b = b.toLowerCase()
-  return alphasort(a, b)
-}
-
-function alphasort (a, b) {
-  return a > b ? 1 : a < b ? -1 : 0
-}
-
-Glob.prototype._mark = function (p) {
-  var c = this.cache[p]
-  var m = p
-  if (c) {
-    var isDir = c === 2 || Array.isArray(c)
-    var slash = p.slice(-1) === '/'
-
-    if (isDir && !slash)
-      m += '/'
-    else if (!isDir && slash)
-      m = m.slice(0, -1)
-
-    if (m !== p) {
-      this.statCache[m] = this.statCache[p]
-      this.cache[m] = this.cache[p]
-    }
-  }
-
-  return m
-}
-
-Glob.prototype.abort = function () {
-  this.aborted = true
-  this.emit("abort")
-}
-
-Glob.prototype.pause = function () {
-  if (this.paused) return
-  if (this.sync)
-    this.emit("error", new Error("Can't pause/resume sync glob"))
-  this.paused = true
-  this.emit("pause")
-}
-
-Glob.prototype.resume = function () {
-  if (!this.paused) return
-  if (this.sync)
-    this.emit("error", new Error("Can't pause/resume sync glob"))
-  this.paused = false
-  this.emit("resume")
-  this._processEmitQueue()
-  //process.nextTick(this.emit.bind(this, "resume"))
-}
-
-Glob.prototype.emitMatch = function (m) {
-  this.log('emitMatch', m)
-  this._emitQueue.push(m)
-  this._processEmitQueue()
-}
-
-Glob.prototype._processEmitQueue = function (m) {
-  this.log("pEQ paused=%j processing=%j m=%j", this.paused,
-           this._processingEmitQueue, m)
-  var done = false
-  while (!this._processingEmitQueue &&
-         !this.paused) {
-    this._processingEmitQueue = true
-    var m = this._emitQueue.shift()
-    this.log(">processEmitQueue", m === this.EOF ? ":EOF:" : m)
-    if (!m) {
-      this.log(">processEmitQueue, falsey m")
-      this._processingEmitQueue = false
-      break
-    }
-
-    if (m === this.EOF || !(this.mark && !this.stat)) {
-      this.log("peq: unmarked, or eof")
-      next.call(this, 0, false)
-    } else if (this.statCache[m]) {
-      var sc = this.statCache[m]
-      var exists
-      if (sc)
-        exists = sc.isDirectory() ? 2 : 1
-      this.log("peq: stat cached")
-      next.call(this, exists, exists === 2)
-    } else {
-      this.log("peq: _stat, then next")
-      this._stat(m, next)
-    }
-
-    function next(exists, isDir) {
-      this.log("next", m, exists, isDir)
-      var ev = m === this.EOF ? "end" : "match"
-
-      // "end" can only happen once.
-      assert(!this._endEmitted)
-      if (ev === "end")
-        this._endEmitted = true
-
-      if (exists) {
-        // Doesn't mean it necessarily doesn't exist, it's possible
-        // we just didn't check because we don't care that much, or
-        // this is EOF anyway.
-        if (isDir && !m.match(/\/$/)) {
-          m = m + "/"
-        } else if (!isDir && m.match(/\/$/)) {
-          m = m.replace(/\/+$/, "")
-        }
-      }
-      this.log("emit", ev, m)
-      this.emit(ev, m)
-      this._processingEmitQueue = false
-      if (done && m !== this.EOF && !this.paused)
-        this._processEmitQueue()
-    }
-  }
-  done = true
-}
-
-Glob.prototype._process = function (pattern, depth, index, cb_) {
-  assert(this instanceof Glob)
-
-  var cb = function cb (er, res) {
-    assert(this instanceof Glob)
-    if (this.paused) {
-      if (!this._processQueue) {
-        this._processQueue = []
-        this.once("resume", function () {
-          var q = this._processQueue
-          this._processQueue = null
-          q.forEach(function (cb) { cb() })
-        })
-      }
-      this._processQueue.push(cb_.bind(this, er, res))
-    } else {
-      cb_.call(this, er, res)
-    }
-  }.bind(this)
-
-  if (this.aborted) return cb()
-
-  if (depth > this.maxDepth) return cb()
-
-  // Get the first [n] parts of pattern that are all strings.
-  var n = 0
-  while (typeof pattern[n] === "string") {
-    n ++
-  }
-  // now n is the index of the first one that is *not* a string.
-
-  // see if there's anything else
-  var prefix
-  switch (n) {
-    // if not, then this is rather simple
-    case pattern.length:
-      prefix = pattern.join("/")
-      this._stat(prefix, function (exists, isDir) {
-        // either it's there, or it isn't.
-        // nothing more to do, either way.
-        if (exists) {
-          if (prefix && isAbsolute(prefix) && !this.nomount) {
-            if (prefix.charAt(0) === "/") {
-              prefix = path.join(this.root, prefix)
-            } else {
-              prefix = path.resolve(this.root, prefix)
-            }
-          }
-
-          if (process.platform === "win32")
-            prefix = prefix.replace(/\\/g, "/")
-
-          this.matches[index] = this.matches[index] || {}
-          this.matches[index][prefix] = true
-          this.emitMatch(prefix)
-        }
-        return cb()
-      })
-      return
-
-    case 0:
-      // pattern *starts* with some non-trivial item.
-      // going to readdir(cwd), but not include the prefix in matches.
-      prefix = null
-      break
-
-    default:
-      // pattern has some string bits in the front.
-      // whatever it starts with, whether that's "absolute" like /foo/bar,
-      // or "relative" like "../baz"
-      prefix = pattern.slice(0, n)
-      prefix = prefix.join("/")
-      break
-  }
-
-  // get the list of entries.
-  var read
-  if (prefix === null) read = "."
-  else if (isAbsolute(prefix) || isAbsolute(pattern.join("/"))) {
-    if (!prefix || !isAbsolute(prefix)) {
-      prefix = path.join("/", prefix)
-    }
-    read = prefix = path.resolve(prefix)
-
-    // if (process.platform === "win32")
-    //   read = prefix = prefix.replace(/^[a-zA-Z]:|\\/g, "/")
-
-    this.log('absolute: ', prefix, this.root, pattern, read)
-  } else {
-    read = prefix
-  }
-
-  this.log('readdir(%j)', read, this.cwd, this.root)
-
-  return this._readdir(read, function (er, entries) {
-    if (er) {
-      // not a directory!
-      // this means that, whatever else comes after this, it can never match
-      return cb()
-    }
-
-    // globstar is special
-    if (pattern[n] === minimatch.GLOBSTAR) {
-      // test without the globstar, and with every child both below
-      // and replacing the globstar.
-      var s = [ pattern.slice(0, n).concat(pattern.slice(n + 1)) ]
-      entries.forEach(function (e) {
-        if (e.charAt(0) === "." && !this.dot) return
-        // instead of the globstar
-        s.push(pattern.slice(0, n).concat(e).concat(pattern.slice(n + 1)))
-        // below the globstar
-        s.push(pattern.slice(0, n).concat(e).concat(pattern.slice(n)))
-      }, this)
-
-      s = s.filter(function (pattern) {
-        var key = gsKey(pattern)
-        var seen = !this._globstars[key]
-        this._globstars[key] = true
-        return seen
-      }, this)
-
-      if (!s.length)
-        return cb()
-
-      // now asyncForEach over this
-      var l = s.length
-      , errState = null
-      s.forEach(function (gsPattern) {
-        this._process(gsPattern, depth + 1, index, function (er) {
-          if (errState) return
-          if (er) return cb(errState = er)
-          if (--l <= 0) return cb()
-        })
-      }, this)
-
-      return
-    }
-
-    // not a globstar
-    // It will only match dot entries if it starts with a dot, or if
-    // dot is set.  Stuff like @(.foo|.bar) isn't allowed.
-    var pn = pattern[n]
-    var rawGlob = pattern[n]._glob
-    , dotOk = this.dot || rawGlob.charAt(0) === "."
-
-    entries = entries.filter(function (e) {
-      return (e.charAt(0) !== "." || dotOk) &&
-             e.match(pattern[n])
-    })
-
-    // If n === pattern.length - 1, then there's no need for the extra stat
-    // *unless* the user has specified "mark" or "stat" explicitly.
-    // We know that they exist, since the readdir returned them.
-    if (n === pattern.length - 1 &&
-        !this.mark &&
-        !this.stat) {
-      entries.forEach(function (e) {
-        if (prefix) {
-          if (prefix !== "/") e = prefix + "/" + e
-          else e = prefix + e
-        }
-        if (e.charAt(0) === "/" && !this.nomount) {
-          e = path.join(this.root, e)
-        }
-
-        if (process.platform === "win32")
-          e = e.replace(/\\/g, "/")
-
-        this.matches[index] = this.matches[index] || {}
-        this.matches[index][e] = true
-        this.emitMatch(e)
-      }, this)
-      return cb.call(this)
-    }
-
-
-    // now test all the remaining entries as stand-ins for that part
-    // of the pattern.
-    var l = entries.length
-    , errState = null
-    if (l === 0) return cb() // no matches possible
-    entries.forEach(function (e) {
-      var p = pattern.slice(0, n).concat(e).concat(pattern.slice(n + 1))
-      this._process(p, depth + 1, index, function (er) {
-        if (errState) return
-        if (er) return cb(errState = er)
-        if (--l === 0) return cb.call(this)
-      })
-    }, this)
-  })
-
-}
-
-function gsKey (pattern) {
-  return '**' + pattern.map(function (p) {
-    return (p === minimatch.GLOBSTAR) ? '**' : (''+p)
-  }).join('/')
-}
-
-Glob.prototype._stat = function (f, cb) {
-  assert(this instanceof Glob)
-  var abs = f
-  if (f.charAt(0) === "/") {
-    abs = path.join(this.root, f)
-  } else if (this.changedCwd) {
-    abs = path.resolve(this.cwd, f)
-  }
-
-  if (f.length > this.maxLength) {
-    var er = new Error("Path name too long")
-    er.code = "ENAMETOOLONG"
-    er.path = f
-    return this._afterStat(f, abs, cb, er)
-  }
-
-  this.log('stat', [this.cwd, f, '=', abs])
-
-  if (!this.stat && this.cache.hasOwnProperty(f)) {
-    var exists = this.cache[f]
-    , isDir = exists && (Array.isArray(exists) || exists === 2)
-    if (this.sync) return cb.call(this, !!exists, isDir)
-    return process.nextTick(cb.bind(this, !!exists, isDir))
-  }
-
-  var stat = this.statCache[abs]
-  if (this.sync || stat) {
-    var er
-    try {
-      stat = fs.statSync(abs)
-    } catch (e) {
-      er = e
-    }
-    this._afterStat(f, abs, cb, er, stat)
-  } else {
-    fs.stat(abs, this._afterStat.bind(this, f, abs, cb))
-  }
-}
-
-Glob.prototype._afterStat = function (f, abs, cb, er, stat) {
-  var exists
-  assert(this instanceof Glob)
-
-  if (abs.slice(-1) === "/" && stat && !stat.isDirectory()) {
-    this.log("should be ENOTDIR, fake it")
-
-    er = new Error("ENOTDIR, not a directory '" + abs + "'")
-    er.path = abs
-    er.code = "ENOTDIR"
-    stat = null
-  }
-
-  var emit = !this.statCache[abs]
-  this.statCache[abs] = stat
-
-  if (er || !stat) {
-    exists = false
-  } else {
-    exists = stat.isDirectory() ? 2 : 1
-    if (emit)
-      this.emit('stat', f, stat)
-  }
-  this.cache[f] = this.cache[f] || exists
-  cb.call(this, !!exists, exists === 2)
-}
-
-Glob.prototype._readdir = function (f, cb) {
-  assert(this instanceof Glob)
-  var abs = f
-  if (f.charAt(0) === "/") {
-    abs = path.join(this.root, f)
-  } else if (isAbsolute(f)) {
-    abs = f
-  } else if (this.changedCwd) {
-    abs = path.resolve(this.cwd, f)
-  }
-
-  if (f.length > this.maxLength) {
-    var er = new Error("Path name too long")
-    er.code = "ENAMETOOLONG"
-    er.path = f
-    return this._afterReaddir(f, abs, cb, er)
-  }
-
-  this.log('readdir', [this.cwd, f, abs])
-  if (this.cache.hasOwnProperty(f)) {
-    var c = this.cache[f]
-    if (Array.isArray(c)) {
-      if (this.sync) return cb.call(this, null, c)
-      return process.nextTick(cb.bind(this, null, c))
-    }
-
-    if (!c || c === 1) {
-      // either ENOENT or ENOTDIR
-      var code = c ? "ENOTDIR" : "ENOENT"
-      , er = new Error((c ? "Not a directory" : "Not found") + ": " + f)
-      er.path = f
-      er.code = code
-      this.log(f, er)
-      if (this.sync) return cb.call(this, er)
-      return process.nextTick(cb.bind(this, er))
-    }
-
-    // at this point, c === 2, meaning it's a dir, but we haven't
-    // had to read it yet, or c === true, meaning it's *something*
-    // but we don't have any idea what.  Need to read it, either way.
-  }
-
-  if (this.sync) {
-    var er, entries
-    try {
-      entries = fs.readdirSync(abs)
-    } catch (e) {
-      er = e
-    }
-    return this._afterReaddir(f, abs, cb, er, entries)
-  }
-
-  fs.readdir(abs, this._afterReaddir.bind(this, f, abs, cb))
-}
-
-Glob.prototype._afterReaddir = function (f, abs, cb, er, entries) {
-  assert(this instanceof Glob)
-  if (entries && !er) {
-    this.cache[f] = entries
-    // if we haven't asked to stat everything for suresies, then just
-    // assume that everything in there exists, so we can avoid
-    // having to stat it a second time.  This also gets us one step
-    // further into ELOOP territory.
-    if (!this.mark && !this.stat) {
-      entries.forEach(function (e) {
-        if (f === "/") e = f + e
-        else e = f + "/" + e
-        this.cache[e] = true
-      }, this)
-    }
-
-    return cb.call(this, er, entries)
-  }
-
-  // now handle errors, and cache the information
-  if (er) switch (er.code) {
-    case "ENOTDIR": // totally normal. means it *does* exist.
-      this.cache[f] = 1
-      return cb.call(this, er)
-    case "ENOENT": // not terribly unusual
-    case "ELOOP":
-    case "ENAMETOOLONG":
-    case "UNKNOWN":
-      this.cache[f] = false
-      return cb.call(this, er)
-    default: // some unusual error.  Treat as failure.
-      this.cache[f] = false
-      if (this.strict) this.emit("error", er)
-      if (!this.silent) console.error("glob error", er)
-      return cb.call(this, er)
-  }
-}
-
-var isAbsolute = process.platform === "win32" ? absWin : absUnix
-
-function absWin (p) {
-  if (absUnix(p)) return true
-  // pull off the device/UNC bit from a windows path.
-  // from node's lib/path.js
-  var splitDeviceRe =
-      /^([a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/]+[^\\\/]+)?([\\\/])?([\s\S]*?)$/
-    , result = splitDeviceRe.exec(p)
-    , device = result[1] || ''
-    , isUnc = device && device.charAt(1) !== ':'
-    , isAbsolute = !!result[2] || isUnc // UNC paths are always absolute
-
-  return isAbsolute
-}
-
-function absUnix (p) {
-  return p.charAt(0) === "/" || p === ""
-}
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/node_modules/minimatch/.npmignore b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/node_modules/minimatch/.npmignore
deleted file mode 100644
index 3c3629e..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/node_modules/minimatch/.npmignore
+++ /dev/null
@@ -1 +0,0 @@
-node_modules
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/node_modules/minimatch/LICENSE b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/node_modules/minimatch/LICENSE
deleted file mode 100644
index 05a4010..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/node_modules/minimatch/LICENSE
+++ /dev/null
@@ -1,23 +0,0 @@
-Copyright 2009, 2010, 2011 Isaac Z. Schlueter.
-All rights reserved.
-
-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/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/node_modules/minimatch/README.md b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/node_modules/minimatch/README.md
deleted file mode 100644
index 5b3967e..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/node_modules/minimatch/README.md
+++ /dev/null
@@ -1,218 +0,0 @@
-# minimatch
-
-A minimal matching utility.
-
-[![Build Status](https://secure.travis-ci.org/isaacs/minimatch.png)](http://travis-ci.org/isaacs/minimatch)
-
-
-This is the matching library used internally by npm.
-
-Eventually, it will replace the C binding in node-glob.
-
-It works by converting glob expressions into JavaScript `RegExp`
-objects.
-
-## Usage
-
-```javascript
-var minimatch = require("minimatch")
-
-minimatch("bar.foo", "*.foo") // true!
-minimatch("bar.foo", "*.bar") // false!
-minimatch("bar.foo", "*.+(bar|foo)", { debug: true }) // true, and noisy!
-```
-
-## Features
-
-Supports these glob features:
-
-* Brace Expansion
-* Extended glob matching
-* "Globstar" `**` matching
-
-See:
-
-* `man sh`
-* `man bash`
-* `man 3 fnmatch`
-* `man 5 gitignore`
-
-## Minimatch Class
-
-Create a minimatch object by instanting the `minimatch.Minimatch` class.
-
-```javascript
-var Minimatch = require("minimatch").Minimatch
-var mm = new Minimatch(pattern, options)
-```
-
-### Properties
-
-* `pattern` The original pattern the minimatch object represents.
-* `options` The options supplied to the constructor.
-* `set` A 2-dimensional array of regexp or string expressions.
-  Each row in the
-  array corresponds to a brace-expanded pattern.  Each item in the row
-  corresponds to a single path-part.  For example, the pattern
-  `{a,b/c}/d` would expand to a set of patterns like:
-
-        [ [ a, d ]
-        , [ b, c, d ] ]
-
-    If a portion of the pattern doesn't have any "magic" in it
-    (that is, it's something like `"foo"` rather than `fo*o?`), then it
-    will be left as a string rather than converted to a regular
-    expression.
-
-* `regexp` Created by the `makeRe` method.  A single regular expression
-  expressing the entire pattern.  This is useful in cases where you wish
-  to use the pattern somewhat like `fnmatch(3)` with `FNM_PATH` enabled.
-* `negate` True if the pattern is negated.
-* `comment` True if the pattern is a comment.
-* `empty` True if the pattern is `""`.
-
-### Methods
-
-* `makeRe` Generate the `regexp` member if necessary, and return it.
-  Will return `false` if the pattern is invalid.
-* `match(fname)` Return true if the filename matches the pattern, or
-  false otherwise.
-* `matchOne(fileArray, patternArray, partial)` Take a `/`-split
-  filename, and match it against a single row in the `regExpSet`.  This
-  method is mainly for internal use, but is exposed so that it can be
-  used by a glob-walker that needs to avoid excessive filesystem calls.
-
-All other methods are internal, and will be called as necessary.
-
-## Functions
-
-The top-level exported function has a `cache` property, which is an LRU
-cache set to store 100 items.  So, calling these methods repeatedly
-with the same pattern and options will use the same Minimatch object,
-saving the cost of parsing it multiple times.
-
-### minimatch(path, pattern, options)
-
-Main export.  Tests a path against the pattern using the options.
-
-```javascript
-var isJS = minimatch(file, "*.js", { matchBase: true })
-```
-
-### minimatch.filter(pattern, options)
-
-Returns a function that tests its
-supplied argument, suitable for use with `Array.filter`.  Example:
-
-```javascript
-var javascripts = fileList.filter(minimatch.filter("*.js", {matchBase: true}))
-```
-
-### minimatch.match(list, pattern, options)
-
-Match against the list of
-files, in the style of fnmatch or glob.  If nothing is matched, and
-options.nonull is set, then return a list containing the pattern itself.
-
-```javascript
-var javascripts = minimatch.match(fileList, "*.js", {matchBase: true}))
-```
-
-### minimatch.makeRe(pattern, options)
-
-Make a regular expression object from the pattern.
-
-## Options
-
-All options are `false` by default.
-
-### debug
-
-Dump a ton of stuff to stderr.
-
-### nobrace
-
-Do not expand `{a,b}` and `{1..3}` brace sets.
-
-### noglobstar
-
-Disable `**` matching against multiple folder names.
-
-### dot
-
-Allow patterns to match filenames starting with a period, even if
-the pattern does not explicitly have a period in that spot.
-
-Note that by default, `a/**/b` will **not** match `a/.d/b`, unless `dot`
-is set.
-
-### noext
-
-Disable "extglob" style patterns like `+(a|b)`.
-
-### nocase
-
-Perform a case-insensitive match.
-
-### nonull
-
-When a match is not found by `minimatch.match`, return a list containing
-the pattern itself if this option is set.  When not set, an empty list
-is returned if there are no matches.
-
-### matchBase
-
-If set, then patterns without slashes will be matched
-against the basename of the path if it contains slashes.  For example,
-`a?b` would match the path `/xyz/123/acb`, but not `/xyz/acb/123`.
-
-### nocomment
-
-Suppress the behavior of treating `#` at the start of a pattern as a
-comment.
-
-### nonegate
-
-Suppress the behavior of treating a leading `!` character as negation.
-
-### flipNegate
-
-Returns from negate expressions the same as if they were not negated.
-(Ie, true on a hit, false on a miss.)
-
-
-## Comparisons to other fnmatch/glob implementations
-
-While strict compliance with the existing standards is a worthwhile
-goal, some discrepancies exist between minimatch and other
-implementations, and are intentional.
-
-If the pattern starts with a `!` character, then it is negated.  Set the
-`nonegate` flag to suppress this behavior, and treat leading `!`
-characters normally.  This is perhaps relevant if you wish to start the
-pattern with a negative extglob pattern like `!(a|B)`.  Multiple `!`
-characters at the start of a pattern will negate the pattern multiple
-times.
-
-If a pattern starts with `#`, then it is treated as a comment, and
-will not match anything.  Use `\#` to match a literal `#` at the
-start of a line, or set the `nocomment` flag to suppress this behavior.
-
-The double-star character `**` is supported by default, unless the
-`noglobstar` flag is set.  This is supported in the manner of bsdglob
-and bash 4.1, where `**` only has special significance if it is the only
-thing in a path part.  That is, `a/**/b` will match `a/x/y/b`, but
-`a/**b` will not.
-
-If an escaped pattern has no matches, and the `nonull` flag is set,
-then minimatch.match returns the pattern as-provided, rather than
-interpreting the character escapes.  For example,
-`minimatch.match([], "\\*a\\?")` will return `"\\*a\\?"` rather than
-`"*a?"`.  This is akin to setting the `nullglob` option in bash, except
-that it does not resolve escaped pattern characters.
-
-If brace expansion is not disabled, then it is performed before any
-other interpretation of the glob pattern.  Thus, a pattern like
-`+(a|{b),c)}`, which would not be valid in bash or zsh, is expanded
-**first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are
-checked for validity.  Since those two are valid, matching proceeds.
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/node_modules/minimatch/minimatch.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/node_modules/minimatch/minimatch.js
deleted file mode 100644
index 4539678..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/node_modules/minimatch/minimatch.js
+++ /dev/null
@@ -1,1061 +0,0 @@
-;(function (require, exports, module, platform) {
-
-if (module) module.exports = minimatch
-else exports.minimatch = minimatch
-
-if (!require) {
-  require = function (id) {
-    switch (id) {
-      case "sigmund": return function sigmund (obj) {
-        return JSON.stringify(obj)
-      }
-      case "path": return { basename: function (f) {
-        f = f.split(/[\/\\]/)
-        var e = f.pop()
-        if (!e) e = f.pop()
-        return e
-      }}
-      case "lru-cache": return function LRUCache () {
-        // not quite an LRU, but still space-limited.
-        var cache = {}
-        var cnt = 0
-        this.set = function (k, v) {
-          cnt ++
-          if (cnt >= 100) cache = {}
-          cache[k] = v
-        }
-        this.get = function (k) { return cache[k] }
-      }
-    }
-  }
-}
-
-minimatch.Minimatch = Minimatch
-
-var LRU = require("lru-cache")
-  , cache = minimatch.cache = new LRU({max: 100})
-  , GLOBSTAR = minimatch.GLOBSTAR = Minimatch.GLOBSTAR = {}
-  , sigmund = require("sigmund")
-
-var path = require("path")
-  // any single thing other than /
-  // don't need to escape / when using new RegExp()
-  , qmark = "[^/]"
-
-  // * => any number of characters
-  , star = qmark + "*?"
-
-  // ** when dots are allowed.  Anything goes, except .. and .
-  // not (^ or / followed by one or two dots followed by $ or /),
-  // followed by anything, any number of times.
-  , twoStarDot = "(?:(?!(?:\\\/|^)(?:\\.{1,2})($|\\\/)).)*?"
-
-  // not a ^ or / followed by a dot,
-  // followed by anything, any number of times.
-  , twoStarNoDot = "(?:(?!(?:\\\/|^)\\.).)*?"
-
-  // characters that need to be escaped in RegExp.
-  , reSpecials = charSet("().*{}+?[]^$\\!")
-
-// "abc" -> { a:true, b:true, c:true }
-function charSet (s) {
-  return s.split("").reduce(function (set, c) {
-    set[c] = true
-    return set
-  }, {})
-}
-
-// normalizes slashes.
-var slashSplit = /\/+/
-
-minimatch.filter = filter
-function filter (pattern, options) {
-  options = options || {}
-  return function (p, i, list) {
-    return minimatch(p, pattern, options)
-  }
-}
-
-function ext (a, b) {
-  a = a || {}
-  b = b || {}
-  var t = {}
-  Object.keys(b).forEach(function (k) {
-    t[k] = b[k]
-  })
-  Object.keys(a).forEach(function (k) {
-    t[k] = a[k]
-  })
-  return t
-}
-
-minimatch.defaults = function (def) {
-  if (!def || !Object.keys(def).length) return minimatch
-
-  var orig = minimatch
-
-  var m = function minimatch (p, pattern, options) {
-    return orig.minimatch(p, pattern, ext(def, options))
-  }
-
-  m.Minimatch = function Minimatch (pattern, options) {
-    return new orig.Minimatch(pattern, ext(def, options))
-  }
-
-  return m
-}
-
-Minimatch.defaults = function (def) {
-  if (!def || !Object.keys(def).length) return Minimatch
-  return minimatch.defaults(def).Minimatch
-}
-
-
-function minimatch (p, pattern, options) {
-  if (typeof pattern !== "string") {
-    throw new TypeError("glob pattern string required")
-  }
-
-  if (!options) options = {}
-
-  // shortcut: comments match nothing.
-  if (!options.nocomment && pattern.charAt(0) === "#") {
-    return false
-  }
-
-  // "" only matches ""
-  if (pattern.trim() === "") return p === ""
-
-  return new Minimatch(pattern, options).match(p)
-}
-
-function Minimatch (pattern, options) {
-  if (!(this instanceof Minimatch)) {
-    return new Minimatch(pattern, options, cache)
-  }
-
-  if (typeof pattern !== "string") {
-    throw new TypeError("glob pattern string required")
-  }
-
-  if (!options) options = {}
-  pattern = pattern.trim()
-
-  // windows: need to use /, not \
-  // On other platforms, \ is a valid (albeit bad) filename char.
-  if (platform === "win32") {
-    pattern = pattern.split("\\").join("/")
-  }
-
-  // lru storage.
-  // these things aren't particularly big, but walking down the string
-  // and turning it into a regexp can get pretty costly.
-  var cacheKey = pattern + "\n" + sigmund(options)
-  var cached = minimatch.cache.get(cacheKey)
-  if (cached) return cached
-  minimatch.cache.set(cacheKey, this)
-
-  this.options = options
-  this.set = []
-  this.pattern = pattern
-  this.regexp = null
-  this.negate = false
-  this.comment = false
-  this.empty = false
-
-  // make the set of regexps etc.
-  this.make()
-}
-
-Minimatch.prototype.debug = function() {}
-
-Minimatch.prototype.make = make
-function make () {
-  // don't do it more than once.
-  if (this._made) return
-
-  var pattern = this.pattern
-  var options = this.options
-
-  // empty patterns and comments match nothing.
-  if (!options.nocomment && pattern.charAt(0) === "#") {
-    this.comment = true
-    return
-  }
-  if (!pattern) {
-    this.empty = true
-    return
-  }
-
-  // step 1: figure out negation, etc.
-  this.parseNegate()
-
-  // step 2: expand braces
-  var set = this.globSet = this.braceExpand()
-
-  if (options.debug) this.debug = console.error
-
-  this.debug(this.pattern, set)
-
-  // step 3: now we have a set, so turn each one into a series of path-portion
-  // matching patterns.
-  // These will be regexps, except in the case of "**", which is
-  // set to the GLOBSTAR object for globstar behavior,
-  // and will not contain any / characters
-  set = this.globParts = set.map(function (s) {
-    return s.split(slashSplit)
-  })
-
-  this.debug(this.pattern, set)
-
-  // glob --> regexps
-  set = set.map(function (s, si, set) {
-    return s.map(this.parse, this)
-  }, this)
-
-  this.debug(this.pattern, set)
-
-  // filter out everything that didn't compile properly.
-  set = set.filter(function (s) {
-    return -1 === s.indexOf(false)
-  })
-
-  this.debug(this.pattern, set)
-
-  this.set = set
-}
-
-Minimatch.prototype.parseNegate = parseNegate
-function parseNegate () {
-  var pattern = this.pattern
-    , negate = false
-    , options = this.options
-    , negateOffset = 0
-
-  if (options.nonegate) return
-
-  for ( var i = 0, l = pattern.length
-      ; i < l && pattern.charAt(i) === "!"
-      ; i ++) {
-    negate = !negate
-    negateOffset ++
-  }
-
-  if (negateOffset) this.pattern = pattern.substr(negateOffset)
-  this.negate = negate
-}
-
-// Brace expansion:
-// a{b,c}d -> abd acd
-// a{b,}c -> abc ac
-// a{0..3}d -> a0d a1d a2d a3d
-// a{b,c{d,e}f}g -> abg acdfg acefg
-// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg
-//
-// Invalid sets are not expanded.
-// a{2..}b -> a{2..}b
-// a{b}c -> a{b}c
-minimatch.braceExpand = function (pattern, options) {
-  return new Minimatch(pattern, options).braceExpand()
-}
-
-Minimatch.prototype.braceExpand = braceExpand
-function braceExpand (pattern, options) {
-  options = options || this.options
-  pattern = typeof pattern === "undefined"
-    ? this.pattern : pattern
-
-  if (typeof pattern === "undefined") {
-    throw new Error("undefined pattern")
-  }
-
-  if (options.nobrace ||
-      !pattern.match(/\{.*\}/)) {
-    // shortcut. no need to expand.
-    return [pattern]
-  }
-
-  var escaping = false
-
-  // examples and comments refer to this crazy pattern:
-  // a{b,c{d,e},{f,g}h}x{y,z}
-  // expected:
-  // abxy
-  // abxz
-  // acdxy
-  // acdxz
-  // acexy
-  // acexz
-  // afhxy
-  // afhxz
-  // aghxy
-  // aghxz
-
-  // everything before the first \{ is just a prefix.
-  // So, we pluck that off, and work with the rest,
-  // and then prepend it to everything we find.
-  if (pattern.charAt(0) !== "{") {
-    this.debug(pattern)
-    var prefix = null
-    for (var i = 0, l = pattern.length; i < l; i ++) {
-      var c = pattern.charAt(i)
-      this.debug(i, c)
-      if (c === "\\") {
-        escaping = !escaping
-      } else if (c === "{" && !escaping) {
-        prefix = pattern.substr(0, i)
-        break
-      }
-    }
-
-    // actually no sets, all { were escaped.
-    if (prefix === null) {
-      this.debug("no sets")
-      return [pattern]
-    }
-
-   var tail = braceExpand.call(this, pattern.substr(i), options)
-    return tail.map(function (t) {
-      return prefix + t
-    })
-  }
-
-  // now we have something like:
-  // {b,c{d,e},{f,g}h}x{y,z}
-  // walk through the set, expanding each part, until
-  // the set ends.  then, we'll expand the suffix.
-  // If the set only has a single member, then'll put the {} back
-
-  // first, handle numeric sets, since they're easier
-  var numset = pattern.match(/^\{(-?[0-9]+)\.\.(-?[0-9]+)\}/)
-  if (numset) {
-    this.debug("numset", numset[1], numset[2])
-    var suf = braceExpand.call(this, pattern.substr(numset[0].length), options)
-      , start = +numset[1]
-      , end = +numset[2]
-      , inc = start > end ? -1 : 1
-      , set = []
-    for (var i = start; i != (end + inc); i += inc) {
-      // append all the suffixes
-      for (var ii = 0, ll = suf.length; ii < ll; ii ++) {
-        set.push(i + suf[ii])
-      }
-    }
-    return set
-  }
-
-  // ok, walk through the set
-  // We hope, somewhat optimistically, that there
-  // will be a } at the end.
-  // If the closing brace isn't found, then the pattern is
-  // interpreted as braceExpand("\\" + pattern) so that
-  // the leading \{ will be interpreted literally.
-  var i = 1 // skip the \{
-    , depth = 1
-    , set = []
-    , member = ""
-    , sawEnd = false
-    , escaping = false
-
-  function addMember () {
-    set.push(member)
-    member = ""
-  }
-
-  this.debug("Entering for")
-  FOR: for (i = 1, l = pattern.length; i < l; i ++) {
-    var c = pattern.charAt(i)
-    this.debug("", i, c)
-
-    if (escaping) {
-      escaping = false
-      member += "\\" + c
-    } else {
-      switch (c) {
-        case "\\":
-          escaping = true
-          continue
-
-        case "{":
-          depth ++
-          member += "{"
-          continue
-
-        case "}":
-          depth --
-          // if this closes the actual set, then we're done
-          if (depth === 0) {
-            addMember()
-            // pluck off the close-brace
-            i ++
-            break FOR
-          } else {
-            member += c
-            continue
-          }
-
-        case ",":
-          if (depth === 1) {
-            addMember()
-          } else {
-            member += c
-          }
-          continue
-
-        default:
-          member += c
-          continue
-      } // switch
-    } // else
-  } // for
-
-  // now we've either finished the set, and the suffix is
-  // pattern.substr(i), or we have *not* closed the set,
-  // and need to escape the leading brace
-  if (depth !== 0) {
-    this.debug("didn't close", pattern)
-    return braceExpand.call(this, "\\" + pattern, options)
-  }
-
-  // x{y,z} -> ["xy", "xz"]
-  this.debug("set", set)
-  this.debug("suffix", pattern.substr(i))
-  var suf = braceExpand.call(this, pattern.substr(i), options)
-  // ["b", "c{d,e}","{f,g}h"] ->
-  //   [["b"], ["cd", "ce"], ["fh", "gh"]]
-  var addBraces = set.length === 1
-  this.debug("set pre-expanded", set)
-  set = set.map(function (p) {
-    return braceExpand.call(this, p, options)
-  }, this)
-  this.debug("set expanded", set)
-
-
-  // [["b"], ["cd", "ce"], ["fh", "gh"]] ->
-  //   ["b", "cd", "ce", "fh", "gh"]
-  set = set.reduce(function (l, r) {
-    return l.concat(r)
-  })
-
-  if (addBraces) {
-    set = set.map(function (s) {
-      return "{" + s + "}"
-    })
-  }
-
-  // now attach the suffixes.
-  var ret = []
-  for (var i = 0, l = set.length; i < l; i ++) {
-    for (var ii = 0, ll = suf.length; ii < ll; ii ++) {
-      ret.push(set[i] + suf[ii])
-    }
-  }
-  return ret
-}
-
-// parse a component of the expanded set.
-// At this point, no pattern may contain "/" in it
-// so we're going to return a 2d array, where each entry is the full
-// pattern, split on '/', and then turned into a regular expression.
-// A regexp is made at the end which joins each array with an
-// escaped /, and another full one which joins each regexp with |.
-//
-// Following the lead of Bash 4.1, note that "**" only has special meaning
-// when it is the *only* thing in a path portion.  Otherwise, any series
-// of * is equivalent to a single *.  Globstar behavior is enabled by
-// default, and can be disabled by setting options.noglobstar.
-Minimatch.prototype.parse = parse
-var SUBPARSE = {}
-function parse (pattern, isSub) {
-  var options = this.options
-
-  // shortcuts
-  if (!options.noglobstar && pattern === "**") return GLOBSTAR
-  if (pattern === "") return ""
-
-  var re = ""
-    , hasMagic = !!options.nocase
-    , escaping = false
-    // ? => one single character
-    , patternListStack = []
-    , plType
-    , stateChar
-    , inClass = false
-    , reClassStart = -1
-    , classStart = -1
-    // . and .. never match anything that doesn't start with .,
-    // even when options.dot is set.
-    , patternStart = pattern.charAt(0) === "." ? "" // anything
-      // not (start or / followed by . or .. followed by / or end)
-      : options.dot ? "(?!(?:^|\\\/)\\.{1,2}(?:$|\\\/))"
-      : "(?!\\.)"
-    , self = this
-
-  function clearStateChar () {
-    if (stateChar) {
-      // we had some state-tracking character
-      // that wasn't consumed by this pass.
-      switch (stateChar) {
-        case "*":
-          re += star
-          hasMagic = true
-          break
-        case "?":
-          re += qmark
-          hasMagic = true
-          break
-        default:
-          re += "\\"+stateChar
-          break
-      }
-      self.debug('clearStateChar %j %j', stateChar, re)
-      stateChar = false
-    }
-  }
-
-  for ( var i = 0, len = pattern.length, c
-      ; (i < len) && (c = pattern.charAt(i))
-      ; i ++ ) {
-
-    this.debug("%s\t%s %s %j", pattern, i, re, c)
-
-    // skip over any that are escaped.
-    if (escaping && reSpecials[c]) {
-      re += "\\" + c
-      escaping = false
-      continue
-    }
-
-    SWITCH: switch (c) {
-      case "/":
-        // completely not allowed, even escaped.
-        // Should already be path-split by now.
-        return false
-
-      case "\\":
-        clearStateChar()
-        escaping = true
-        continue
-
-      // the various stateChar values
-      // for the "extglob" stuff.
-      case "?":
-      case "*":
-      case "+":
-      case "@":
-      case "!":
-        this.debug("%s\t%s %s %j <-- stateChar", pattern, i, re, c)
-
-        // all of those are literals inside a class, except that
-        // the glob [!a] means [^a] in regexp
-        if (inClass) {
-          this.debug('  in class')
-          if (c === "!" && i === classStart + 1) c = "^"
-          re += c
-          continue
-        }
-
-        // if we already have a stateChar, then it means
-        // that there was something like ** or +? in there.
-        // Handle the stateChar, then proceed with this one.
-        self.debug('call clearStateChar %j', stateChar)
-        clearStateChar()
-        stateChar = c
-        // if extglob is disabled, then +(asdf|foo) isn't a thing.
-        // just clear the statechar *now*, rather than even diving into
-        // the patternList stuff.
-        if (options.noext) clearStateChar()
-        continue
-
-      case "(":
-        if (inClass) {
-          re += "("
-          continue
-        }
-
-        if (!stateChar) {
-          re += "\\("
-          continue
-        }
-
-        plType = stateChar
-        patternListStack.push({ type: plType
-                              , start: i - 1
-                              , reStart: re.length })
-        // negation is (?:(?!js)[^/]*)
-        re += stateChar === "!" ? "(?:(?!" : "(?:"
-        this.debug('plType %j %j', stateChar, re)
-        stateChar = false
-        continue
-
-      case ")":
-        if (inClass || !patternListStack.length) {
-          re += "\\)"
-          continue
-        }
-
-        clearStateChar()
-        hasMagic = true
-        re += ")"
-        plType = patternListStack.pop().type
-        // negation is (?:(?!js)[^/]*)
-        // The others are (?:<pattern>)<type>
-        switch (plType) {
-          case "!":
-            re += "[^/]*?)"
-            break
-          case "?":
-          case "+":
-          case "*": re += plType
-          case "@": break // the default anyway
-        }
-        continue
-
-      case "|":
-        if (inClass || !patternListStack.length || escaping) {
-          re += "\\|"
-          escaping = false
-          continue
-        }
-
-        clearStateChar()
-        re += "|"
-        continue
-
-      // these are mostly the same in regexp and glob
-      case "[":
-        // swallow any state-tracking char before the [
-        clearStateChar()
-
-        if (inClass) {
-          re += "\\" + c
-          continue
-        }
-
-        inClass = true
-        classStart = i
-        reClassStart = re.length
-        re += c
-        continue
-
-      case "]":
-        //  a right bracket shall lose its special
-        //  meaning and represent itself in
-        //  a bracket expression if it occurs
-        //  first in the list.  -- POSIX.2 2.8.3.2
-        if (i === classStart + 1 || !inClass) {
-          re += "\\" + c
-          escaping = false
-          continue
-        }
-
-        // finish up the class.
-        hasMagic = true
-        inClass = false
-        re += c
-        continue
-
-      default:
-        // swallow any state char that wasn't consumed
-        clearStateChar()
-
-        if (escaping) {
-          // no need
-          escaping = false
-        } else if (reSpecials[c]
-                   && !(c === "^" && inClass)) {
-          re += "\\"
-        }
-
-        re += c
-
-    } // switch
-  } // for
-
-
-  // handle the case where we left a class open.
-  // "[abc" is valid, equivalent to "\[abc"
-  if (inClass) {
-    // split where the last [ was, and escape it
-    // this is a huge pita.  We now have to re-walk
-    // the contents of the would-be class to re-translate
-    // any characters that were passed through as-is
-    var cs = pattern.substr(classStart + 1)
-      , sp = this.parse(cs, SUBPARSE)
-    re = re.substr(0, reClassStart) + "\\[" + sp[0]
-    hasMagic = hasMagic || sp[1]
-  }
-
-  // handle the case where we had a +( thing at the *end*
-  // of the pattern.
-  // each pattern list stack adds 3 chars, and we need to go through
-  // and escape any | chars that were passed through as-is for the regexp.
-  // Go through and escape them, taking care not to double-escape any
-  // | chars that were already escaped.
-  var pl
-  while (pl = patternListStack.pop()) {
-    var tail = re.slice(pl.reStart + 3)
-    // maybe some even number of \, then maybe 1 \, followed by a |
-    tail = tail.replace(/((?:\\{2})*)(\\?)\|/g, function (_, $1, $2) {
-      if (!$2) {
-        // the | isn't already escaped, so escape it.
-        $2 = "\\"
-      }
-
-      // need to escape all those slashes *again*, without escaping the
-      // one that we need for escaping the | character.  As it works out,
-      // escaping an even number of slashes can be done by simply repeating
-      // it exactly after itself.  That's why this trick works.
-      //
-      // I am sorry that you have to see this.
-      return $1 + $1 + $2 + "|"
-    })
-
-    this.debug("tail=%j\n   %s", tail, tail)
-    var t = pl.type === "*" ? star
-          : pl.type === "?" ? qmark
-          : "\\" + pl.type
-
-    hasMagic = true
-    re = re.slice(0, pl.reStart)
-       + t + "\\("
-       + tail
-  }
-
-  // handle trailing things that only matter at the very end.
-  clearStateChar()
-  if (escaping) {
-    // trailing \\
-    re += "\\\\"
-  }
-
-  // only need to apply the nodot start if the re starts with
-  // something that could conceivably capture a dot
-  var addPatternStart = false
-  switch (re.charAt(0)) {
-    case ".":
-    case "[":
-    case "(": addPatternStart = true
-  }
-
-  // if the re is not "" at this point, then we need to make sure
-  // it doesn't match against an empty path part.
-  // Otherwise a/* will match a/, which it should not.
-  if (re !== "" && hasMagic) re = "(?=.)" + re
-
-  if (addPatternStart) re = patternStart + re
-
-  // parsing just a piece of a larger pattern.
-  if (isSub === SUBPARSE) {
-    return [ re, hasMagic ]
-  }
-
-  // skip the regexp for non-magical patterns
-  // unescape anything in it, though, so that it'll be
-  // an exact match against a file etc.
-  if (!hasMagic) {
-    return globUnescape(pattern)
-  }
-
-  var flags = options.nocase ? "i" : ""
-    , regExp = new RegExp("^" + re + "$", flags)
-
-  regExp._glob = pattern
-  regExp._src = re
-
-  return regExp
-}
-
-minimatch.makeRe = function (pattern, options) {
-  return new Minimatch(pattern, options || {}).makeRe()
-}
-
-Minimatch.prototype.makeRe = makeRe
-function makeRe () {
-  if (this.regexp || this.regexp === false) return this.regexp
-
-  // at this point, this.set is a 2d array of partial
-  // pattern strings, or "**".
-  //
-  // It's better to use .match().  This function shouldn't
-  // be used, really, but it's pretty convenient sometimes,
-  // when you just want to work with a regex.
-  var set = this.set
-
-  if (!set.length) return this.regexp = false
-  var options = this.options
-
-  var twoStar = options.noglobstar ? star
-      : options.dot ? twoStarDot
-      : twoStarNoDot
-    , flags = options.nocase ? "i" : ""
-
-  var re = set.map(function (pattern) {
-    return pattern.map(function (p) {
-      return (p === GLOBSTAR) ? twoStar
-           : (typeof p === "string") ? regExpEscape(p)
-           : p._src
-    }).join("\\\/")
-  }).join("|")
-
-  // must match entire pattern
-  // ending in a * or ** will make it less strict.
-  re = "^(?:" + re + ")$"
-
-  // can match anything, as long as it's not this.
-  if (this.negate) re = "^(?!" + re + ").*$"
-
-  try {
-    return this.regexp = new RegExp(re, flags)
-  } catch (ex) {
-    return this.regexp = false
-  }
-}
-
-minimatch.match = function (list, pattern, options) {
-  options = options || {}
-  var mm = new Minimatch(pattern, options)
-  list = list.filter(function (f) {
-    return mm.match(f)
-  })
-  if (mm.options.nonull && !list.length) {
-    list.push(pattern)
-  }
-  return list
-}
-
-Minimatch.prototype.match = match
-function match (f, partial) {
-  this.debug("match", f, this.pattern)
-  // short-circuit in the case of busted things.
-  // comments, etc.
-  if (this.comment) return false
-  if (this.empty) return f === ""
-
-  if (f === "/" && partial) return true
-
-  var options = this.options
-
-  // windows: need to use /, not \
-  // On other platforms, \ is a valid (albeit bad) filename char.
-  if (platform === "win32") {
-    f = f.split("\\").join("/")
-  }
-
-  // treat the test path as a set of pathparts.
-  f = f.split(slashSplit)
-  this.debug(this.pattern, "split", f)
-
-  // just ONE of the pattern sets in this.set needs to match
-  // in order for it to be valid.  If negating, then just one
-  // match means that we have failed.
-  // Either way, return on the first hit.
-
-  var set = this.set
-  this.debug(this.pattern, "set", set)
-
-  // Find the basename of the path by looking for the last non-empty segment
-  var filename;
-  for (var i = f.length - 1; i >= 0; i--) {
-    filename = f[i]
-    if (filename) break
-  }
-
-  for (var i = 0, l = set.length; i < l; i ++) {
-    var pattern = set[i], file = f
-    if (options.matchBase && pattern.length === 1) {
-      file = [filename]
-    }
-    var hit = this.matchOne(file, pattern, partial)
-    if (hit) {
-      if (options.flipNegate) return true
-      return !this.negate
-    }
-  }
-
-  // didn't get any hits.  this is success if it's a negative
-  // pattern, failure otherwise.
-  if (options.flipNegate) return false
-  return this.negate
-}
-
-// set partial to true to test if, for example,
-// "/a/b" matches the start of "/*/b/*/d"
-// Partial means, if you run out of file before you run
-// out of pattern, then that's fine, as long as all
-// the parts match.
-Minimatch.prototype.matchOne = function (file, pattern, partial) {
-  var options = this.options
-
-  this.debug("matchOne",
-              { "this": this
-              , file: file
-              , pattern: pattern })
-
-  this.debug("matchOne", file.length, pattern.length)
-
-  for ( var fi = 0
-          , pi = 0
-          , fl = file.length
-          , pl = pattern.length
-      ; (fi < fl) && (pi < pl)
-      ; fi ++, pi ++ ) {
-
-    this.debug("matchOne loop")
-    var p = pattern[pi]
-      , f = file[fi]
-
-    this.debug(pattern, p, f)
-
-    // should be impossible.
-    // some invalid regexp stuff in the set.
-    if (p === false) return false
-
-    if (p === GLOBSTAR) {
-      this.debug('GLOBSTAR', [pattern, p, f])
-
-      // "**"
-      // a/**/b/**/c would match the following:
-      // a/b/x/y/z/c
-      // a/x/y/z/b/c
-      // a/b/x/b/x/c
-      // a/b/c
-      // To do this, take the rest of the pattern after
-      // the **, and see if it would match the file remainder.
-      // If so, return success.
-      // If not, the ** "swallows" a segment, and try again.
-      // This is recursively awful.
-      //
-      // a/**/b/**/c matching a/b/x/y/z/c
-      // - a matches a
-      // - doublestar
-      //   - matchOne(b/x/y/z/c, b/**/c)
-      //     - b matches b
-      //     - doublestar
-      //       - matchOne(x/y/z/c, c) -> no
-      //       - matchOne(y/z/c, c) -> no
-      //       - matchOne(z/c, c) -> no
-      //       - matchOne(c, c) yes, hit
-      var fr = fi
-        , pr = pi + 1
-      if (pr === pl) {
-        this.debug('** at the end')
-        // a ** at the end will just swallow the rest.
-        // We have found a match.
-        // however, it will not swallow /.x, unless
-        // options.dot is set.
-        // . and .. are *never* matched by **, for explosively
-        // exponential reasons.
-        for ( ; fi < fl; fi ++) {
-          if (file[fi] === "." || file[fi] === ".." ||
-              (!options.dot && file[fi].charAt(0) === ".")) return false
-        }
-        return true
-      }
-
-      // ok, let's see if we can swallow whatever we can.
-      WHILE: while (fr < fl) {
-        var swallowee = file[fr]
-
-        this.debug('\nglobstar while',
-                    file, fr, pattern, pr, swallowee)
-
-        // XXX remove this slice.  Just pass the start index.
-        if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) {
-          this.debug('globstar found match!', fr, fl, swallowee)
-          // found a match.
-          return true
-        } else {
-          // can't swallow "." or ".." ever.
-          // can only swallow ".foo" when explicitly asked.
-          if (swallowee === "." || swallowee === ".." ||
-              (!options.dot && swallowee.charAt(0) === ".")) {
-            this.debug("dot detected!", file, fr, pattern, pr)
-            break WHILE
-          }
-
-          // ** swallows a segment, and continue.
-          this.debug('globstar swallow a segment, and continue')
-          fr ++
-        }
-      }
-      // no match was found.
-      // However, in partial mode, we can't say this is necessarily over.
-      // If there's more *pattern* left, then
-      if (partial) {
-        // ran out of file
-        this.debug("\n>>> no match, partial?", file, fr, pattern, pr)
-        if (fr === fl) return true
-      }
-      return false
-    }
-
-    // something other than **
-    // non-magic patterns just have to match exactly
-    // patterns with magic have been turned into regexps.
-    var hit
-    if (typeof p === "string") {
-      if (options.nocase) {
-        hit = f.toLowerCase() === p.toLowerCase()
-      } else {
-        hit = f === p
-      }
-      this.debug("string match", p, f, hit)
-    } else {
-      hit = f.match(p)
-      this.debug("pattern match", p, f, hit)
-    }
-
-    if (!hit) return false
-  }
-
-  // Note: ending in / means that we'll get a final ""
-  // at the end of the pattern.  This can only match a
-  // corresponding "" at the end of the file.
-  // If the file ends in /, then it can only match a
-  // a pattern that ends in /, unless the pattern just
-  // doesn't have any more for it. But, a/b/ should *not*
-  // match "a/b/*", even though "" matches against the
-  // [^/]*? pattern, except in partial mode, where it might
-  // simply not be reached yet.
-  // However, a/b/ should still satisfy a/*
-
-  // now either we fell off the end of the pattern, or we're done.
-  if (fi === fl && pi === pl) {
-    // ran out of pattern and filename at the same time.
-    // an exact hit!
-    return true
-  } else if (fi === fl) {
-    // ran out of file, but still had pattern left.
-    // this is ok if we're doing the match as part of
-    // a glob fs traversal.
-    return partial
-  } else if (pi === pl) {
-    // ran out of pattern, still have file left.
-    // this is only acceptable if we're on the very last
-    // empty segment of a file with a trailing slash.
-    // a/* should match a/b/
-    var emptyFileEnd = (fi === fl - 1) && (file[fi] === "")
-    return emptyFileEnd
-  }
-
-  // should be unreachable.
-  throw new Error("wtf?")
-}
-
-
-// replace stuff like \* with *
-function globUnescape (s) {
-  return s.replace(/\\(.)/g, "$1")
-}
-
-
-function regExpEscape (s) {
-  return s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&")
-}
-
-})( typeof require === "function" ? require : null,
-    this,
-    typeof module === "object" ? module : null,
-    typeof process === "object" ? process.platform : "win32"
-  )
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/.npmignore b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/.npmignore
deleted file mode 100644
index 07e6e47..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/.npmignore
+++ /dev/null
@@ -1 +0,0 @@
-/node_modules
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/.travis.yml b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/.travis.yml
deleted file mode 100644
index 4af02b3..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/.travis.yml
+++ /dev/null
@@ -1,8 +0,0 @@
-language: node_js
-node_js:
-  - '0.8'
-  - '0.10'
-  - '0.12'
-  - 'iojs'
-before_install:
-  - npm install -g npm@latest
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/CONTRIBUTORS b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/CONTRIBUTORS
deleted file mode 100644
index 4a0bc50..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/CONTRIBUTORS
+++ /dev/null
@@ -1,14 +0,0 @@
-# Authors, sorted by whether or not they are me
-Isaac Z. Schlueter <i@izs.me>
-Brian Cottingham <spiffytech@gmail.com>
-Carlos Brito Lage <carlos@carloslage.net>
-Jesse Dailey <jesse.dailey@gmail.com>
-Kevin O'Hara <kevinohara80@gmail.com>
-Marco Rogers <marco.rogers@gmail.com>
-Mark Cavage <mcavage@gmail.com>
-Marko Mikulicic <marko.mikulicic@isti.cnr.it>
-Nathan Rajlich <nathan@tootallnate.net>
-Satheesh Natesan <snateshan@myspace-inc.com>
-Trent Mick <trentm@gmail.com>
-ashleybrener <ashley@starlogik.com>
-n4kz <n4kz@n4kz.com>
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/LICENSE b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/LICENSE
deleted file mode 100644
index 19129e3..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/LICENSE
+++ /dev/null
@@ -1,15 +0,0 @@
-The ISC License
-
-Copyright (c) Isaac Z. Schlueter and Contributors
-
-Permission to use, copy, modify, and/or distribute this software for any
-purpose with or without fee is hereby granted, provided that the above
-copyright notice and this permission notice appear in all copies.
-
-THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
-WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
-ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
-ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
-IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/README.md b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/README.md
deleted file mode 100644
index 3fd6d0b..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/README.md
+++ /dev/null
@@ -1,119 +0,0 @@
-# lru cache
-
-A cache object that deletes the least-recently-used items.
-
-## Usage:
-
-```javascript
-var LRU = require("lru-cache")
-  , options = { max: 500
-              , length: function (n) { return n * 2 }
-              , dispose: function (key, n) { n.close() }
-              , maxAge: 1000 * 60 * 60 }
-  , cache = LRU(options)
-  , otherCache = LRU(50) // sets just the max size
-
-cache.set("key", "value")
-cache.get("key") // "value"
-
-cache.reset()    // empty the cache
-```
-
-If you put more stuff in it, then items will fall out.
-
-If you try to put an oversized thing in it, then it'll fall out right
-away.
-
-## Options
-
-* `max` The maximum size of the cache, checked by applying the length
-  function to all values in the cache.  Not setting this is kind of
-  silly, since that's the whole purpose of this lib, but it defaults
-  to `Infinity`.
-* `maxAge` Maximum age in ms.  Items are not pro-actively pruned out
-  as they age, but if you try to get an item that is too old, it'll
-  drop it and return undefined instead of giving it to you.
-* `length` Function that is used to calculate the length of stored
-  items.  If you're storing strings or buffers, then you probably want
-  to do something like `function(n){return n.length}`.  The default is
-  `function(n){return 1}`, which is fine if you want to store `max`
-  like-sized things.
-* `dispose` Function that is called on items when they are dropped
-  from the cache.  This can be handy if you want to close file
-  descriptors or do other cleanup tasks when items are no longer
-  accessible.  Called with `key, value`.  It's called *before*
-  actually removing the item from the internal cache, so if you want
-  to immediately put it back in, you'll have to do that in a
-  `nextTick` or `setTimeout` callback or it won't do anything.
-* `stale` By default, if you set a `maxAge`, it'll only actually pull
-  stale items out of the cache when you `get(key)`.  (That is, it's
-  not pre-emptively doing a `setTimeout` or anything.)  If you set
-  `stale:true`, it'll return the stale value before deleting it.  If
-  you don't set this, then it'll return `undefined` when you try to
-  get a stale entry, as if it had already been deleted.
-
-## API
-
-* `set(key, value, maxAge)`
-* `get(key) => value`
-
-    Both of these will update the "recently used"-ness of the key.
-    They do what you think. `max` is optional and overrides the
-    cache `max` option if provided.
-
-* `peek(key)`
-
-    Returns the key value (or `undefined` if not found) without
-    updating the "recently used"-ness of the key.
-
-    (If you find yourself using this a lot, you *might* be using the
-    wrong sort of data structure, but there are some use cases where
-    it's handy.)
-
-* `del(key)`
-
-    Deletes a key out of the cache.
-
-* `reset()`
-
-    Clear the cache entirely, throwing away all values.
-
-* `has(key)`
-
-    Check if a key is in the cache, without updating the recent-ness
-    or deleting it for being stale.
-
-* `forEach(function(value,key,cache), [thisp])`
-
-    Just like `Array.prototype.forEach`.  Iterates over all the keys
-    in the cache, in order of recent-ness.  (Ie, more recently used
-    items are iterated over first.)
-
-* `keys()`
-
-    Return an array of the keys in the cache.
-
-* `values()`
-
-    Return an array of the values in the cache.
-
-* `length()`
-
-    Return total length of objects in cache taking into account
-    `length` options function.
-
-* `itemCount`
-
-    Return total quantity of objects currently in cache. Note, that
-    `stale` (see options) items are returned as part of this item
-    count.
-
-* `dump()`
-
-    Return an array of the cache entries ready for serialization and usage
-    with 'destinationCache.load(arr)`.
-
-* `load(cacheEntriesArray)`
-
-    Loads another cache entries array, obtained with `sourceCache.dump()`,
-    into the cache. The destination cache is reset before loading new entries
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/lib/lru-cache.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/lib/lru-cache.js
deleted file mode 100644
index 32c2d2d..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/lib/lru-cache.js
+++ /dev/null
@@ -1,318 +0,0 @@
-;(function () { // closure for web browsers
-
-if (typeof module === 'object' && module.exports) {
-  module.exports = LRUCache
-} else {
-  // just set the global for non-node platforms.
-  this.LRUCache = LRUCache
-}
-
-function hOP (obj, key) {
-  return Object.prototype.hasOwnProperty.call(obj, key)
-}
-
-function naiveLength () { return 1 }
-
-function LRUCache (options) {
-  if (!(this instanceof LRUCache))
-    return new LRUCache(options)
-
-  if (typeof options === 'number')
-    options = { max: options }
-
-  if (!options)
-    options = {}
-
-  this._max = options.max
-  // Kind of weird to have a default max of Infinity, but oh well.
-  if (!this._max || !(typeof this._max === "number") || this._max <= 0 )
-    this._max = Infinity
-
-  this._lengthCalculator = options.length || naiveLength
-  if (typeof this._lengthCalculator !== "function")
-    this._lengthCalculator = naiveLength
-
-  this._allowStale = options.stale || false
-  this._maxAge = options.maxAge || null
-  this._dispose = options.dispose
-  this.reset()
-}
-
-// resize the cache when the max changes.
-Object.defineProperty(LRUCache.prototype, "max",
-  { set : function (mL) {
-      if (!mL || !(typeof mL === "number") || mL <= 0 ) mL = Infinity
-      this._max = mL
-      if (this._length > this._max) trim(this)
-    }
-  , get : function () { return this._max }
-  , enumerable : true
-  })
-
-// resize the cache when the lengthCalculator changes.
-Object.defineProperty(LRUCache.prototype, "lengthCalculator",
-  { set : function (lC) {
-      if (typeof lC !== "function") {
-        this._lengthCalculator = naiveLength
-        this._length = this._itemCount
-        for (var key in this._cache) {
-          this._cache[key].length = 1
-        }
-      } else {
-        this._lengthCalculator = lC
-        this._length = 0
-        for (var key in this._cache) {
-          this._cache[key].length = this._lengthCalculator(this._cache[key].value)
-          this._length += this._cache[key].length
-        }
-      }
-
-      if (this._length > this._max) trim(this)
-    }
-  , get : function () { return this._lengthCalculator }
-  , enumerable : true
-  })
-
-Object.defineProperty(LRUCache.prototype, "length",
-  { get : function () { return this._length }
-  , enumerable : true
-  })
-
-
-Object.defineProperty(LRUCache.prototype, "itemCount",
-  { get : function () { return this._itemCount }
-  , enumerable : true
-  })
-
-LRUCache.prototype.forEach = function (fn, thisp) {
-  thisp = thisp || this
-  var i = 0
-  var itemCount = this._itemCount
-
-  for (var k = this._mru - 1; k >= 0 && i < itemCount; k--) if (this._lruList[k]) {
-    i++
-    var hit = this._lruList[k]
-    if (isStale(this, hit)) {
-      del(this, hit)
-      if (!this._allowStale) hit = undefined
-    }
-    if (hit) {
-      fn.call(thisp, hit.value, hit.key, this)
-    }
-  }
-}
-
-LRUCache.prototype.keys = function () {
-  var keys = new Array(this._itemCount)
-  var i = 0
-  for (var k = this._mru - 1; k >= 0 && i < this._itemCount; k--) if (this._lruList[k]) {
-    var hit = this._lruList[k]
-    keys[i++] = hit.key
-  }
-  return keys
-}
-
-LRUCache.prototype.values = function () {
-  var values = new Array(this._itemCount)
-  var i = 0
-  for (var k = this._mru - 1; k >= 0 && i < this._itemCount; k--) if (this._lruList[k]) {
-    var hit = this._lruList[k]
-    values[i++] = hit.value
-  }
-  return values
-}
-
-LRUCache.prototype.reset = function () {
-  if (this._dispose && this._cache) {
-    for (var k in this._cache) {
-      this._dispose(k, this._cache[k].value)
-    }
-  }
-
-  this._cache = Object.create(null) // hash of items by key
-  this._lruList = Object.create(null) // list of items in order of use recency
-  this._mru = 0 // most recently used
-  this._lru = 0 // least recently used
-  this._length = 0 // number of items in the list
-  this._itemCount = 0
-}
-
-LRUCache.prototype.dump = function () {
-  var arr = []
-  var i = 0
-
-  for (var k = this._mru - 1; k >= 0 && i < this._itemCount; k--) if (this._lruList[k]) {
-    var hit = this._lruList[k]
-    if (!isStale(this, hit)) {
-      //Do not store staled hits
-      ++i
-      arr.push({
-        k: hit.key,
-        v: hit.value,
-        e: hit.now + (hit.maxAge || 0)
-      });
-    }
-  }
-  //arr has the most read first
-  return arr
-}
-
-LRUCache.prototype.dumpLru = function () {
-  return this._lruList
-}
-
-LRUCache.prototype.set = function (key, value, maxAge) {
-  maxAge = maxAge || this._maxAge
-  var now = maxAge ? Date.now() : 0
-  var len = this._lengthCalculator(value)
-
-  if (hOP(this._cache, key)) {
-    if (len > this._max) {
-      del(this, this._cache[key])
-      return false
-    }
-    // dispose of the old one before overwriting
-    if (this._dispose)
-      this._dispose(key, this._cache[key].value)
-
-    this._cache[key].now = now
-    this._cache[key].maxAge = maxAge
-    this._cache[key].value = value
-    this._length += (len - this._cache[key].length)
-    this._cache[key].length = len
-    this.get(key)
-
-    if (this._length > this._max)
-      trim(this)
-
-    return true
-  }
-
-  var hit = new Entry(key, value, this._mru++, len, now, maxAge)
-
-  // oversized objects fall out of cache automatically.
-  if (hit.length > this._max) {
-    if (this._dispose) this._dispose(key, value)
-    return false
-  }
-
-  this._length += hit.length
-  this._lruList[hit.lu] = this._cache[key] = hit
-  this._itemCount ++
-
-  if (this._length > this._max)
-    trim(this)
-
-  return true
-}
-
-LRUCache.prototype.has = function (key) {
-  if (!hOP(this._cache, key)) return false
-  var hit = this._cache[key]
-  if (isStale(this, hit)) {
-    return false
-  }
-  return true
-}
-
-LRUCache.prototype.get = function (key) {
-  return get(this, key, true)
-}
-
-LRUCache.prototype.peek = function (key) {
-  return get(this, key, false)
-}
-
-LRUCache.prototype.pop = function () {
-  var hit = this._lruList[this._lru]
-  del(this, hit)
-  return hit || null
-}
-
-LRUCache.prototype.del = function (key) {
-  del(this, this._cache[key])
-}
-
-LRUCache.prototype.load = function (arr) {
-  //reset the cache
-  this.reset();
-
-  var now = Date.now()
-  //A previous serialized cache has the most recent items first
-  for (var l = arr.length - 1; l >= 0; l-- ) {
-    var hit = arr[l]
-    var expiresAt = hit.e || 0
-    if (expiresAt === 0) {
-      //the item was created without expiration in a non aged cache
-      this.set(hit.k, hit.v)
-    } else {
-      var maxAge = expiresAt - now
-      //dont add already expired items
-      if (maxAge > 0) this.set(hit.k, hit.v, maxAge)
-    }
-  }
-}
-
-function get (self, key, doUse) {
-  var hit = self._cache[key]
-  if (hit) {
-    if (isStale(self, hit)) {
-      del(self, hit)
-      if (!self._allowStale) hit = undefined
-    } else {
-      if (doUse) use(self, hit)
-    }
-    if (hit) hit = hit.value
-  }
-  return hit
-}
-
-function isStale(self, hit) {
-  if (!hit || (!hit.maxAge && !self._maxAge)) return false
-  var stale = false;
-  var diff = Date.now() - hit.now
-  if (hit.maxAge) {
-    stale = diff > hit.maxAge
-  } else {
-    stale = self._maxAge && (diff > self._maxAge)
-  }
-  return stale;
-}
-
-function use (self, hit) {
-  shiftLU(self, hit)
-  hit.lu = self._mru ++
-  self._lruList[hit.lu] = hit
-}
-
-function trim (self) {
-  while (self._lru < self._mru && self._length > self._max)
-    del(self, self._lruList[self._lru])
-}
-
-function shiftLU (self, hit) {
-  delete self._lruList[ hit.lu ]
-  while (self._lru < self._mru && !self._lruList[self._lru]) self._lru ++
-}
-
-function del (self, hit) {
-  if (hit) {
-    if (self._dispose) self._dispose(hit.key, hit.value)
-    self._length -= hit.length
-    self._itemCount --
-    delete self._cache[ hit.key ]
-    shiftLU(self, hit)
-  }
-}
-
-// classy, since V8 prefers predictable objects.
-function Entry (key, value, lu, length, now, maxAge) {
-  this.key = key
-  this.value = value
-  this.lu = lu
-  this.length = length
-  this.now = now
-  if (maxAge) this.maxAge = maxAge
-}
-
-})()
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/package.json b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/package.json
deleted file mode 100644
index c3addff..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/package.json
+++ /dev/null
@@ -1,58 +0,0 @@
-{
-  "name": "lru-cache",
-  "description": "A cache object that deletes the least-recently-used items.",
-  "version": "2.7.0",
-  "author": {
-    "name": "Isaac Z. Schlueter",
-    "email": "i@izs.me"
-  },
-  "keywords": [
-    "mru",
-    "lru",
-    "cache"
-  ],
-  "scripts": {
-    "test": "tap test --gc"
-  },
-  "main": "lib/lru-cache.js",
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/isaacs/node-lru-cache.git"
-  },
-  "devDependencies": {
-    "tap": "^1.2.0",
-    "weak": ""
-  },
-  "license": "ISC",
-  "gitHead": "fc6ee93093f4e463e5946736d4c48adc013724d1",
-  "bugs": {
-    "url": "https://github.com/isaacs/node-lru-cache/issues"
-  },
-  "homepage": "https://github.com/isaacs/node-lru-cache#readme",
-  "_id": "lru-cache@2.7.0",
-  "_shasum": "aaa376a4cd970f9cebf5ec1909566ec034f07ee6",
-  "_from": "lru-cache@2",
-  "_npmVersion": "3.3.2",
-  "_nodeVersion": "4.0.0",
-  "_npmUser": {
-    "name": "isaacs",
-    "email": "isaacs@npmjs.com"
-  },
-  "dist": {
-    "shasum": "aaa376a4cd970f9cebf5ec1909566ec034f07ee6",
-    "tarball": "http://registry.npmjs.org/lru-cache/-/lru-cache-2.7.0.tgz"
-  },
-  "maintainers": [
-    {
-      "name": "isaacs",
-      "email": "isaacs@npmjs.com"
-    },
-    {
-      "name": "othiym23",
-      "email": "ogd@aoaioxxysz.net"
-    }
-  ],
-  "directories": {},
-  "_resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.0.tgz",
-  "readme": "ERROR: No README data found!"
-}
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/test/basic.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/test/basic.js
deleted file mode 100644
index b47225f..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/test/basic.js
+++ /dev/null
@@ -1,396 +0,0 @@
-var test = require("tap").test
-  , LRU = require("../")
-
-test("basic", function (t) {
-  var cache = new LRU({max: 10})
-  cache.set("key", "value")
-  t.equal(cache.get("key"), "value")
-  t.equal(cache.get("nada"), undefined)
-  t.equal(cache.length, 1)
-  t.equal(cache.max, 10)
-  t.end()
-})
-
-test("least recently set", function (t) {
-  var cache = new LRU(2)
-  cache.set("a", "A")
-  cache.set("b", "B")
-  cache.set("c", "C")
-  t.equal(cache.get("c"), "C")
-  t.equal(cache.get("b"), "B")
-  t.equal(cache.get("a"), undefined)
-  t.end()
-})
-
-test("lru recently gotten", function (t) {
-  var cache = new LRU(2)
-  cache.set("a", "A")
-  cache.set("b", "B")
-  cache.get("a")
-  cache.set("c", "C")
-  t.equal(cache.get("c"), "C")
-  t.equal(cache.get("b"), undefined)
-  t.equal(cache.get("a"), "A")
-  t.end()
-})
-
-test("del", function (t) {
-  var cache = new LRU(2)
-  cache.set("a", "A")
-  cache.del("a")
-  t.equal(cache.get("a"), undefined)
-  t.end()
-})
-
-test("max", function (t) {
-  var cache = new LRU(3)
-
-  // test changing the max, verify that the LRU items get dropped.
-  cache.max = 100
-  for (var i = 0; i < 100; i ++) cache.set(i, i)
-  t.equal(cache.length, 100)
-  for (var i = 0; i < 100; i ++) {
-    t.equal(cache.get(i), i)
-  }
-  cache.max = 3
-  t.equal(cache.length, 3)
-  for (var i = 0; i < 97; i ++) {
-    t.equal(cache.get(i), undefined)
-  }
-  for (var i = 98; i < 100; i ++) {
-    t.equal(cache.get(i), i)
-  }
-
-  // now remove the max restriction, and try again.
-  cache.max = "hello"
-  for (var i = 0; i < 100; i ++) cache.set(i, i)
-  t.equal(cache.length, 100)
-  for (var i = 0; i < 100; i ++) {
-    t.equal(cache.get(i), i)
-  }
-  // should trigger an immediate resize
-  cache.max = 3
-  t.equal(cache.length, 3)
-  for (var i = 0; i < 97; i ++) {
-    t.equal(cache.get(i), undefined)
-  }
-  for (var i = 98; i < 100; i ++) {
-    t.equal(cache.get(i), i)
-  }
-  t.end()
-})
-
-test("reset", function (t) {
-  var cache = new LRU(10)
-  cache.set("a", "A")
-  cache.set("b", "B")
-  cache.reset()
-  t.equal(cache.length, 0)
-  t.equal(cache.max, 10)
-  t.equal(cache.get("a"), undefined)
-  t.equal(cache.get("b"), undefined)
-  t.end()
-})
-
-
-test("basic with weighed length", function (t) {
-  var cache = new LRU({
-    max: 100,
-    length: function (item) { return item.size }
-  })
-  cache.set("key", {val: "value", size: 50})
-  t.equal(cache.get("key").val, "value")
-  t.equal(cache.get("nada"), undefined)
-  t.equal(cache.lengthCalculator(cache.get("key")), 50)
-  t.equal(cache.length, 50)
-  t.equal(cache.max, 100)
-  t.end()
-})
-
-
-test("weighed length item too large", function (t) {
-  var cache = new LRU({
-    max: 10,
-    length: function (item) { return item.size }
-  })
-  t.equal(cache.max, 10)
-
-  // should fall out immediately
-  cache.set("key", {val: "value", size: 50})
-
-  t.equal(cache.length, 0)
-  t.equal(cache.get("key"), undefined)
-  t.end()
-})
-
-test("least recently set with weighed length", function (t) {
-  var cache = new LRU({
-    max:8,
-    length: function (item) { return item.length }
-  })
-  cache.set("a", "A")
-  cache.set("b", "BB")
-  cache.set("c", "CCC")
-  cache.set("d", "DDDD")
-  t.equal(cache.get("d"), "DDDD")
-  t.equal(cache.get("c"), "CCC")
-  t.equal(cache.get("b"), undefined)
-  t.equal(cache.get("a"), undefined)
-  t.end()
-})
-
-test("lru recently gotten with weighed length", function (t) {
-  var cache = new LRU({
-    max: 8,
-    length: function (item) { return item.length }
-  })
-  cache.set("a", "A")
-  cache.set("b", "BB")
-  cache.set("c", "CCC")
-  cache.get("a")
-  cache.get("b")
-  cache.set("d", "DDDD")
-  t.equal(cache.get("c"), undefined)
-  t.equal(cache.get("d"), "DDDD")
-  t.equal(cache.get("b"), "BB")
-  t.equal(cache.get("a"), "A")
-  t.end()
-})
-
-test("lru recently updated with weighed length", function (t) {
-  var cache = new LRU({
-    max: 8,
-    length: function (item) { return item.length }
-  })
-  cache.set("a", "A")
-  cache.set("b", "BB")
-  cache.set("c", "CCC")
-  t.equal(cache.length, 6) //CCC BB A
-  cache.set("a", "+A")
-  t.equal(cache.length, 7) //+A CCC BB
-  cache.set("b", "++BB")
-  t.equal(cache.length, 6) //++BB +A
-  t.equal(cache.get("c"), undefined)
-
-  cache.set("c", "oversized")
-  t.equal(cache.length, 6) //++BB +A
-  t.equal(cache.get("c"), undefined)
-
-  cache.set("a", "oversized")
-  t.equal(cache.length, 4) //++BB
-  t.equal(cache.get("a"), undefined)
-  t.equal(cache.get("b"), "++BB")
-  t.end()
-})
-
-test("set returns proper booleans", function(t) {
-  var cache = new LRU({
-    max: 5,
-    length: function (item) { return item.length }
-  })
-
-  t.equal(cache.set("a", "A"), true)
-
-  // should return false for max exceeded
-  t.equal(cache.set("b", "donuts"), false)
-
-  t.equal(cache.set("b", "B"), true)
-  t.equal(cache.set("c", "CCCC"), true)
-  t.end()
-})
-
-test("drop the old items", function(t) {
-  var cache = new LRU({
-    max: 5,
-    maxAge: 50
-  })
-
-  cache.set("a", "A")
-
-  setTimeout(function () {
-    cache.set("b", "b")
-    t.equal(cache.get("a"), "A")
-  }, 25)
-
-  setTimeout(function () {
-    cache.set("c", "C")
-    // timed out
-    t.notOk(cache.get("a"))
-  }, 60 + 25)
-
-  setTimeout(function () {
-    t.notOk(cache.get("b"))
-    t.equal(cache.get("c"), "C")
-  }, 90)
-
-  setTimeout(function () {
-    t.notOk(cache.get("c"))
-    t.end()
-  }, 155)
-})
-
-test("individual item can have it's own maxAge", function(t) {
-  var cache = new LRU({
-    max: 5,
-    maxAge: 50
-  })
-
-  cache.set("a", "A", 20)
-  setTimeout(function () {
-    t.notOk(cache.get("a"))
-    t.end()
-  }, 25)
-})
-
-test("individual item can have it's own maxAge > cache's", function(t) {
-  var cache = new LRU({
-    max: 5,
-    maxAge: 20
-  })
-
-  cache.set("a", "A", 50)
-  setTimeout(function () {
-    t.equal(cache.get("a"), "A")
-    t.end()
-  }, 25)
-})
-
-test("disposal function", function(t) {
-  var disposed = false
-  var cache = new LRU({
-    max: 1,
-    dispose: function (k, n) {
-      disposed = n
-    }
-  })
-
-  cache.set(1, 1)
-  cache.set(2, 2)
-  t.equal(disposed, 1)
-  cache.set(3, 3)
-  t.equal(disposed, 2)
-  cache.reset()
-  t.equal(disposed, 3)
-  t.end()
-})
-
-test("disposal function on too big of item", function(t) {
-  var disposed = false
-  var cache = new LRU({
-    max: 1,
-    length: function (k) {
-      return k.length
-    },
-    dispose: function (k, n) {
-      disposed = n
-    }
-  })
-  var obj = [ 1, 2 ]
-
-  t.equal(disposed, false)
-  cache.set("obj", obj)
-  t.equal(disposed, obj)
-  t.end()
-})
-
-test("has()", function(t) {
-  var cache = new LRU({
-    max: 1,
-    maxAge: 10
-  })
-
-  cache.set('foo', 'bar')
-  t.equal(cache.has('foo'), true)
-  cache.set('blu', 'baz')
-  t.equal(cache.has('foo'), false)
-  t.equal(cache.has('blu'), true)
-  setTimeout(function() {
-    t.equal(cache.has('blu'), false)
-    t.end()
-  }, 15)
-})
-
-test("stale", function(t) {
-  var cache = new LRU({
-    maxAge: 10,
-    stale: true
-  })
-
-  cache.set('foo', 'bar')
-  t.equal(cache.get('foo'), 'bar')
-  t.equal(cache.has('foo'), true)
-  setTimeout(function() {
-    t.equal(cache.has('foo'), false)
-    t.equal(cache.get('foo'), 'bar')
-    t.equal(cache.get('foo'), undefined)
-    t.end()
-  }, 15)
-})
-
-test("lru update via set", function(t) {
-  var cache = LRU({ max: 2 });
-
-  cache.set('foo', 1);
-  cache.set('bar', 2);
-  cache.del('bar');
-  cache.set('baz', 3);
-  cache.set('qux', 4);
-
-  t.equal(cache.get('foo'), undefined)
-  t.equal(cache.get('bar'), undefined)
-  t.equal(cache.get('baz'), 3)
-  t.equal(cache.get('qux'), 4)
-  t.end()
-})
-
-test("least recently set w/ peek", function (t) {
-  var cache = new LRU(2)
-  cache.set("a", "A")
-  cache.set("b", "B")
-  t.equal(cache.peek("a"), "A")
-  cache.set("c", "C")
-  t.equal(cache.get("c"), "C")
-  t.equal(cache.get("b"), "B")
-  t.equal(cache.get("a"), undefined)
-  t.end()
-})
-
-test("pop the least used item", function (t) {
-  var cache = new LRU(3)
-  , last
-
-  cache.set("a", "A")
-  cache.set("b", "B")
-  cache.set("c", "C")
-
-  t.equal(cache.length, 3)
-  t.equal(cache.max, 3)
-
-  // Ensure we pop a, c, b
-  cache.get("b", "B")
-
-  last = cache.pop()
-  t.equal(last.key, "a")
-  t.equal(last.value, "A")
-  t.equal(cache.length, 2)
-  t.equal(cache.max, 3)
-
-  last = cache.pop()
-  t.equal(last.key, "c")
-  t.equal(last.value, "C")
-  t.equal(cache.length, 1)
-  t.equal(cache.max, 3)
-
-  last = cache.pop()
-  t.equal(last.key, "b")
-  t.equal(last.value, "B")
-  t.equal(cache.length, 0)
-  t.equal(cache.max, 3)
-
-  last = cache.pop()
-  t.equal(last, null)
-  t.equal(cache.length, 0)
-  t.equal(cache.max, 3)
-
-  t.end()
-})
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/test/foreach.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/test/foreach.js
deleted file mode 100644
index 4190417..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/test/foreach.js
+++ /dev/null
@@ -1,120 +0,0 @@
-var test = require('tap').test
-var LRU = require('../')
-
-test('forEach', function (t) {
-  var l = new LRU(5)
-  for (var i = 0; i < 10; i ++) {
-    l.set(i.toString(), i.toString(2))
-  }
-
-  var i = 9
-  l.forEach(function (val, key, cache) {
-    t.equal(cache, l)
-    t.equal(key, i.toString())
-    t.equal(val, i.toString(2))
-    i -= 1
-  })
-
-  // get in order of most recently used
-  l.get(6)
-  l.get(8)
-
-  var order = [ 8, 6, 9, 7, 5 ]
-  var i = 0
-
-  l.forEach(function (val, key, cache) {
-    var j = order[i ++]
-    t.equal(cache, l)
-    t.equal(key, j.toString())
-    t.equal(val, j.toString(2))
-  })
-  t.equal(i, order.length);
-
-  t.end()
-})
-
-test('keys() and values()', function (t) {
-  var l = new LRU(5)
-  for (var i = 0; i < 10; i ++) {
-    l.set(i.toString(), i.toString(2))
-  }
-
-  t.similar(l.keys(), ['9', '8', '7', '6', '5'])
-  t.similar(l.values(), ['1001', '1000', '111', '110', '101'])
-
-  // get in order of most recently used
-  l.get(6)
-  l.get(8)
-
-  t.similar(l.keys(), ['8', '6', '9', '7', '5'])
-  t.similar(l.values(), ['1000', '110', '1001', '111', '101'])
-
-  t.end()
-})
-
-test('all entries are iterated over', function(t) {
-  var l = new LRU(5)
-  for (var i = 0; i < 10; i ++) {
-    l.set(i.toString(), i.toString(2))
-  }
-
-  var i = 0
-  l.forEach(function (val, key, cache) {
-    if (i > 0) {
-      cache.del(key)
-    }
-    i += 1
-  })
-
-  t.equal(i, 5)
-  t.equal(l.keys().length, 1)
-
-  t.end()
-})
-
-test('all stale entries are removed', function(t) {
-  var l = new LRU({ max: 5, maxAge: -5, stale: true })
-  for (var i = 0; i < 10; i ++) {
-    l.set(i.toString(), i.toString(2))
-  }
-
-  var i = 0
-  l.forEach(function () {
-    i += 1
-  })
-
-  t.equal(i, 5)
-  t.equal(l.keys().length, 0)
-
-  t.end()
-})
-
-test('expires', function (t) {
-  var l = new LRU({
-    max: 10,
-    maxAge: 50
-  })
-  for (var i = 0; i < 10; i++) {
-    l.set(i.toString(), i.toString(2), ((i % 2) ? 25 : undefined))
-  }
-
-  var i = 0
-  var order = [ 8, 6, 4, 2, 0 ]
-  setTimeout(function () {
-    l.forEach(function (val, key, cache) {
-      var j = order[i++]
-      t.equal(cache, l)
-      t.equal(key, j.toString())
-      t.equal(val, j.toString(2))
-    })
-    t.equal(i, order.length);
-
-    setTimeout(function () {
-      var count = 0;
-      l.forEach(function (val, key, cache) { count++; })
-      t.equal(0, count);
-      t.end()
-    }, 25)
-
-  }, 26)
-})
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/test/memory-leak.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/test/memory-leak.js
deleted file mode 100644
index b5912f6..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/test/memory-leak.js
+++ /dev/null
@@ -1,51 +0,0 @@
-#!/usr/bin/env node --expose_gc
-
-
-var weak = require('weak');
-var test = require('tap').test
-var LRU = require('../')
-var l = new LRU({ max: 10 })
-var refs = 0
-function X() {
-  refs ++
-  weak(this, deref)
-}
-
-function deref() {
-  refs --
-}
-
-test('no leaks', function (t) {
-  // fill up the cache
-  for (var i = 0; i < 100; i++) {
-    l.set(i, new X);
-    // throw some gets in there, too.
-    if (i % 2 === 0)
-      l.get(i / 2)
-  }
-
-  gc()
-
-  var start = process.memoryUsage()
-
-  // capture the memory
-  var startRefs = refs
-
-  // do it again, but more
-  for (var i = 0; i < 10000; i++) {
-    l.set(i, new X);
-    // throw some gets in there, too.
-    if (i % 2 === 0)
-      l.get(i / 2)
-  }
-
-  gc()
-
-  var end = process.memoryUsage()
-  t.equal(refs, startRefs, 'no leaky refs')
-
-  console.error('start: %j\n' +
-                'end:   %j', start, end);
-  t.pass();
-  t.end();
-})
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/test/serialize.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/test/serialize.js
deleted file mode 100644
index 1094194..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/test/serialize.js
+++ /dev/null
@@ -1,216 +0,0 @@
-var test = require('tap').test
-var LRU = require('../')
-
-test('dump', function (t) {
-  var cache = new LRU()
-
-  t.equal(cache.dump().length, 0, "nothing in dump for empty cache")
-
-  cache.set("a", "A")
-  cache.set("b", "B")
-  t.deepEqual(cache.dump(), [
-    { k: "b", v: "B", e: 0 },
-    { k: "a", v: "A", e: 0 }
-  ])
-
-  cache.set("a", "A");
-  t.deepEqual(cache.dump(), [
-    { k: "a", v: "A", e: 0 },
-    { k: "b", v: "B", e: 0 }
-  ])
-
-  cache.get("b");
-  t.deepEqual(cache.dump(), [
-    { k: "b", v: "B", e: 0 },
-    { k: "a", v: "A", e: 0 }
-  ])
-
-  cache.del("a");
-  t.deepEqual(cache.dump(), [
-    { k: "b", v: "B",  e: 0 }
-  ])
-
-  t.end()
-})
-
-test("do not dump stale items", function(t) {
-  var cache = new LRU({
-    max: 5,
-    maxAge: 50
-  })
-
-  //expires at 50
-  cache.set("a", "A")
-
-  setTimeout(function () {
-    //expires at 75
-    cache.set("b", "B")
-    var s = cache.dump()
-    t.equal(s.length, 2)
-    t.equal(s[0].k, "b")
-    t.equal(s[1].k, "a")
-  }, 25)
-
-  setTimeout(function () {
-    //expires at 110
-    cache.set("c", "C")
-    var s = cache.dump()
-    t.equal(s.length, 2)
-    t.equal(s[0].k, "c")
-    t.equal(s[1].k, "b")
-  }, 60)
-
-  setTimeout(function () {
-    //expires at 130
-    cache.set("d", "D", 40)
-    var s = cache.dump()
-    t.equal(s.length, 2)
-    t.equal(s[0].k, "d")
-    t.equal(s[1].k, "c")
-  }, 90)
-
-  setTimeout(function () {
-    var s = cache.dump()
-    t.equal(s.length, 1)
-    t.equal(s[0].k, "d")
-  }, 120)
-
-  setTimeout(function () {
-    var s = cache.dump()
-    t.deepEqual(s, [])
-    t.end()
-  }, 155)
-})
-
-test("load basic cache", function(t) {
-  var cache = new LRU(),
-      copy = new LRU()
-
-  cache.set("a", "A")
-  cache.set("b", "B")
-
-  copy.load(cache.dump())
-  t.deepEquals(cache.dump(), copy.dump())
-
-  t.end()
-})
-
-
-test("load staled cache", function(t) {
-  var cache = new LRU({maxAge: 50}),
-      copy = new LRU({maxAge: 50}),
-      arr
-
-  //expires at 50
-  cache.set("a", "A")
-  setTimeout(function () {
-    //expires at 80
-    cache.set("b", "B")
-    arr = cache.dump()
-    t.equal(arr.length, 2)
-  }, 30)
-
-  setTimeout(function () {
-    copy.load(arr)
-    t.equal(copy.get("a"), undefined)
-    t.equal(copy.get("b"), "B")
-  }, 60)
-
-  setTimeout(function () {
-    t.equal(copy.get("b"), undefined)
-    t.end()
-  }, 90)
-})
-
-test("load to other size cache", function(t) {
-  var cache = new LRU({max: 2}),
-      copy = new LRU({max: 1})
-
-  cache.set("a", "A")
-  cache.set("b", "B")
-
-  copy.load(cache.dump())
-  t.equal(copy.get("a"), undefined)
-  t.equal(copy.get("b"), "B")
-
-  //update the last read from original cache
-  cache.get("a")
-  copy.load(cache.dump())
-  t.equal(copy.get("a"), "A")
-  t.equal(copy.get("b"), undefined)
-
-  t.end()
-})
-
-
-test("load to other age cache", function(t) {
-  var cache = new LRU({maxAge: 50}),
-      aged = new LRU({maxAge: 100}),
-      simple = new LRU(),
-      arr,
-      expired
-
-  //created at 0
-  //a would be valid till 0 + 50
-  cache.set("a", "A")
-  setTimeout(function () {
-    //created at 20
-    //b would be valid till 20 + 50
-    cache.set("b", "B")
-    //b would be valid till 20 + 70
-    cache.set("c", "C", 70)
-    arr = cache.dump()
-    t.equal(arr.length, 3)
-  }, 20)
-
-  setTimeout(function () {
-    t.equal(cache.get("a"), undefined)
-    t.equal(cache.get("b"), "B")
-    t.equal(cache.get("c"), "C")
-
-    aged.load(arr)
-    t.equal(aged.get("a"), undefined)
-    t.equal(aged.get("b"), "B")
-    t.equal(aged.get("c"), "C")
-
-    simple.load(arr)
-    t.equal(simple.get("a"), undefined)
-    t.equal(simple.get("b"), "B")
-    t.equal(simple.get("c"), "C")
-  }, 60)
-
-  setTimeout(function () {
-    t.equal(cache.get("a"), undefined)
-    t.equal(cache.get("b"), undefined)
-    t.equal(cache.get("c"), "C")
-
-    aged.load(arr)
-    t.equal(aged.get("a"), undefined)
-    t.equal(aged.get("b"), undefined)
-    t.equal(aged.get("c"), "C")
-
-    simple.load(arr)
-    t.equal(simple.get("a"), undefined)
-    t.equal(simple.get("b"), undefined)
-    t.equal(simple.get("c"), "C")
-  }, 80)
-
-  setTimeout(function () {
-    t.equal(cache.get("a"), undefined)
-    t.equal(cache.get("b"), undefined)
-    t.equal(cache.get("c"), undefined)
-
-    aged.load(arr)
-    t.equal(aged.get("a"), undefined)
-    t.equal(aged.get("b"), undefined)
-    t.equal(aged.get("c"), undefined)
-
-    simple.load(arr)
-    t.equal(simple.get("a"), undefined)
-    t.equal(simple.get("b"), undefined)
-    t.equal(simple.get("c"), undefined)
-    t.end()
-  }, 100)
-
-})
-
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/node_modules/minimatch/node_modules/sigmund/LICENSE b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/node_modules/minimatch/node_modules/sigmund/LICENSE
deleted file mode 100644
index 19129e3..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/node_modules/minimatch/node_modules/sigmund/LICENSE
+++ /dev/null
@@ -1,15 +0,0 @@
-The ISC License
-
-Copyright (c) Isaac Z. Schlueter and Contributors
-
-Permission to use, copy, modify, and/or distribute this software for any
-purpose with or without fee is hereby granted, provided that the above
-copyright notice and this permission notice appear in all copies.
-
-THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
-WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
-ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
-ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
-IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/node_modules/minimatch/node_modules/sigmund/README.md b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/node_modules/minimatch/node_modules/sigmund/README.md
deleted file mode 100644
index 25a38a5..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/node_modules/minimatch/node_modules/sigmund/README.md
+++ /dev/null
@@ -1,53 +0,0 @@
-# sigmund
-
-Quick and dirty signatures for Objects.
-
-This is like a much faster `deepEquals` comparison, which returns a
-string key suitable for caches and the like.
-
-## Usage
-
-```javascript
-function doSomething (someObj) {
-  var key = sigmund(someObj, maxDepth) // max depth defaults to 10
-  var cached = cache.get(key)
-  if (cached) return cached
-
-  var result = expensiveCalculation(someObj)
-  cache.set(key, result)
-  return result
-}
-```
-
-The resulting key will be as unique and reproducible as calling
-`JSON.stringify` or `util.inspect` on the object, but is much faster.
-In order to achieve this speed, some differences are glossed over.
-For example, the object `{0:'foo'}` will be treated identically to the
-array `['foo']`.
-
-Also, just as there is no way to summon the soul from the scribblings
-of a cocaine-addled psychoanalyst, there is no way to revive the object
-from the signature string that sigmund gives you.  In fact, it's
-barely even readable.
-
-As with `util.inspect` and `JSON.stringify`, larger objects will
-produce larger signature strings.
-
-Because sigmund is a bit less strict than the more thorough
-alternatives, the strings will be shorter, and also there is a
-slightly higher chance for collisions.  For example, these objects
-have the same signature:
-
-    var obj1 = {a:'b',c:/def/,g:['h','i',{j:'',k:'l'}]}
-    var obj2 = {a:'b',c:'/def/',g:['h','i','{jkl']}
-
-Like a good Freudian, sigmund is most effective when you already have
-some understanding of what you're looking for.  It can help you help
-yourself, but you must be willing to do some work as well.
-
-Cycles are handled, and cyclical objects are silently omitted (though
-the key is included in the signature output.)
-
-The second argument is the maximum depth, which defaults to 10,
-because that is the maximum object traversal depth covered by most
-insurance carriers.
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/node_modules/minimatch/node_modules/sigmund/bench.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/node_modules/minimatch/node_modules/sigmund/bench.js
deleted file mode 100644
index 5acfd6d..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/node_modules/minimatch/node_modules/sigmund/bench.js
+++ /dev/null
@@ -1,283 +0,0 @@
-// different ways to id objects
-// use a req/res pair, since it's crazy deep and cyclical
-
-// sparseFE10 and sigmund are usually pretty close, which is to be expected,
-// since they are essentially the same algorithm, except that sigmund handles
-// regular expression objects properly.
-
-
-var http = require('http')
-var util = require('util')
-var sigmund = require('./sigmund.js')
-var sreq, sres, creq, cres, test
-
-http.createServer(function (q, s) {
-  sreq = q
-  sres = s
-  sres.end('ok')
-  this.close(function () { setTimeout(function () {
-    start()
-  }, 200) })
-}).listen(1337, function () {
-  creq = http.get({ port: 1337 })
-  creq.on('response', function (s) { cres = s })
-})
-
-function start () {
-  test = [sreq, sres, creq, cres]
-  // test = sreq
-  // sreq.sres = sres
-  // sreq.creq = creq
-  // sreq.cres = cres
-
-  for (var i in exports.compare) {
-    console.log(i)
-    var hash = exports.compare[i]()
-    console.log(hash)
-    console.log(hash.length)
-    console.log('')
-  }
-
-  require('bench').runMain()
-}
-
-function customWs (obj, md, d) {
-  d = d || 0
-  var to = typeof obj
-  if (to === 'undefined' || to === 'function' || to === null) return ''
-  if (d > md || !obj || to !== 'object') return ('' + obj).replace(/[\n ]+/g, '')
-
-  if (Array.isArray(obj)) {
-    return obj.map(function (i, _, __) {
-      return customWs(i, md, d + 1)
-    }).reduce(function (a, b) { return a + b }, '')
-  }
-
-  var keys = Object.keys(obj)
-  return keys.map(function (k, _, __) {
-    return k + ':' + customWs(obj[k], md, d + 1)
-  }).reduce(function (a, b) { return a + b }, '')
-}
-
-function custom (obj, md, d) {
-  d = d || 0
-  var to = typeof obj
-  if (to === 'undefined' || to === 'function' || to === null) return ''
-  if (d > md || !obj || to !== 'object') return '' + obj
-
-  if (Array.isArray(obj)) {
-    return obj.map(function (i, _, __) {
-      return custom(i, md, d + 1)
-    }).reduce(function (a, b) { return a + b }, '')
-  }
-
-  var keys = Object.keys(obj)
-  return keys.map(function (k, _, __) {
-    return k + ':' + custom(obj[k], md, d + 1)
-  }).reduce(function (a, b) { return a + b }, '')
-}
-
-function sparseFE2 (obj, maxDepth) {
-  var seen = []
-  var soFar = ''
-  function ch (v, depth) {
-    if (depth > maxDepth) return
-    if (typeof v === 'function' || typeof v === 'undefined') return
-    if (typeof v !== 'object' || !v) {
-      soFar += v
-      return
-    }
-    if (seen.indexOf(v) !== -1 || depth === maxDepth) return
-    seen.push(v)
-    soFar += '{'
-    Object.keys(v).forEach(function (k, _, __) {
-      // pseudo-private values.  skip those.
-      if (k.charAt(0) === '_') return
-      var to = typeof v[k]
-      if (to === 'function' || to === 'undefined') return
-      soFar += k + ':'
-      ch(v[k], depth + 1)
-    })
-    soFar += '}'
-  }
-  ch(obj, 0)
-  return soFar
-}
-
-function sparseFE (obj, maxDepth) {
-  var seen = []
-  var soFar = ''
-  function ch (v, depth) {
-    if (depth > maxDepth) return
-    if (typeof v === 'function' || typeof v === 'undefined') return
-    if (typeof v !== 'object' || !v) {
-      soFar += v
-      return
-    }
-    if (seen.indexOf(v) !== -1 || depth === maxDepth) return
-    seen.push(v)
-    soFar += '{'
-    Object.keys(v).forEach(function (k, _, __) {
-      // pseudo-private values.  skip those.
-      if (k.charAt(0) === '_') return
-      var to = typeof v[k]
-      if (to === 'function' || to === 'undefined') return
-      soFar += k
-      ch(v[k], depth + 1)
-    })
-  }
-  ch(obj, 0)
-  return soFar
-}
-
-function sparse (obj, maxDepth) {
-  var seen = []
-  var soFar = ''
-  function ch (v, depth) {
-    if (depth > maxDepth) return
-    if (typeof v === 'function' || typeof v === 'undefined') return
-    if (typeof v !== 'object' || !v) {
-      soFar += v
-      return
-    }
-    if (seen.indexOf(v) !== -1 || depth === maxDepth) return
-    seen.push(v)
-    soFar += '{'
-    for (var k in v) {
-      // pseudo-private values.  skip those.
-      if (k.charAt(0) === '_') continue
-      var to = typeof v[k]
-      if (to === 'function' || to === 'undefined') continue
-      soFar += k
-      ch(v[k], depth + 1)
-    }
-  }
-  ch(obj, 0)
-  return soFar
-}
-
-function noCommas (obj, maxDepth) {
-  var seen = []
-  var soFar = ''
-  function ch (v, depth) {
-    if (depth > maxDepth) return
-    if (typeof v === 'function' || typeof v === 'undefined') return
-    if (typeof v !== 'object' || !v) {
-      soFar += v
-      return
-    }
-    if (seen.indexOf(v) !== -1 || depth === maxDepth) return
-    seen.push(v)
-    soFar += '{'
-    for (var k in v) {
-      // pseudo-private values.  skip those.
-      if (k.charAt(0) === '_') continue
-      var to = typeof v[k]
-      if (to === 'function' || to === 'undefined') continue
-      soFar += k + ':'
-      ch(v[k], depth + 1)
-    }
-    soFar += '}'
-  }
-  ch(obj, 0)
-  return soFar
-}
-
-
-function flatten (obj, maxDepth) {
-  var seen = []
-  var soFar = ''
-  function ch (v, depth) {
-    if (depth > maxDepth) return
-    if (typeof v === 'function' || typeof v === 'undefined') return
-    if (typeof v !== 'object' || !v) {
-      soFar += v
-      return
-    }
-    if (seen.indexOf(v) !== -1 || depth === maxDepth) return
-    seen.push(v)
-    soFar += '{'
-    for (var k in v) {
-      // pseudo-private values.  skip those.
-      if (k.charAt(0) === '_') continue
-      var to = typeof v[k]
-      if (to === 'function' || to === 'undefined') continue
-      soFar += k + ':'
-      ch(v[k], depth + 1)
-      soFar += ','
-    }
-    soFar += '}'
-  }
-  ch(obj, 0)
-  return soFar
-}
-
-exports.compare =
-{
-  // 'custom 2': function () {
-  //   return custom(test, 2, 0)
-  // },
-  // 'customWs 2': function () {
-  //   return customWs(test, 2, 0)
-  // },
-  'JSON.stringify (guarded)': function () {
-    var seen = []
-    return JSON.stringify(test, function (k, v) {
-      if (typeof v !== 'object' || !v) return v
-      if (seen.indexOf(v) !== -1) return undefined
-      seen.push(v)
-      return v
-    })
-  },
-
-  'flatten 10': function () {
-    return flatten(test, 10)
-  },
-
-  // 'flattenFE 10': function () {
-  //   return flattenFE(test, 10)
-  // },
-
-  'noCommas 10': function () {
-    return noCommas(test, 10)
-  },
-
-  'sparse 10': function () {
-    return sparse(test, 10)
-  },
-
-  'sparseFE 10': function () {
-    return sparseFE(test, 10)
-  },
-
-  'sparseFE2 10': function () {
-    return sparseFE2(test, 10)
-  },
-
-  sigmund: function() {
-    return sigmund(test, 10)
-  },
-
-
-  // 'util.inspect 1': function () {
-  //   return util.inspect(test, false, 1, false)
-  // },
-  // 'util.inspect undefined': function () {
-  //   util.inspect(test)
-  // },
-  // 'util.inspect 2': function () {
-  //   util.inspect(test, false, 2, false)
-  // },
-  // 'util.inspect 3': function () {
-  //   util.inspect(test, false, 3, false)
-  // },
-  // 'util.inspect 4': function () {
-  //   util.inspect(test, false, 4, false)
-  // },
-  // 'util.inspect Infinity': function () {
-  //   util.inspect(test, false, Infinity, false)
-  // }
-}
-
-/** results
-**/
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/node_modules/minimatch/node_modules/sigmund/package.json b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/node_modules/minimatch/node_modules/sigmund/package.json
deleted file mode 100644
index a0a65d5..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/node_modules/minimatch/node_modules/sigmund/package.json
+++ /dev/null
@@ -1,60 +0,0 @@
-{
-  "name": "sigmund",
-  "version": "1.0.1",
-  "description": "Quick and dirty signatures for Objects.",
-  "main": "sigmund.js",
-  "directories": {
-    "test": "test"
-  },
-  "dependencies": {},
-  "devDependencies": {
-    "tap": "~0.3.0"
-  },
-  "scripts": {
-    "test": "tap test/*.js",
-    "bench": "node bench.js"
-  },
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/isaacs/sigmund.git"
-  },
-  "keywords": [
-    "object",
-    "signature",
-    "key",
-    "data",
-    "psychoanalysis"
-  ],
-  "author": {
-    "name": "Isaac Z. Schlueter",
-    "email": "i@izs.me",
-    "url": "http://blog.izs.me/"
-  },
-  "license": "ISC",
-  "gitHead": "527f97aa5bb253d927348698c0cd3bb267d098c6",
-  "bugs": {
-    "url": "https://github.com/isaacs/sigmund/issues"
-  },
-  "homepage": "https://github.com/isaacs/sigmund#readme",
-  "_id": "sigmund@1.0.1",
-  "_shasum": "3ff21f198cad2175f9f3b781853fd94d0d19b590",
-  "_from": "sigmund@~1.0.0",
-  "_npmVersion": "2.10.0",
-  "_nodeVersion": "2.0.1",
-  "_npmUser": {
-    "name": "isaacs",
-    "email": "isaacs@npmjs.com"
-  },
-  "dist": {
-    "shasum": "3ff21f198cad2175f9f3b781853fd94d0d19b590",
-    "tarball": "http://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz"
-  },
-  "maintainers": [
-    {
-      "name": "isaacs",
-      "email": "i@izs.me"
-    }
-  ],
-  "_resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz",
-  "readme": "ERROR: No README data found!"
-}
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/node_modules/minimatch/node_modules/sigmund/sigmund.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/node_modules/minimatch/node_modules/sigmund/sigmund.js
deleted file mode 100644
index 82c7ab8..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/node_modules/minimatch/node_modules/sigmund/sigmund.js
+++ /dev/null
@@ -1,39 +0,0 @@
-module.exports = sigmund
-function sigmund (subject, maxSessions) {
-    maxSessions = maxSessions || 10;
-    var notes = [];
-    var analysis = '';
-    var RE = RegExp;
-
-    function psychoAnalyze (subject, session) {
-        if (session > maxSessions) return;
-
-        if (typeof subject === 'function' ||
-            typeof subject === 'undefined') {
-            return;
-        }
-
-        if (typeof subject !== 'object' || !subject ||
-            (subject instanceof RE)) {
-            analysis += subject;
-            return;
-        }
-
-        if (notes.indexOf(subject) !== -1 || session === maxSessions) return;
-
-        notes.push(subject);
-        analysis += '{';
-        Object.keys(subject).forEach(function (issue, _, __) {
-            // pseudo-private values.  skip those.
-            if (issue.charAt(0) === '_') return;
-            var to = typeof subject[issue];
-            if (to === 'function' || to === 'undefined') return;
-            analysis += issue;
-            psychoAnalyze(subject[issue], session + 1);
-        });
-    }
-    psychoAnalyze(subject, 0);
-    return analysis;
-}
-
-// vim: set softtabstop=4 shiftwidth=4:
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/node_modules/minimatch/node_modules/sigmund/test/basic.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/node_modules/minimatch/node_modules/sigmund/test/basic.js
deleted file mode 100644
index 50c53a1..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/node_modules/minimatch/node_modules/sigmund/test/basic.js
+++ /dev/null
@@ -1,24 +0,0 @@
-var test = require('tap').test
-var sigmund = require('../sigmund.js')
-
-
-// occasionally there are duplicates
-// that's an acceptable edge-case.  JSON.stringify and util.inspect
-// have some collision potential as well, though less, and collision
-// detection is expensive.
-var hash = '{abc/def/g{0h1i2{jkl'
-var obj1 = {a:'b',c:/def/,g:['h','i',{j:'',k:'l'}]}
-var obj2 = {a:'b',c:'/def/',g:['h','i','{jkl']}
-
-var obj3 = JSON.parse(JSON.stringify(obj1))
-obj3.c = /def/
-obj3.g[2].cycle = obj3
-var cycleHash = '{abc/def/g{0h1i2{jklcycle'
-
-test('basic', function (t) {
-    t.equal(sigmund(obj1), hash)
-    t.equal(sigmund(obj2), hash)
-    t.equal(sigmund(obj3), cycleHash)
-    t.end()
-})
-
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/node_modules/minimatch/package.json b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/node_modules/minimatch/package.json
deleted file mode 100644
index 0fe147d..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/node_modules/minimatch/package.json
+++ /dev/null
@@ -1,57 +0,0 @@
-{
-  "author": {
-    "name": "Isaac Z. Schlueter",
-    "email": "i@izs.me",
-    "url": "http://blog.izs.me"
-  },
-  "name": "minimatch",
-  "description": "a glob matcher in javascript",
-  "version": "0.3.0",
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/isaacs/minimatch.git"
-  },
-  "main": "minimatch.js",
-  "scripts": {
-    "test": "tap test/*.js"
-  },
-  "engines": {
-    "node": "*"
-  },
-  "dependencies": {
-    "lru-cache": "2",
-    "sigmund": "~1.0.0"
-  },
-  "devDependencies": {
-    "tap": ""
-  },
-  "license": {
-    "type": "MIT",
-    "url": "http://github.com/isaacs/minimatch/raw/master/LICENSE"
-  },
-  "bugs": {
-    "url": "https://github.com/isaacs/minimatch/issues"
-  },
-  "homepage": "https://github.com/isaacs/minimatch",
-  "_id": "minimatch@0.3.0",
-  "_shasum": "275d8edaac4f1bb3326472089e7949c8394699dd",
-  "_from": "minimatch@0.3",
-  "_npmVersion": "1.4.10",
-  "_npmUser": {
-    "name": "isaacs",
-    "email": "i@izs.me"
-  },
-  "maintainers": [
-    {
-      "name": "isaacs",
-      "email": "i@izs.me"
-    }
-  ],
-  "dist": {
-    "shasum": "275d8edaac4f1bb3326472089e7949c8394699dd",
-    "tarball": "http://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz"
-  },
-  "directories": {},
-  "_resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz",
-  "readme": "ERROR: No README data found!"
-}
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/node_modules/minimatch/test/basic.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/node_modules/minimatch/test/basic.js
deleted file mode 100644
index ae7ac73..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/node_modules/minimatch/test/basic.js
+++ /dev/null
@@ -1,399 +0,0 @@
-// http://www.bashcookbook.com/bashinfo/source/bash-1.14.7/tests/glob-test
-//
-// TODO: Some of these tests do very bad things with backslashes, and will
-// most likely fail badly on windows.  They should probably be skipped.
-
-var tap = require("tap")
-  , globalBefore = Object.keys(global)
-  , mm = require("../")
-  , files = [ "a", "b", "c", "d", "abc"
-            , "abd", "abe", "bb", "bcd"
-            , "ca", "cb", "dd", "de"
-            , "bdir/", "bdir/cfile"]
-  , next = files.concat([ "a-b", "aXb"
-                        , ".x", ".y" ])
-
-
-var patterns =
-  [ "http://www.bashcookbook.com/bashinfo/source/bash-1.14.7/tests/glob-test"
-  , ["a*", ["a", "abc", "abd", "abe"]]
-  , ["X*", ["X*"], {nonull: true}]
-
-  // allow null glob expansion
-  , ["X*", []]
-
-  // isaacs: Slightly different than bash/sh/ksh
-  // \\* is not un-escaped to literal "*" in a failed match,
-  // but it does make it get treated as a literal star
-  , ["\\*", ["\\*"], {nonull: true}]
-  , ["\\**", ["\\**"], {nonull: true}]
-  , ["\\*\\*", ["\\*\\*"], {nonull: true}]
-
-  , ["b*/", ["bdir/"]]
-  , ["c*", ["c", "ca", "cb"]]
-  , ["**", files]
-
-  , ["\\.\\./*/", ["\\.\\./*/"], {nonull: true}]
-  , ["s/\\..*//", ["s/\\..*//"], {nonull: true}]
-
-  , "legendary larry crashes bashes"
-  , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\\1/"
-    , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\\1/"], {nonull: true}]
-  , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\1/"
-    , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\1/"], {nonull: true}]
-
-  , "character classes"
-  , ["[a-c]b*", ["abc", "abd", "abe", "bb", "cb"]]
-  , ["[a-y]*[^c]", ["abd", "abe", "bb", "bcd",
-     "bdir/", "ca", "cb", "dd", "de"]]
-  , ["a*[^c]", ["abd", "abe"]]
-  , function () { files.push("a-b", "aXb") }
-  , ["a[X-]b", ["a-b", "aXb"]]
-  , function () { files.push(".x", ".y") }
-  , ["[^a-c]*", ["d", "dd", "de"]]
-  , function () { files.push("a*b/", "a*b/ooo") }
-  , ["a\\*b/*", ["a*b/ooo"]]
-  , ["a\\*?/*", ["a*b/ooo"]]
-  , ["*\\\\!*", [], {null: true}, ["echo !7"]]
-  , ["*\\!*", ["echo !7"], null, ["echo !7"]]
-  , ["*.\\*", ["r.*"], null, ["r.*"]]
-  , ["a[b]c", ["abc"]]
-  , ["a[\\b]c", ["abc"]]
-  , ["a?c", ["abc"]]
-  , ["a\\*c", [], {null: true}, ["abc"]]
-  , ["", [""], { null: true }, [""]]
-
-  , "http://www.opensource.apple.com/source/bash/bash-23/" +
-    "bash/tests/glob-test"
-  , function () { files.push("man/", "man/man1/", "man/man1/bash.1") }
-  , ["*/man*/bash.*", ["man/man1/bash.1"]]
-  , ["man/man1/bash.1", ["man/man1/bash.1"]]
-  , ["a***c", ["abc"], null, ["abc"]]
-  , ["a*****?c", ["abc"], null, ["abc"]]
-  , ["?*****??", ["abc"], null, ["abc"]]
-  , ["*****??", ["abc"], null, ["abc"]]
-  , ["?*****?c", ["abc"], null, ["abc"]]
-  , ["?***?****c", ["abc"], null, ["abc"]]
-  , ["?***?****?", ["abc"], null, ["abc"]]
-  , ["?***?****", ["abc"], null, ["abc"]]
-  , ["*******c", ["abc"], null, ["abc"]]
-  , ["*******?", ["abc"], null, ["abc"]]
-  , ["a*cd**?**??k", ["abcdecdhjk"], null, ["abcdecdhjk"]]
-  , ["a**?**cd**?**??k", ["abcdecdhjk"], null, ["abcdecdhjk"]]
-  , ["a**?**cd**?**??k***", ["abcdecdhjk"], null, ["abcdecdhjk"]]
-  , ["a**?**cd**?**??***k", ["abcdecdhjk"], null, ["abcdecdhjk"]]
-  , ["a**?**cd**?**??***k**", ["abcdecdhjk"], null, ["abcdecdhjk"]]
-  , ["a****c**?**??*****", ["abcdecdhjk"], null, ["abcdecdhjk"]]
-  , ["[-abc]", ["-"], null, ["-"]]
-  , ["[abc-]", ["-"], null, ["-"]]
-  , ["\\", ["\\"], null, ["\\"]]
-  , ["[\\\\]", ["\\"], null, ["\\"]]
-  , ["[[]", ["["], null, ["["]]
-  , ["[", ["["], null, ["["]]
-  , ["[*", ["[abc"], null, ["[abc"]]
-  , "a right bracket shall lose its special meaning and\n" +
-    "represent itself in a bracket expression if it occurs\n" +
-    "first in the list.  -- POSIX.2 2.8.3.2"
-  , ["[]]", ["]"], null, ["]"]]
-  , ["[]-]", ["]"], null, ["]"]]
-  , ["[a-\z]", ["p"], null, ["p"]]
-  , ["??**********?****?", [], { null: true }, ["abc"]]
-  , ["??**********?****c", [], { null: true }, ["abc"]]
-  , ["?************c****?****", [], { null: true }, ["abc"]]
-  , ["*c*?**", [], { null: true }, ["abc"]]
-  , ["a*****c*?**", [], { null: true }, ["abc"]]
-  , ["a********???*******", [], { null: true }, ["abc"]]
-  , ["[]", [], { null: true }, ["a"]]
-  , ["[abc", [], { null: true }, ["["]]
-
-  , "nocase tests"
-  , ["XYZ", ["xYz"], { nocase: true, null: true }
-    , ["xYz", "ABC", "IjK"]]
-  , ["ab*", ["ABC"], { nocase: true, null: true }
-    , ["xYz", "ABC", "IjK"]]
-  , ["[ia]?[ck]", ["ABC", "IjK"], { nocase: true, null: true }
-    , ["xYz", "ABC", "IjK"]]
-
-  // [ pattern, [matches], MM opts, files, TAP opts]
-  , "onestar/twostar"
-  , ["{/*,*}", [], {null: true}, ["/asdf/asdf/asdf"]]
-  , ["{/?,*}", ["/a", "bb"], {null: true}
-    , ["/a", "/b/b", "/a/b/c", "bb"]]
-
-  , "dots should not match unless requested"
-  , ["**", ["a/b"], {}, ["a/b", "a/.d", ".a/.d"]]
-
-  // .. and . can only match patterns starting with .,
-  // even when options.dot is set.
-  , function () {
-      files = ["a/./b", "a/../b", "a/c/b", "a/.d/b"]
-    }
-  , ["a/*/b", ["a/c/b", "a/.d/b"], {dot: true}]
-  , ["a/.*/b", ["a/./b", "a/../b", "a/.d/b"], {dot: true}]
-  , ["a/*/b", ["a/c/b"], {dot:false}]
-  , ["a/.*/b", ["a/./b", "a/../b", "a/.d/b"], {dot: false}]
-
-
-  // this also tests that changing the options needs
-  // to change the cache key, even if the pattern is
-  // the same!
-  , ["**", ["a/b","a/.d",".a/.d"], { dot: true }
-    , [ ".a/.d", "a/.d", "a/b"]]
-
-  , "paren sets cannot contain slashes"
-  , ["*(a/b)", ["*(a/b)"], {nonull: true}, ["a/b"]]
-
-  // brace sets trump all else.
-  //
-  // invalid glob pattern.  fails on bash4 and bsdglob.
-  // however, in this implementation, it's easier just
-  // to do the intuitive thing, and let brace-expansion
-  // actually come before parsing any extglob patterns,
-  // like the documentation seems to say.
-  //
-  // XXX: if anyone complains about this, either fix it
-  // or tell them to grow up and stop complaining.
-  //
-  // bash/bsdglob says this:
-  // , ["*(a|{b),c)}", ["*(a|{b),c)}"], {}, ["a", "ab", "ac", "ad"]]
-  // but we do this instead:
-  , ["*(a|{b),c)}", ["a", "ab", "ac"], {}, ["a", "ab", "ac", "ad"]]
-
-  // test partial parsing in the presence of comment/negation chars
-  , ["[!a*", ["[!ab"], {}, ["[!ab", "[ab"]]
-  , ["[#a*", ["[#ab"], {}, ["[#ab", "[ab"]]
-
-  // like: {a,b|c\\,d\\\|e} except it's unclosed, so it has to be escaped.
-  , ["+(a|*\\|c\\\\|d\\\\\\|e\\\\\\\\|f\\\\\\\\\\|g"
-    , ["+(a|b\\|c\\\\|d\\\\|e\\\\\\\\|f\\\\\\\\|g"]
-    , {}
-    , ["+(a|b\\|c\\\\|d\\\\|e\\\\\\\\|f\\\\\\\\|g", "a", "b\\c"]]
-
-
-  // crazy nested {,,} and *(||) tests.
-  , function () {
-      files = [ "a", "b", "c", "d"
-              , "ab", "ac", "ad"
-              , "bc", "cb"
-              , "bc,d", "c,db", "c,d"
-              , "d)", "(b|c", "*(b|c"
-              , "b|c", "b|cc", "cb|c"
-              , "x(a|b|c)", "x(a|c)"
-              , "(a|b|c)", "(a|c)"]
-    }
-  , ["*(a|{b,c})", ["a", "b", "c", "ab", "ac"]]
-  , ["{a,*(b|c,d)}", ["a","(b|c", "*(b|c", "d)"]]
-  // a
-  // *(b|c)
-  // *(b|d)
-  , ["{a,*(b|{c,d})}", ["a","b", "bc", "cb", "c", "d"]]
-  , ["*(a|{b|c,c})", ["a", "b", "c", "ab", "ac", "bc", "cb"]]
-
-
-  // test various flag settings.
-  , [ "*(a|{b|c,c})", ["x(a|b|c)", "x(a|c)", "(a|b|c)", "(a|c)"]
-    , { noext: true } ]
-  , ["a?b", ["x/y/acb", "acb/"], {matchBase: true}
-    , ["x/y/acb", "acb/", "acb/d/e", "x/y/acb/d"] ]
-  , ["#*", ["#a", "#b"], {nocomment: true}, ["#a", "#b", "c#d"]]
-
-
-  // begin channelling Boole and deMorgan...
-  , "negation tests"
-  , function () {
-      files = ["d", "e", "!ab", "!abc", "a!b", "\\!a"]
-    }
-
-  // anything that is NOT a* matches.
-  , ["!a*", ["\\!a", "d", "e", "!ab", "!abc"]]
-
-  // anything that IS !a* matches.
-  , ["!a*", ["!ab", "!abc"], {nonegate: true}]
-
-  // anything that IS a* matches
-  , ["!!a*", ["a!b"]]
-
-  // anything that is NOT !a* matches
-  , ["!\\!a*", ["a!b", "d", "e", "\\!a"]]
-
-  // negation nestled within a pattern
-  , function () {
-      files = [ "foo.js"
-              , "foo.bar"
-              // can't match this one without negative lookbehind.
-              , "foo.js.js"
-              , "blar.js"
-              , "foo."
-              , "boo.js.boo" ]
-    }
-  , ["*.!(js)", ["foo.bar", "foo.", "boo.js.boo"] ]
-
-  // https://github.com/isaacs/minimatch/issues/5
-  , function () {
-      files = [ 'a/b/.x/c'
-              , 'a/b/.x/c/d'
-              , 'a/b/.x/c/d/e'
-              , 'a/b/.x'
-              , 'a/b/.x/'
-              , 'a/.x/b'
-              , '.x'
-              , '.x/'
-              , '.x/a'
-              , '.x/a/b'
-              , 'a/.x/b/.x/c'
-              , '.x/.x' ]
-  }
-  , ["**/.x/**", [ '.x/'
-                 , '.x/a'
-                 , '.x/a/b'
-                 , 'a/.x/b'
-                 , 'a/b/.x/'
-                 , 'a/b/.x/c'
-                 , 'a/b/.x/c/d'
-                 , 'a/b/.x/c/d/e' ] ]
-
-  ]
-
-var regexps =
-  [ '/^(?:(?=.)a[^/]*?)$/',
-    '/^(?:(?=.)X[^/]*?)$/',
-    '/^(?:(?=.)X[^/]*?)$/',
-    '/^(?:\\*)$/',
-    '/^(?:(?=.)\\*[^/]*?)$/',
-    '/^(?:\\*\\*)$/',
-    '/^(?:(?=.)b[^/]*?\\/)$/',
-    '/^(?:(?=.)c[^/]*?)$/',
-    '/^(?:(?:(?!(?:\\/|^)\\.).)*?)$/',
-    '/^(?:\\.\\.\\/(?!\\.)(?=.)[^/]*?\\/)$/',
-    '/^(?:s\\/(?=.)\\.\\.[^/]*?\\/)$/',
-    '/^(?:\\/\\^root:\\/\\{s\\/(?=.)\\^[^:][^/]*?:[^:][^/]*?:\\([^:]\\)[^/]*?\\.[^/]*?\\$\\/1\\/)$/',
-    '/^(?:\\/\\^root:\\/\\{s\\/(?=.)\\^[^:][^/]*?:[^:][^/]*?:\\([^:]\\)[^/]*?\\.[^/]*?\\$\\/\u0001\\/)$/',
-    '/^(?:(?!\\.)(?=.)[a-c]b[^/]*?)$/',
-    '/^(?:(?!\\.)(?=.)[a-y][^/]*?[^c])$/',
-    '/^(?:(?=.)a[^/]*?[^c])$/',
-    '/^(?:(?=.)a[X-]b)$/',
-    '/^(?:(?!\\.)(?=.)[^a-c][^/]*?)$/',
-    '/^(?:a\\*b\\/(?!\\.)(?=.)[^/]*?)$/',
-    '/^(?:(?=.)a\\*[^/]\\/(?!\\.)(?=.)[^/]*?)$/',
-    '/^(?:(?!\\.)(?=.)[^/]*?\\\\\\![^/]*?)$/',
-    '/^(?:(?!\\.)(?=.)[^/]*?\\![^/]*?)$/',
-    '/^(?:(?!\\.)(?=.)[^/]*?\\.\\*)$/',
-    '/^(?:(?=.)a[b]c)$/',
-    '/^(?:(?=.)a[b]c)$/',
-    '/^(?:(?=.)a[^/]c)$/',
-    '/^(?:a\\*c)$/',
-    'false',
-    '/^(?:(?!\\.)(?=.)[^/]*?\\/(?=.)man[^/]*?\\/(?=.)bash\\.[^/]*?)$/',
-    '/^(?:man\\/man1\\/bash\\.1)$/',
-    '/^(?:(?=.)a[^/]*?[^/]*?[^/]*?c)$/',
-    '/^(?:(?=.)a[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]c)$/',
-    '/^(?:(?!\\.)(?=.)[^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/])$/',
-    '/^(?:(?!\\.)(?=.)[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/])$/',
-    '/^(?:(?!\\.)(?=.)[^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]c)$/',
-    '/^(?:(?!\\.)(?=.)[^/][^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?c)$/',
-    '/^(?:(?!\\.)(?=.)[^/][^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?[^/])$/',
-    '/^(?:(?!\\.)(?=.)[^/][^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?)$/',
-    '/^(?:(?!\\.)(?=.)[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?c)$/',
-    '/^(?:(?!\\.)(?=.)[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/])$/',
-    '/^(?:(?=.)a[^/]*?cd[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/]k)$/',
-    '/^(?:(?=.)a[^/]*?[^/]*?[^/][^/]*?[^/]*?cd[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/]k)$/',
-    '/^(?:(?=.)a[^/]*?[^/]*?[^/][^/]*?[^/]*?cd[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/]k[^/]*?[^/]*?[^/]*?)$/',
-    '/^(?:(?=.)a[^/]*?[^/]*?[^/][^/]*?[^/]*?cd[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/][^/]*?[^/]*?[^/]*?k)$/',
-    '/^(?:(?=.)a[^/]*?[^/]*?[^/][^/]*?[^/]*?cd[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/][^/]*?[^/]*?[^/]*?k[^/]*?[^/]*?)$/',
-    '/^(?:(?=.)a[^/]*?[^/]*?[^/]*?[^/]*?c[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?)$/',
-    '/^(?:(?!\\.)(?=.)[-abc])$/',
-    '/^(?:(?!\\.)(?=.)[abc-])$/',
-    '/^(?:\\\\)$/',
-    '/^(?:(?!\\.)(?=.)[\\\\])$/',
-    '/^(?:(?!\\.)(?=.)[\\[])$/',
-    '/^(?:\\[)$/',
-    '/^(?:(?=.)\\[(?!\\.)(?=.)[^/]*?)$/',
-    '/^(?:(?!\\.)(?=.)[\\]])$/',
-    '/^(?:(?!\\.)(?=.)[\\]-])$/',
-    '/^(?:(?!\\.)(?=.)[a-z])$/',
-    '/^(?:(?!\\.)(?=.)[^/][^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?[^/])$/',
-    '/^(?:(?!\\.)(?=.)[^/][^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?c)$/',
-    '/^(?:(?!\\.)(?=.)[^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?c[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?)$/',
-    '/^(?:(?!\\.)(?=.)[^/]*?c[^/]*?[^/][^/]*?[^/]*?)$/',
-    '/^(?:(?=.)a[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?c[^/]*?[^/][^/]*?[^/]*?)$/',
-    '/^(?:(?=.)a[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/][^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?)$/',
-    '/^(?:\\[\\])$/',
-    '/^(?:\\[abc)$/',
-    '/^(?:(?=.)XYZ)$/i',
-    '/^(?:(?=.)ab[^/]*?)$/i',
-    '/^(?:(?!\\.)(?=.)[ia][^/][ck])$/i',
-    '/^(?:\\/(?!\\.)(?=.)[^/]*?|(?!\\.)(?=.)[^/]*?)$/',
-    '/^(?:\\/(?!\\.)(?=.)[^/]|(?!\\.)(?=.)[^/]*?)$/',
-    '/^(?:(?:(?!(?:\\/|^)\\.).)*?)$/',
-    '/^(?:a\\/(?!(?:^|\\/)\\.{1,2}(?:$|\\/))(?=.)[^/]*?\\/b)$/',
-    '/^(?:a\\/(?=.)\\.[^/]*?\\/b)$/',
-    '/^(?:a\\/(?!\\.)(?=.)[^/]*?\\/b)$/',
-    '/^(?:a\\/(?=.)\\.[^/]*?\\/b)$/',
-    '/^(?:(?:(?!(?:\\/|^)(?:\\.{1,2})($|\\/)).)*?)$/',
-    '/^(?:(?!\\.)(?=.)[^/]*?\\(a\\/b\\))$/',
-    '/^(?:(?!\\.)(?=.)(?:a|b)*|(?!\\.)(?=.)(?:a|c)*)$/',
-    '/^(?:(?=.)\\[(?=.)\\!a[^/]*?)$/',
-    '/^(?:(?=.)\\[(?=.)#a[^/]*?)$/',
-    '/^(?:(?=.)\\+\\(a\\|[^/]*?\\|c\\\\\\\\\\|d\\\\\\\\\\|e\\\\\\\\\\\\\\\\\\|f\\\\\\\\\\\\\\\\\\|g)$/',
-    '/^(?:(?!\\.)(?=.)(?:a|b)*|(?!\\.)(?=.)(?:a|c)*)$/',
-    '/^(?:a|(?!\\.)(?=.)[^/]*?\\(b\\|c|d\\))$/',
-    '/^(?:a|(?!\\.)(?=.)(?:b|c)*|(?!\\.)(?=.)(?:b|d)*)$/',
-    '/^(?:(?!\\.)(?=.)(?:a|b|c)*|(?!\\.)(?=.)(?:a|c)*)$/',
-    '/^(?:(?!\\.)(?=.)[^/]*?\\(a\\|b\\|c\\)|(?!\\.)(?=.)[^/]*?\\(a\\|c\\))$/',
-    '/^(?:(?=.)a[^/]b)$/',
-    '/^(?:(?=.)#[^/]*?)$/',
-    '/^(?!^(?:(?=.)a[^/]*?)$).*$/',
-    '/^(?:(?=.)\\!a[^/]*?)$/',
-    '/^(?:(?=.)a[^/]*?)$/',
-    '/^(?!^(?:(?=.)\\!a[^/]*?)$).*$/',
-    '/^(?:(?!\\.)(?=.)[^/]*?\\.(?:(?!js)[^/]*?))$/',
-    '/^(?:(?:(?!(?:\\/|^)\\.).)*?\\/\\.x\\/(?:(?!(?:\\/|^)\\.).)*?)$/' ]
-var re = 0;
-
-tap.test("basic tests", function (t) {
-  var start = Date.now()
-
-  // [ pattern, [matches], MM opts, files, TAP opts]
-  patterns.forEach(function (c) {
-    if (typeof c === "function") return c()
-    if (typeof c === "string") return t.comment(c)
-
-    var pattern = c[0]
-      , expect = c[1].sort(alpha)
-      , options = c[2] || {}
-      , f = c[3] || files
-      , tapOpts = c[4] || {}
-
-    // options.debug = true
-    var m = new mm.Minimatch(pattern, options)
-    var r = m.makeRe()
-    var expectRe = regexps[re++]
-    tapOpts.re = String(r) || JSON.stringify(r)
-    tapOpts.files = JSON.stringify(f)
-    tapOpts.pattern = pattern
-    tapOpts.set = m.set
-    tapOpts.negated = m.negate
-
-    var actual = mm.match(f, pattern, options)
-    actual.sort(alpha)
-
-    t.equivalent( actual, expect
-                , JSON.stringify(pattern) + " " + JSON.stringify(expect)
-                , tapOpts )
-
-    t.equal(tapOpts.re, expectRe, tapOpts)
-  })
-
-  t.comment("time=" + (Date.now() - start) + "ms")
-  t.end()
-})
-
-tap.test("global leak test", function (t) {
-  var globalAfter = Object.keys(global)
-  t.equivalent(globalAfter, globalBefore, "no new globals, please")
-  t.end()
-})
-
-function alpha (a, b) {
-  return a > b ? 1 : -1
-}
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/node_modules/minimatch/test/brace-expand.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/node_modules/minimatch/test/brace-expand.js
deleted file mode 100644
index 7ee278a..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/node_modules/minimatch/test/brace-expand.js
+++ /dev/null
@@ -1,33 +0,0 @@
-var tap = require("tap")
-  , minimatch = require("../")
-
-tap.test("brace expansion", function (t) {
-  // [ pattern, [expanded] ]
-  ; [ [ "a{b,c{d,e},{f,g}h}x{y,z}"
-      , [ "abxy"
-        , "abxz"
-        , "acdxy"
-        , "acdxz"
-        , "acexy"
-        , "acexz"
-        , "afhxy"
-        , "afhxz"
-        , "aghxy"
-        , "aghxz" ] ]
-    , [ "a{1..5}b"
-      , [ "a1b"
-        , "a2b"
-        , "a3b"
-        , "a4b"
-        , "a5b" ] ]
-    , [ "a{b}c", ["a{b}c"] ]
-  ].forEach(function (tc) {
-    var p = tc[0]
-      , expect = tc[1]
-    t.equivalent(minimatch.braceExpand(p), expect, p)
-  })
-  console.error("ending")
-  t.end()
-})
-
-
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/node_modules/minimatch/test/caching.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/node_modules/minimatch/test/caching.js
deleted file mode 100644
index 0fec4b0..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/node_modules/minimatch/test/caching.js
+++ /dev/null
@@ -1,14 +0,0 @@
-var Minimatch = require("../minimatch.js").Minimatch
-var tap = require("tap")
-tap.test("cache test", function (t) {
-  var mm1 = new Minimatch("a?b")
-  var mm2 = new Minimatch("a?b")
-  t.equal(mm1, mm2, "should get the same object")
-  // the lru should drop it after 100 entries
-  for (var i = 0; i < 100; i ++) {
-    new Minimatch("a"+i)
-  }
-  mm2 = new Minimatch("a?b")
-  t.notEqual(mm1, mm2, "cache should have dropped")
-  t.end()
-})
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/node_modules/minimatch/test/defaults.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/node_modules/minimatch/test/defaults.js
deleted file mode 100644
index 75e0571..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/node_modules/minimatch/test/defaults.js
+++ /dev/null
@@ -1,274 +0,0 @@
-// http://www.bashcookbook.com/bashinfo/source/bash-1.14.7/tests/glob-test
-//
-// TODO: Some of these tests do very bad things with backslashes, and will
-// most likely fail badly on windows.  They should probably be skipped.
-
-var tap = require("tap")
-  , globalBefore = Object.keys(global)
-  , mm = require("../")
-  , files = [ "a", "b", "c", "d", "abc"
-            , "abd", "abe", "bb", "bcd"
-            , "ca", "cb", "dd", "de"
-            , "bdir/", "bdir/cfile"]
-  , next = files.concat([ "a-b", "aXb"
-                        , ".x", ".y" ])
-
-tap.test("basic tests", function (t) {
-  var start = Date.now()
-
-  // [ pattern, [matches], MM opts, files, TAP opts]
-  ; [ "http://www.bashcookbook.com/bashinfo" +
-      "/source/bash-1.14.7/tests/glob-test"
-    , ["a*", ["a", "abc", "abd", "abe"]]
-    , ["X*", ["X*"], {nonull: true}]
-
-    // allow null glob expansion
-    , ["X*", []]
-
-    // isaacs: Slightly different than bash/sh/ksh
-    // \\* is not un-escaped to literal "*" in a failed match,
-    // but it does make it get treated as a literal star
-    , ["\\*", ["\\*"], {nonull: true}]
-    , ["\\**", ["\\**"], {nonull: true}]
-    , ["\\*\\*", ["\\*\\*"], {nonull: true}]
-
-    , ["b*/", ["bdir/"]]
-    , ["c*", ["c", "ca", "cb"]]
-    , ["**", files]
-
-    , ["\\.\\./*/", ["\\.\\./*/"], {nonull: true}]
-    , ["s/\\..*//", ["s/\\..*//"], {nonull: true}]
-
-    , "legendary larry crashes bashes"
-    , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\\1/"
-      , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\\1/"], {nonull: true}]
-    , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\1/"
-      , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\1/"], {nonull: true}]
-
-    , "character classes"
-    , ["[a-c]b*", ["abc", "abd", "abe", "bb", "cb"]]
-    , ["[a-y]*[^c]", ["abd", "abe", "bb", "bcd",
-       "bdir/", "ca", "cb", "dd", "de"]]
-    , ["a*[^c]", ["abd", "abe"]]
-    , function () { files.push("a-b", "aXb") }
-    , ["a[X-]b", ["a-b", "aXb"]]
-    , function () { files.push(".x", ".y") }
-    , ["[^a-c]*", ["d", "dd", "de"]]
-    , function () { files.push("a*b/", "a*b/ooo") }
-    , ["a\\*b/*", ["a*b/ooo"]]
-    , ["a\\*?/*", ["a*b/ooo"]]
-    , ["*\\\\!*", [], {null: true}, ["echo !7"]]
-    , ["*\\!*", ["echo !7"], null, ["echo !7"]]
-    , ["*.\\*", ["r.*"], null, ["r.*"]]
-    , ["a[b]c", ["abc"]]
-    , ["a[\\b]c", ["abc"]]
-    , ["a?c", ["abc"]]
-    , ["a\\*c", [], {null: true}, ["abc"]]
-    , ["", [""], { null: true }, [""]]
-
-    , "http://www.opensource.apple.com/source/bash/bash-23/" +
-      "bash/tests/glob-test"
-    , function () { files.push("man/", "man/man1/", "man/man1/bash.1") }
-    , ["*/man*/bash.*", ["man/man1/bash.1"]]
-    , ["man/man1/bash.1", ["man/man1/bash.1"]]
-    , ["a***c", ["abc"], null, ["abc"]]
-    , ["a*****?c", ["abc"], null, ["abc"]]
-    , ["?*****??", ["abc"], null, ["abc"]]
-    , ["*****??", ["abc"], null, ["abc"]]
-    , ["?*****?c", ["abc"], null, ["abc"]]
-    , ["?***?****c", ["abc"], null, ["abc"]]
-    , ["?***?****?", ["abc"], null, ["abc"]]
-    , ["?***?****", ["abc"], null, ["abc"]]
-    , ["*******c", ["abc"], null, ["abc"]]
-    , ["*******?", ["abc"], null, ["abc"]]
-    , ["a*cd**?**??k", ["abcdecdhjk"], null, ["abcdecdhjk"]]
-    , ["a**?**cd**?**??k", ["abcdecdhjk"], null, ["abcdecdhjk"]]
-    , ["a**?**cd**?**??k***", ["abcdecdhjk"], null, ["abcdecdhjk"]]
-    , ["a**?**cd**?**??***k", ["abcdecdhjk"], null, ["abcdecdhjk"]]
-    , ["a**?**cd**?**??***k**", ["abcdecdhjk"], null, ["abcdecdhjk"]]
-    , ["a****c**?**??*****", ["abcdecdhjk"], null, ["abcdecdhjk"]]
-    , ["[-abc]", ["-"], null, ["-"]]
-    , ["[abc-]", ["-"], null, ["-"]]
-    , ["\\", ["\\"], null, ["\\"]]
-    , ["[\\\\]", ["\\"], null, ["\\"]]
-    , ["[[]", ["["], null, ["["]]
-    , ["[", ["["], null, ["["]]
-    , ["[*", ["[abc"], null, ["[abc"]]
-    , "a right bracket shall lose its special meaning and\n" +
-      "represent itself in a bracket expression if it occurs\n" +
-      "first in the list.  -- POSIX.2 2.8.3.2"
-    , ["[]]", ["]"], null, ["]"]]
-    , ["[]-]", ["]"], null, ["]"]]
-    , ["[a-\z]", ["p"], null, ["p"]]
-    , ["??**********?****?", [], { null: true }, ["abc"]]
-    , ["??**********?****c", [], { null: true }, ["abc"]]
-    , ["?************c****?****", [], { null: true }, ["abc"]]
-    , ["*c*?**", [], { null: true }, ["abc"]]
-    , ["a*****c*?**", [], { null: true }, ["abc"]]
-    , ["a********???*******", [], { null: true }, ["abc"]]
-    , ["[]", [], { null: true }, ["a"]]
-    , ["[abc", [], { null: true }, ["["]]
-
-    , "nocase tests"
-    , ["XYZ", ["xYz"], { nocase: true, null: true }
-      , ["xYz", "ABC", "IjK"]]
-    , ["ab*", ["ABC"], { nocase: true, null: true }
-      , ["xYz", "ABC", "IjK"]]
-    , ["[ia]?[ck]", ["ABC", "IjK"], { nocase: true, null: true }
-      , ["xYz", "ABC", "IjK"]]
-
-    // [ pattern, [matches], MM opts, files, TAP opts]
-    , "onestar/twostar"
-    , ["{/*,*}", [], {null: true}, ["/asdf/asdf/asdf"]]
-    , ["{/?,*}", ["/a", "bb"], {null: true}
-      , ["/a", "/b/b", "/a/b/c", "bb"]]
-
-    , "dots should not match unless requested"
-    , ["**", ["a/b"], {}, ["a/b", "a/.d", ".a/.d"]]
-
-    // .. and . can only match patterns starting with .,
-    // even when options.dot is set.
-    , function () {
-        files = ["a/./b", "a/../b", "a/c/b", "a/.d/b"]
-      }
-    , ["a/*/b", ["a/c/b", "a/.d/b"], {dot: true}]
-    , ["a/.*/b", ["a/./b", "a/../b", "a/.d/b"], {dot: true}]
-    , ["a/*/b", ["a/c/b"], {dot:false}]
-    , ["a/.*/b", ["a/./b", "a/../b", "a/.d/b"], {dot: false}]
-
-
-    // this also tests that changing the options needs
-    // to change the cache key, even if the pattern is
-    // the same!
-    , ["**", ["a/b","a/.d",".a/.d"], { dot: true }
-      , [ ".a/.d", "a/.d", "a/b"]]
-
-    , "paren sets cannot contain slashes"
-    , ["*(a/b)", ["*(a/b)"], {nonull: true}, ["a/b"]]
-
-    // brace sets trump all else.
-    //
-    // invalid glob pattern.  fails on bash4 and bsdglob.
-    // however, in this implementation, it's easier just
-    // to do the intuitive thing, and let brace-expansion
-    // actually come before parsing any extglob patterns,
-    // like the documentation seems to say.
-    //
-    // XXX: if anyone complains about this, either fix it
-    // or tell them to grow up and stop complaining.
-    //
-    // bash/bsdglob says this:
-    // , ["*(a|{b),c)}", ["*(a|{b),c)}"], {}, ["a", "ab", "ac", "ad"]]
-    // but we do this instead:
-    , ["*(a|{b),c)}", ["a", "ab", "ac"], {}, ["a", "ab", "ac", "ad"]]
-
-    // test partial parsing in the presence of comment/negation chars
-    , ["[!a*", ["[!ab"], {}, ["[!ab", "[ab"]]
-    , ["[#a*", ["[#ab"], {}, ["[#ab", "[ab"]]
-
-    // like: {a,b|c\\,d\\\|e} except it's unclosed, so it has to be escaped.
-    , ["+(a|*\\|c\\\\|d\\\\\\|e\\\\\\\\|f\\\\\\\\\\|g"
-      , ["+(a|b\\|c\\\\|d\\\\|e\\\\\\\\|f\\\\\\\\|g"]
-      , {}
-      , ["+(a|b\\|c\\\\|d\\\\|e\\\\\\\\|f\\\\\\\\|g", "a", "b\\c"]]
-
-
-    // crazy nested {,,} and *(||) tests.
-    , function () {
-        files = [ "a", "b", "c", "d"
-                , "ab", "ac", "ad"
-                , "bc", "cb"
-                , "bc,d", "c,db", "c,d"
-                , "d)", "(b|c", "*(b|c"
-                , "b|c", "b|cc", "cb|c"
-                , "x(a|b|c)", "x(a|c)"
-                , "(a|b|c)", "(a|c)"]
-      }
-    , ["*(a|{b,c})", ["a", "b", "c", "ab", "ac"]]
-    , ["{a,*(b|c,d)}", ["a","(b|c", "*(b|c", "d)"]]
-    // a
-    // *(b|c)
-    // *(b|d)
-    , ["{a,*(b|{c,d})}", ["a","b", "bc", "cb", "c", "d"]]
-    , ["*(a|{b|c,c})", ["a", "b", "c", "ab", "ac", "bc", "cb"]]
-
-
-    // test various flag settings.
-    , [ "*(a|{b|c,c})", ["x(a|b|c)", "x(a|c)", "(a|b|c)", "(a|c)"]
-      , { noext: true } ]
-    , ["a?b", ["x/y/acb", "acb/"], {matchBase: true}
-      , ["x/y/acb", "acb/", "acb/d/e", "x/y/acb/d"] ]
-    , ["#*", ["#a", "#b"], {nocomment: true}, ["#a", "#b", "c#d"]]
-
-
-    // begin channelling Boole and deMorgan...
-    , "negation tests"
-    , function () {
-        files = ["d", "e", "!ab", "!abc", "a!b", "\\!a"]
-      }
-
-    // anything that is NOT a* matches.
-    , ["!a*", ["\\!a", "d", "e", "!ab", "!abc"]]
-
-    // anything that IS !a* matches.
-    , ["!a*", ["!ab", "!abc"], {nonegate: true}]
-
-    // anything that IS a* matches
-    , ["!!a*", ["a!b"]]
-
-    // anything that is NOT !a* matches
-    , ["!\\!a*", ["a!b", "d", "e", "\\!a"]]
-
-    // negation nestled within a pattern
-    , function () {
-        files = [ "foo.js"
-                , "foo.bar"
-                // can't match this one without negative lookbehind.
-                , "foo.js.js"
-                , "blar.js"
-                , "foo."
-                , "boo.js.boo" ]
-      }
-    , ["*.!(js)", ["foo.bar", "foo.", "boo.js.boo"] ]
-
-    ].forEach(function (c) {
-      if (typeof c === "function") return c()
-      if (typeof c === "string") return t.comment(c)
-
-      var pattern = c[0]
-        , expect = c[1].sort(alpha)
-        , options = c[2]
-        , f = c[3] || files
-        , tapOpts = c[4] || {}
-
-      // options.debug = true
-      var Class = mm.defaults(options).Minimatch
-      var m = new Class(pattern, {})
-      var r = m.makeRe()
-      tapOpts.re = String(r) || JSON.stringify(r)
-      tapOpts.files = JSON.stringify(f)
-      tapOpts.pattern = pattern
-      tapOpts.set = m.set
-      tapOpts.negated = m.negate
-
-      var actual = mm.match(f, pattern, options)
-      actual.sort(alpha)
-
-      t.equivalent( actual, expect
-                  , JSON.stringify(pattern) + " " + JSON.stringify(expect)
-                  , tapOpts )
-    })
-
-  t.comment("time=" + (Date.now() - start) + "ms")
-  t.end()
-})
-
-tap.test("global leak test", function (t) {
-  var globalAfter = Object.keys(global)
-  t.equivalent(globalAfter, globalBefore, "no new globals, please")
-  t.end()
-})
-
-function alpha (a, b) {
-  return a > b ? 1 : -1
-}
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/node_modules/minimatch/test/extglob-ending-with-state-char.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/node_modules/minimatch/test/extglob-ending-with-state-char.js
deleted file mode 100644
index 6676e26..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/node_modules/minimatch/test/extglob-ending-with-state-char.js
+++ /dev/null
@@ -1,8 +0,0 @@
-var test = require('tap').test
-var minimatch = require('../')
-
-test('extglob ending with statechar', function(t) {
-  t.notOk(minimatch('ax', 'a?(b*)'))
-  t.ok(minimatch('ax', '?(a*|b)'))
-  t.end()
-})
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/package.json b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/package.json
deleted file mode 100644
index e7ec15f..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/package.json
+++ /dev/null
@@ -1,58 +0,0 @@
-{
-  "author": {
-    "name": "Isaac Z. Schlueter",
-    "email": "i@izs.me",
-    "url": "http://blog.izs.me/"
-  },
-  "name": "glob",
-  "description": "a little globber",
-  "version": "3.2.11",
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/isaacs/node-glob.git"
-  },
-  "main": "glob.js",
-  "engines": {
-    "node": "*"
-  },
-  "dependencies": {
-    "inherits": "2",
-    "minimatch": "0.3"
-  },
-  "devDependencies": {
-    "tap": "~0.4.0",
-    "mkdirp": "0",
-    "rimraf": "1"
-  },
-  "scripts": {
-    "test": "tap test/*.js",
-    "test-regen": "TEST_REGEN=1 node test/00-setup.js"
-  },
-  "license": "BSD",
-  "gitHead": "73f57e99510582b2024b762305970ebcf9b70aa2",
-  "bugs": {
-    "url": "https://github.com/isaacs/node-glob/issues"
-  },
-  "homepage": "https://github.com/isaacs/node-glob",
-  "_id": "glob@3.2.11",
-  "_shasum": "4a973f635b9190f715d10987d5c00fd2815ebe3d",
-  "_from": "glob@~3.2.9",
-  "_npmVersion": "1.4.10",
-  "_npmUser": {
-    "name": "isaacs",
-    "email": "i@izs.me"
-  },
-  "maintainers": [
-    {
-      "name": "isaacs",
-      "email": "i@izs.me"
-    }
-  ],
-  "dist": {
-    "shasum": "4a973f635b9190f715d10987d5c00fd2815ebe3d",
-    "tarball": "http://registry.npmjs.org/glob/-/glob-3.2.11.tgz"
-  },
-  "directories": {},
-  "_resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz",
-  "readme": "ERROR: No README data found!"
-}
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/test/00-setup.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/test/00-setup.js
deleted file mode 100644
index 245afaf..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/test/00-setup.js
+++ /dev/null
@@ -1,176 +0,0 @@
-// just a little pre-run script to set up the fixtures.
-// zz-finish cleans it up
-
-var mkdirp = require("mkdirp")
-var path = require("path")
-var i = 0
-var tap = require("tap")
-var fs = require("fs")
-var rimraf = require("rimraf")
-
-var files =
-[ "a/.abcdef/x/y/z/a"
-, "a/abcdef/g/h"
-, "a/abcfed/g/h"
-, "a/b/c/d"
-, "a/bc/e/f"
-, "a/c/d/c/b"
-, "a/cb/e/f"
-]
-
-var symlinkTo = path.resolve(__dirname, "a/symlink/a/b/c")
-var symlinkFrom = "../.."
-
-files = files.map(function (f) {
-  return path.resolve(__dirname, f)
-})
-
-tap.test("remove fixtures", function (t) {
-  rimraf(path.resolve(__dirname, "a"), function (er) {
-    t.ifError(er, "remove fixtures")
-    t.end()
-  })
-})
-
-files.forEach(function (f) {
-  tap.test(f, function (t) {
-    var d = path.dirname(f)
-    mkdirp(d, 0755, function (er) {
-      if (er) {
-        t.fail(er)
-        return t.bailout()
-      }
-      fs.writeFile(f, "i like tests", function (er) {
-        t.ifError(er, "make file")
-        t.end()
-      })
-    })
-  })
-})
-
-if (process.platform !== "win32") {
-  tap.test("symlinky", function (t) {
-    var d = path.dirname(symlinkTo)
-    console.error("mkdirp", d)
-    mkdirp(d, 0755, function (er) {
-      t.ifError(er)
-      fs.symlink(symlinkFrom, symlinkTo, "dir", function (er) {
-        t.ifError(er, "make symlink")
-        t.end()
-      })
-    })
-  })
-}
-
-;["foo","bar","baz","asdf","quux","qwer","rewq"].forEach(function (w) {
-  w = "/tmp/glob-test/" + w
-  tap.test("create " + w, function (t) {
-    mkdirp(w, function (er) {
-      if (er)
-        throw er
-      t.pass(w)
-      t.end()
-    })
-  })
-})
-
-
-// generate the bash pattern test-fixtures if possible
-if (process.platform === "win32" || !process.env.TEST_REGEN) {
-  console.error("Windows, or TEST_REGEN unset.  Using cached fixtures.")
-  return
-}
-
-var spawn = require("child_process").spawn;
-var globs =
-  // put more patterns here.
-  // anything that would be directly in / should be in /tmp/glob-test
-  ["test/a/*/+(c|g)/./d"
-  ,"test/a/**/[cg]/../[cg]"
-  ,"test/a/{b,c,d,e,f}/**/g"
-  ,"test/a/b/**"
-  ,"test/**/g"
-  ,"test/a/abc{fed,def}/g/h"
-  ,"test/a/abc{fed/g,def}/**/"
-  ,"test/a/abc{fed/g,def}/**///**/"
-  ,"test/**/a/**/"
-  ,"test/+(a|b|c)/a{/,bc*}/**"
-  ,"test/*/*/*/f"
-  ,"test/**/f"
-  ,"test/a/symlink/a/b/c/a/b/c/a/b/c//a/b/c////a/b/c/**/b/c/**"
-  ,"{./*/*,/tmp/glob-test/*}"
-  ,"{/tmp/glob-test/*,*}" // evil owl face!  how you taunt me!
-  ,"test/a/!(symlink)/**"
-  ]
-var bashOutput = {}
-var fs = require("fs")
-
-globs.forEach(function (pattern) {
-  tap.test("generate fixture " + pattern, function (t) {
-    var cmd = "shopt -s globstar && " +
-              "shopt -s extglob && " +
-              "shopt -s nullglob && " +
-              // "shopt >&2; " +
-              "eval \'for i in " + pattern + "; do echo $i; done\'"
-    var cp = spawn("bash", ["-c", cmd], { cwd: path.dirname(__dirname) })
-    var out = []
-    cp.stdout.on("data", function (c) {
-      out.push(c)
-    })
-    cp.stderr.pipe(process.stderr)
-    cp.on("close", function (code) {
-      out = flatten(out)
-      if (!out)
-        out = []
-      else
-        out = cleanResults(out.split(/\r*\n/))
-
-      bashOutput[pattern] = out
-      t.notOk(code, "bash test should finish nicely")
-      t.end()
-    })
-  })
-})
-
-tap.test("save fixtures", function (t) {
-  var fname = path.resolve(__dirname, "bash-results.json")
-  var data = JSON.stringify(bashOutput, null, 2) + "\n"
-  fs.writeFile(fname, data, function (er) {
-    t.ifError(er)
-    t.end()
-  })
-})
-
-function cleanResults (m) {
-  // normalize discrepancies in ordering, duplication,
-  // and ending slashes.
-  return m.map(function (m) {
-    return m.replace(/\/+/g, "/").replace(/\/$/, "")
-  }).sort(alphasort).reduce(function (set, f) {
-    if (f !== set[set.length - 1]) set.push(f)
-    return set
-  }, []).sort(alphasort).map(function (f) {
-    // de-windows
-    return (process.platform !== 'win32') ? f
-           : f.replace(/^[a-zA-Z]:\\\\/, '/').replace(/\\/g, '/')
-  })
-}
-
-function flatten (chunks) {
-  var s = 0
-  chunks.forEach(function (c) { s += c.length })
-  var out = new Buffer(s)
-  s = 0
-  chunks.forEach(function (c) {
-    c.copy(out, s)
-    s += c.length
-  })
-
-  return out.toString().trim()
-}
-
-function alphasort (a, b) {
-  a = a.toLowerCase()
-  b = b.toLowerCase()
-  return a > b ? 1 : a < b ? -1 : 0
-}
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/test/bash-comparison.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/test/bash-comparison.js
deleted file mode 100644
index 239ed1a..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/test/bash-comparison.js
+++ /dev/null
@@ -1,63 +0,0 @@
-// basic test
-// show that it does the same thing by default as the shell.
-var tap = require("tap")
-, child_process = require("child_process")
-, bashResults = require("./bash-results.json")
-, globs = Object.keys(bashResults)
-, glob = require("../")
-, path = require("path")
-
-// run from the root of the project
-// this is usually where you're at anyway, but be sure.
-process.chdir(path.resolve(__dirname, ".."))
-
-function alphasort (a, b) {
-  a = a.toLowerCase()
-  b = b.toLowerCase()
-  return a > b ? 1 : a < b ? -1 : 0
-}
-
-globs.forEach(function (pattern) {
-  var expect = bashResults[pattern]
-  // anything regarding the symlink thing will fail on windows, so just skip it
-  if (process.platform === "win32" &&
-      expect.some(function (m) {
-        return /\/symlink\//.test(m)
-      }))
-    return
-
-  tap.test(pattern, function (t) {
-    glob(pattern, function (er, matches) {
-      if (er)
-        throw er
-
-      // sort and unmark, just to match the shell results
-      matches = cleanResults(matches)
-
-      t.deepEqual(matches, expect, pattern)
-      t.end()
-    })
-  })
-
-  tap.test(pattern + " sync", function (t) {
-    var matches = cleanResults(glob.sync(pattern))
-
-    t.deepEqual(matches, expect, "should match shell")
-    t.end()
-  })
-})
-
-function cleanResults (m) {
-  // normalize discrepancies in ordering, duplication,
-  // and ending slashes.
-  return m.map(function (m) {
-    return m.replace(/\/+/g, "/").replace(/\/$/, "")
-  }).sort(alphasort).reduce(function (set, f) {
-    if (f !== set[set.length - 1]) set.push(f)
-    return set
-  }, []).sort(alphasort).map(function (f) {
-    // de-windows
-    return (process.platform !== 'win32') ? f
-           : f.replace(/^[a-zA-Z]:[\/\\]+/, '/').replace(/[\\\/]+/g, '/')
-  })
-}
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/test/bash-results.json b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/test/bash-results.json
deleted file mode 100644
index 8051c72..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/test/bash-results.json
+++ /dev/null
@@ -1,351 +0,0 @@
-{
-  "test/a/*/+(c|g)/./d": [
-    "test/a/b/c/./d"
-  ],
-  "test/a/**/[cg]/../[cg]": [
-    "test/a/abcdef/g/../g",
-    "test/a/abcfed/g/../g",
-    "test/a/b/c/../c",
-    "test/a/c/../c",
-    "test/a/c/d/c/../c",
-    "test/a/symlink/a/b/c/../c",
-    "test/a/symlink/a/b/c/a/b/c/../c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/../c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/../c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c"
-  ],
-  "test/a/{b,c,d,e,f}/**/g": [],
-  "test/a/b/**": [
-    "test/a/b",
-    "test/a/b/c",
-    "test/a/b/c/d"
-  ],
-  "test/**/g": [
-    "test/a/abcdef/g",
-    "test/a/abcfed/g"
-  ],
-  "test/a/abc{fed,def}/g/h": [
-    "test/a/abcdef/g/h",
-    "test/a/abcfed/g/h"
-  ],
-  "test/a/abc{fed/g,def}/**/": [
-    "test/a/abcdef",
-    "test/a/abcdef/g",
-    "test/a/abcfed/g"
-  ],
-  "test/a/abc{fed/g,def}/**///**/": [
-    "test/a/abcdef",
-    "test/a/abcdef/g",
-    "test/a/abcfed/g"
-  ],
-  "test/**/a/**/": [
-    "test/a",
-    "test/a/abcdef",
-    "test/a/abcdef/g",
-    "test/a/abcfed",
-    "test/a/abcfed/g",
-    "test/a/b",
-    "test/a/b/c",
-    "test/a/bc",
-    "test/a/bc/e",
-    "test/a/c",
-    "test/a/c/d",
-    "test/a/c/d/c",
-    "test/a/cb",
-    "test/a/cb/e",
-    "test/a/symlink",
-    "test/a/symlink/a",
-    "test/a/symlink/a/b",
-    "test/a/symlink/a/b/c",
-    "test/a/symlink/a/b/c/a",
-    "test/a/symlink/a/b/c/a/b",
-    "test/a/symlink/a/b/c/a/b/c",
-    "test/a/symlink/a/b/c/a/b/c/a",
-    "test/a/symlink/a/b/c/a/b/c/a/b",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b"
-  ],
-  "test/+(a|b|c)/a{/,bc*}/**": [
-    "test/a/abcdef",
-    "test/a/abcdef/g",
-    "test/a/abcdef/g/h",
-    "test/a/abcfed",
-    "test/a/abcfed/g",
-    "test/a/abcfed/g/h"
-  ],
-  "test/*/*/*/f": [
-    "test/a/bc/e/f",
-    "test/a/cb/e/f"
-  ],
-  "test/**/f": [
-    "test/a/bc/e/f",
-    "test/a/cb/e/f"
-  ],
-  "test/a/symlink/a/b/c/a/b/c/a/b/c//a/b/c////a/b/c/**/b/c/**": [
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
-    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c"
-  ],
-  "{./*/*,/tmp/glob-test/*}": [
-    "./examples/g.js",
-    "./examples/usr-local.js",
-    "./node_modules/inherits",
-    "./node_modules/minimatch",
-    "./node_modules/mkdirp",
-    "./node_modules/rimraf",
-    "./node_modules/tap",
-    "./test/00-setup.js",
-    "./test/a",
-    "./test/bash-comparison.js",
-    "./test/bash-results.json",
-    "./test/cwd-test.js",
-    "./test/globstar-match.js",
-    "./test/mark.js",
-    "./test/new-glob-optional-options.js",
-    "./test/nocase-nomagic.js",
-    "./test/pause-resume.js",
-    "./test/readme-issue.js",
-    "./test/root-nomount.js",
-    "./test/root.js",
-    "./test/stat.js",
-    "./test/zz-cleanup.js",
-    "/tmp/glob-test/asdf",
-    "/tmp/glob-test/bar",
-    "/tmp/glob-test/baz",
-    "/tmp/glob-test/foo",
-    "/tmp/glob-test/quux",
-    "/tmp/glob-test/qwer",
-    "/tmp/glob-test/rewq"
-  ],
-  "{/tmp/glob-test/*,*}": [
-    "/tmp/glob-test/asdf",
-    "/tmp/glob-test/bar",
-    "/tmp/glob-test/baz",
-    "/tmp/glob-test/foo",
-    "/tmp/glob-test/quux",
-    "/tmp/glob-test/qwer",
-    "/tmp/glob-test/rewq",
-    "examples",
-    "glob.js",
-    "LICENSE",
-    "node_modules",
-    "package.json",
-    "README.md",
-    "test"
-  ],
-  "test/a/!(symlink)/**": [
-    "test/a/abcdef",
-    "test/a/abcdef/g",
-    "test/a/abcdef/g/h",
-    "test/a/abcfed",
-    "test/a/abcfed/g",
-    "test/a/abcfed/g/h",
-    "test/a/b",
-    "test/a/b/c",
-    "test/a/b/c/d",
-    "test/a/bc",
-    "test/a/bc/e",
-    "test/a/bc/e/f",
-    "test/a/c",
-    "test/a/c/d",
-    "test/a/c/d/c",
-    "test/a/c/d/c/b",
-    "test/a/cb",
-    "test/a/cb/e",
-    "test/a/cb/e/f"
-  ]
-}
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/test/cwd-test.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/test/cwd-test.js
deleted file mode 100644
index 352c27e..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/test/cwd-test.js
+++ /dev/null
@@ -1,55 +0,0 @@
-var tap = require("tap")
-
-var origCwd = process.cwd()
-process.chdir(__dirname)
-
-tap.test("changing cwd and searching for **/d", function (t) {
-  var glob = require('../')
-  var path = require('path')
-  t.test('.', function (t) {
-    glob('**/d', function (er, matches) {
-      t.ifError(er)
-      t.like(matches, [ 'a/b/c/d', 'a/c/d' ])
-      t.end()
-    })
-  })
-
-  t.test('a', function (t) {
-    glob('**/d', {cwd:path.resolve('a')}, function (er, matches) {
-      t.ifError(er)
-      t.like(matches, [ 'b/c/d', 'c/d' ])
-      t.end()
-    })
-  })
-
-  t.test('a/b', function (t) {
-    glob('**/d', {cwd:path.resolve('a/b')}, function (er, matches) {
-      t.ifError(er)
-      t.like(matches, [ 'c/d' ])
-      t.end()
-    })
-  })
-
-  t.test('a/b/', function (t) {
-    glob('**/d', {cwd:path.resolve('a/b/')}, function (er, matches) {
-      t.ifError(er)
-      t.like(matches, [ 'c/d' ])
-      t.end()
-    })
-  })
-
-  t.test('.', function (t) {
-    glob('**/d', {cwd: process.cwd()}, function (er, matches) {
-      t.ifError(er)
-      t.like(matches, [ 'a/b/c/d', 'a/c/d' ])
-      t.end()
-    })
-  })
-
-  t.test('cd -', function (t) {
-    process.chdir(origCwd)
-    t.end()
-  })
-
-  t.end()
-})
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/test/globstar-match.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/test/globstar-match.js
deleted file mode 100644
index 9b234fa..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/test/globstar-match.js
+++ /dev/null
@@ -1,19 +0,0 @@
-var Glob = require("../glob.js").Glob
-var test = require('tap').test
-
-test('globstar should not have dupe matches', function(t) {
-  var pattern = 'a/**/[gh]'
-  var g = new Glob(pattern, { cwd: __dirname })
-  var matches = []
-  g.on('match', function(m) {
-    console.error('match %j', m)
-    matches.push(m)
-  })
-  g.on('end', function(set) {
-    console.error('set', set)
-    matches = matches.sort()
-    set = set.sort()
-    t.same(matches, set, 'should have same set of matches')
-    t.end()
-  })
-})
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/test/mark.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/test/mark.js
deleted file mode 100644
index bf411c0..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/test/mark.js
+++ /dev/null
@@ -1,118 +0,0 @@
-var test = require("tap").test
-var glob = require('../')
-process.chdir(__dirname)
-
-// expose timing issues
-var lag = 5
-glob.Glob.prototype._stat = function(o) { return function(f, cb) {
-  var args = arguments
-  setTimeout(function() {
-    o.call(this, f, cb)
-  }.bind(this), lag += 5)
-}}(glob.Glob.prototype._stat)
-
-
-test("mark, with **", function (t) {
-  glob("a/*b*/**", {mark: true}, function (er, results) {
-    if (er)
-      throw er
-    var expect =
-      [ 'a/abcdef/',
-        'a/abcdef/g/',
-        'a/abcdef/g/h',
-        'a/abcfed/',
-        'a/abcfed/g/',
-        'a/abcfed/g/h',
-        'a/b/',
-        'a/b/c/',
-        'a/b/c/d',
-        'a/bc/',
-        'a/bc/e/',
-        'a/bc/e/f',
-        'a/cb/',
-        'a/cb/e/',
-        'a/cb/e/f' ]
-
-    t.same(results, expect)
-    t.end()
-  })
-})
-
-test("mark, no / on pattern", function (t) {
-  glob("a/*", {mark: true}, function (er, results) {
-    if (er)
-      throw er
-    var expect = [ 'a/abcdef/',
-                   'a/abcfed/',
-                   'a/b/',
-                   'a/bc/',
-                   'a/c/',
-                   'a/cb/' ]
-
-    if (process.platform !== "win32")
-      expect.push('a/symlink/')
-
-    t.same(results, expect)
-    t.end()
-  }).on('match', function(m) {
-    t.similar(m, /\/$/)
-  })
-})
-
-test("mark=false, no / on pattern", function (t) {
-  glob("a/*", function (er, results) {
-    if (er)
-      throw er
-    var expect = [ 'a/abcdef',
-                   'a/abcfed',
-                   'a/b',
-                   'a/bc',
-                   'a/c',
-                   'a/cb' ]
-
-    if (process.platform !== "win32")
-      expect.push('a/symlink')
-    t.same(results, expect)
-    t.end()
-  }).on('match', function(m) {
-    t.similar(m, /[^\/]$/)
-  })
-})
-
-test("mark=true, / on pattern", function (t) {
-  glob("a/*/", {mark: true}, function (er, results) {
-    if (er)
-      throw er
-    var expect = [ 'a/abcdef/',
-                    'a/abcfed/',
-                    'a/b/',
-                    'a/bc/',
-                    'a/c/',
-                    'a/cb/' ]
-    if (process.platform !== "win32")
-      expect.push('a/symlink/')
-    t.same(results, expect)
-    t.end()
-  }).on('match', function(m) {
-    t.similar(m, /\/$/)
-  })
-})
-
-test("mark=false, / on pattern", function (t) {
-  glob("a/*/", function (er, results) {
-    if (er)
-      throw er
-    var expect = [ 'a/abcdef/',
-                   'a/abcfed/',
-                   'a/b/',
-                   'a/bc/',
-                   'a/c/',
-                   'a/cb/' ]
-    if (process.platform !== "win32")
-      expect.push('a/symlink/')
-    t.same(results, expect)
-    t.end()
-  }).on('match', function(m) {
-    t.similar(m, /\/$/)
-  })
-})
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/test/new-glob-optional-options.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/test/new-glob-optional-options.js
deleted file mode 100644
index 3e7dc5a..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/test/new-glob-optional-options.js
+++ /dev/null
@@ -1,10 +0,0 @@
-var Glob = require('../glob.js').Glob;
-var test = require('tap').test;
-
-test('new glob, with cb, and no options', function (t) {
-  new Glob(__filename, function(er, results) {
-    if (er) throw er;
-    t.same(results, [__filename]);
-    t.end();
-  });
-});
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/test/nocase-nomagic.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/test/nocase-nomagic.js
deleted file mode 100644
index 2503f23..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/test/nocase-nomagic.js
+++ /dev/null
@@ -1,113 +0,0 @@
-var fs = require('fs');
-var test = require('tap').test;
-var glob = require('../');
-
-test('mock fs', function(t) {
-  var stat = fs.stat
-  var statSync = fs.statSync
-  var readdir = fs.readdir
-  var readdirSync = fs.readdirSync
-
-  function fakeStat(path) {
-    var ret
-    switch (path.toLowerCase()) {
-      case '/tmp': case '/tmp/':
-        ret = { isDirectory: function() { return true } }
-        break
-      case '/tmp/a':
-        ret = { isDirectory: function() { return false } }
-        break
-    }
-    return ret
-  }
-
-  fs.stat = function(path, cb) {
-    var f = fakeStat(path);
-    if (f) {
-      process.nextTick(function() {
-        cb(null, f)
-      })
-    } else {
-      stat.call(fs, path, cb)
-    }
-  }
-
-  fs.statSync = function(path) {
-    return fakeStat(path) || statSync.call(fs, path)
-  }
-
-  function fakeReaddir(path) {
-    var ret
-    switch (path.toLowerCase()) {
-      case '/tmp': case '/tmp/':
-        ret = [ 'a', 'A' ]
-        break
-      case '/':
-        ret = ['tmp', 'tMp', 'tMP', 'TMP']
-    }
-    return ret
-  }
-
-  fs.readdir = function(path, cb) {
-    var f = fakeReaddir(path)
-    if (f)
-      process.nextTick(function() {
-        cb(null, f)
-      })
-    else
-      readdir.call(fs, path, cb)
-  }
-
-  fs.readdirSync = function(path) {
-    return fakeReaddir(path) || readdirSync.call(fs, path)
-  }
-
-  t.pass('mocked')
-  t.end()
-})
-
-test('nocase, nomagic', function(t) {
-  var n = 2
-  var want = [ '/TMP/A',
-               '/TMP/a',
-               '/tMP/A',
-               '/tMP/a',
-               '/tMp/A',
-               '/tMp/a',
-               '/tmp/A',
-               '/tmp/a' ]
-  glob('/tmp/a', { nocase: true }, function(er, res) {
-    if (er)
-      throw er
-    t.same(res.sort(), want)
-    if (--n === 0) t.end()
-  })
-  glob('/tmp/A', { nocase: true }, function(er, res) {
-    if (er)
-      throw er
-    t.same(res.sort(), want)
-    if (--n === 0) t.end()
-  })
-})
-
-test('nocase, with some magic', function(t) {
-  t.plan(2)
-  var want = [ '/TMP/A',
-               '/TMP/a',
-               '/tMP/A',
-               '/tMP/a',
-               '/tMp/A',
-               '/tMp/a',
-               '/tmp/A',
-               '/tmp/a' ]
-  glob('/tmp/*', { nocase: true }, function(er, res) {
-    if (er)
-      throw er
-    t.same(res.sort(), want)
-  })
-  glob('/tmp/*', { nocase: true }, function(er, res) {
-    if (er)
-      throw er
-    t.same(res.sort(), want)
-  })
-})
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/test/pause-resume.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/test/pause-resume.js
deleted file mode 100644
index e1ffbab..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/test/pause-resume.js
+++ /dev/null
@@ -1,73 +0,0 @@
-// show that no match events happen while paused.
-var tap = require("tap")
-, child_process = require("child_process")
-// just some gnarly pattern with lots of matches
-, pattern = "test/a/!(symlink)/**"
-, bashResults = require("./bash-results.json")
-, patterns = Object.keys(bashResults)
-, glob = require("../")
-, Glob = glob.Glob
-, path = require("path")
-
-// run from the root of the project
-// this is usually where you're at anyway, but be sure.
-process.chdir(path.resolve(__dirname, ".."))
-
-function alphasort (a, b) {
-  a = a.toLowerCase()
-  b = b.toLowerCase()
-  return a > b ? 1 : a < b ? -1 : 0
-}
-
-function cleanResults (m) {
-  // normalize discrepancies in ordering, duplication,
-  // and ending slashes.
-  return m.map(function (m) {
-    return m.replace(/\/+/g, "/").replace(/\/$/, "")
-  }).sort(alphasort).reduce(function (set, f) {
-    if (f !== set[set.length - 1]) set.push(f)
-    return set
-  }, []).sort(alphasort).map(function (f) {
-    // de-windows
-    return (process.platform !== 'win32') ? f
-           : f.replace(/^[a-zA-Z]:\\\\/, '/').replace(/\\/g, '/')
-  })
-}
-
-var globResults = []
-tap.test("use a Glob object, and pause/resume it", function (t) {
-  var g = new Glob(pattern)
-  , paused = false
-  , res = []
-  , expect = bashResults[pattern]
-
-  g.on("pause", function () {
-    console.error("pause")
-  })
-
-  g.on("resume", function () {
-    console.error("resume")
-  })
-
-  g.on("match", function (m) {
-    t.notOk(g.paused, "must not be paused")
-    globResults.push(m)
-    g.pause()
-    t.ok(g.paused, "must be paused")
-    setTimeout(g.resume.bind(g), 10)
-  })
-
-  g.on("end", function (matches) {
-    t.pass("reached glob end")
-    globResults = cleanResults(globResults)
-    matches = cleanResults(matches)
-    t.deepEqual(matches, globResults,
-      "end event matches should be the same as match events")
-
-    t.deepEqual(matches, expect,
-      "glob matches should be the same as bash results")
-
-    t.end()
-  })
-})
-
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/test/readme-issue.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/test/readme-issue.js
deleted file mode 100644
index 0b4e0be..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/test/readme-issue.js
+++ /dev/null
@@ -1,36 +0,0 @@
-var test = require("tap").test
-var glob = require("../")
-
-var mkdirp = require("mkdirp")
-var fs = require("fs")
-var rimraf = require("rimraf")
-var dir = __dirname + "/package"
-
-test("setup", function (t) {
-  mkdirp.sync(dir)
-  fs.writeFileSync(dir + "/package.json", "{}", "ascii")
-  fs.writeFileSync(dir + "/README", "x", "ascii")
-  t.pass("setup done")
-  t.end()
-})
-
-test("glob", function (t) {
-  var opt = {
-    cwd: dir,
-    nocase: true,
-    mark: true
-  }
-
-  glob("README?(.*)", opt, function (er, files) {
-    if (er)
-      throw er
-    t.same(files, ["README"])
-    t.end()
-  })
-})
-
-test("cleanup", function (t) {
-  rimraf.sync(dir)
-  t.pass("clean")
-  t.end()
-})
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/test/root-nomount.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/test/root-nomount.js
deleted file mode 100644
index 3ac5979..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/test/root-nomount.js
+++ /dev/null
@@ -1,39 +0,0 @@
-var tap = require("tap")
-
-var origCwd = process.cwd()
-process.chdir(__dirname)
-
-tap.test("changing root and searching for /b*/**", function (t) {
-  var glob = require('../')
-  var path = require('path')
-  t.test('.', function (t) {
-    glob('/b*/**', { globDebug: true, root: '.', nomount: true }, function (er, matches) {
-      t.ifError(er)
-      t.like(matches, [])
-      t.end()
-    })
-  })
-
-  t.test('a', function (t) {
-    glob('/b*/**', { globDebug: true, root: path.resolve('a'), nomount: true }, function (er, matches) {
-      t.ifError(er)
-      t.like(matches, [ '/b', '/b/c', '/b/c/d', '/bc', '/bc/e', '/bc/e/f' ])
-      t.end()
-    })
-  })
-
-  t.test('root=a, cwd=a/b', function (t) {
-    glob('/b*/**', { globDebug: true, root: 'a', cwd: path.resolve('a/b'), nomount: true }, function (er, matches) {
-      t.ifError(er)
-      t.like(matches, [ '/b', '/b/c', '/b/c/d', '/bc', '/bc/e', '/bc/e/f' ])
-      t.end()
-    })
-  })
-
-  t.test('cd -', function (t) {
-    process.chdir(origCwd)
-    t.end()
-  })
-
-  t.end()
-})
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/test/root.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/test/root.js
deleted file mode 100644
index 95c23f9..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/test/root.js
+++ /dev/null
@@ -1,46 +0,0 @@
-var t = require("tap")
-
-var origCwd = process.cwd()
-process.chdir(__dirname)
-
-var glob = require('../')
-var path = require('path')
-
-t.test('.', function (t) {
-  glob('/b*/**', { globDebug: true, root: '.' }, function (er, matches) {
-    t.ifError(er)
-    t.like(matches, [])
-    t.end()
-  })
-})
-
-
-t.test('a', function (t) {
-  console.error("root=" + path.resolve('a'))
-  glob('/b*/**', { globDebug: true, root: path.resolve('a') }, function (er, matches) {
-    t.ifError(er)
-    var wanted = [
-        '/b', '/b/c', '/b/c/d', '/bc', '/bc/e', '/bc/e/f'
-      ].map(function (m) {
-        return path.join(path.resolve('a'), m).replace(/\\/g, '/')
-      })
-
-    t.like(matches, wanted)
-    t.end()
-  })
-})
-
-t.test('root=a, cwd=a/b', function (t) {
-  glob('/b*/**', { globDebug: true, root: 'a', cwd: path.resolve('a/b') }, function (er, matches) {
-    t.ifError(er)
-    t.like(matches, [ '/b', '/b/c', '/b/c/d', '/bc', '/bc/e', '/bc/e/f' ].map(function (m) {
-      return path.join(path.resolve('a'), m).replace(/\\/g, '/')
-    }))
-    t.end()
-  })
-})
-
-t.test('cd -', function (t) {
-  process.chdir(origCwd)
-  t.end()
-})
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/test/stat.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/test/stat.js
deleted file mode 100644
index 6291711..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/test/stat.js
+++ /dev/null
@@ -1,32 +0,0 @@
-var glob = require('../')
-var test = require('tap').test
-var path = require('path')
-
-test('stat all the things', function(t) {
-  var g = new glob.Glob('a/*abc*/**', { stat: true, cwd: __dirname })
-  var matches = []
-  g.on('match', function(m) {
-    matches.push(m)
-  })
-  var stats = []
-  g.on('stat', function(m) {
-    stats.push(m)
-  })
-  g.on('end', function(eof) {
-    stats = stats.sort()
-    matches = matches.sort()
-    eof = eof.sort()
-    t.same(stats, matches)
-    t.same(eof, matches)
-    var cache = Object.keys(this.statCache)
-    t.same(cache.map(function (f) {
-      return path.relative(__dirname, f)
-    }).sort(), matches)
-
-    cache.forEach(function(c) {
-      t.equal(typeof this.statCache[c], 'object')
-    }, this)
-
-    t.end()
-  })
-})
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/test/zz-cleanup.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/test/zz-cleanup.js
deleted file mode 100644
index e085f0f..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/glob/test/zz-cleanup.js
+++ /dev/null
@@ -1,11 +0,0 @@
-// remove the fixtures
-var tap = require("tap")
-, rimraf = require("rimraf")
-, path = require("path")
-
-tap.test("cleanup fixtures", function (t) {
-  rimraf(path.resolve(__dirname, "a"), function (er) {
-    t.ifError(er, "removed")
-    t.end()
-  })
-})
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/inherits/LICENSE b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/inherits/LICENSE
deleted file mode 100644
index dea3013..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/inherits/LICENSE
+++ /dev/null
@@ -1,16 +0,0 @@
-The ISC License
-
-Copyright (c) Isaac Z. Schlueter
-
-Permission to use, copy, modify, and/or distribute this software for any
-purpose with or without fee is hereby granted, provided that the above
-copyright notice and this permission notice appear in all copies.
-
-THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
-REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
-FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
-INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
-LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
-OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-PERFORMANCE OF THIS SOFTWARE.
-
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/inherits/README.md b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/inherits/README.md
deleted file mode 100644
index b1c5665..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/inherits/README.md
+++ /dev/null
@@ -1,42 +0,0 @@
-Browser-friendly inheritance fully compatible with standard node.js
-[inherits](http://nodejs.org/api/util.html#util_util_inherits_constructor_superconstructor).
-
-This package exports standard `inherits` from node.js `util` module in
-node environment, but also provides alternative browser-friendly
-implementation through [browser
-field](https://gist.github.com/shtylman/4339901). Alternative
-implementation is a literal copy of standard one located in standalone
-module to avoid requiring of `util`. It also has a shim for old
-browsers with no `Object.create` support.
-
-While keeping you sure you are using standard `inherits`
-implementation in node.js environment, it allows bundlers such as
-[browserify](https://github.com/substack/node-browserify) to not
-include full `util` package to your client code if all you need is
-just `inherits` function. It worth, because browser shim for `util`
-package is large and `inherits` is often the single function you need
-from it.
-
-It's recommended to use this package instead of
-`require('util').inherits` for any code that has chances to be used
-not only in node.js but in browser too.
-
-## usage
-
-```js
-var inherits = require('inherits');
-// then use exactly as the standard one
-```
-
-## note on version ~1.0
-
-Version ~1.0 had completely different motivation and is not compatible
-neither with 2.0 nor with standard node.js `inherits`.
-
-If you are using version ~1.0 and planning to switch to ~2.0, be
-careful:
-
-* new version uses `super_` instead of `super` for referencing
-  superclass
-* new version overwrites current prototype while old one preserves any
-  existing fields on it
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/inherits/inherits.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/inherits/inherits.js
deleted file mode 100644
index 29f5e24..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/inherits/inherits.js
+++ /dev/null
@@ -1 +0,0 @@
-module.exports = require('util').inherits
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/inherits/inherits_browser.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/inherits/inherits_browser.js
deleted file mode 100644
index c1e78a7..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/inherits/inherits_browser.js
+++ /dev/null
@@ -1,23 +0,0 @@
-if (typeof Object.create === 'function') {
-  // implementation from standard node.js 'util' module
-  module.exports = function inherits(ctor, superCtor) {
-    ctor.super_ = superCtor
-    ctor.prototype = Object.create(superCtor.prototype, {
-      constructor: {
-        value: ctor,
-        enumerable: false,
-        writable: true,
-        configurable: true
-      }
-    });
-  };
-} else {
-  // old school shim for old browsers
-  module.exports = function inherits(ctor, superCtor) {
-    ctor.super_ = superCtor
-    var TempCtor = function () {}
-    TempCtor.prototype = superCtor.prototype
-    ctor.prototype = new TempCtor()
-    ctor.prototype.constructor = ctor
-  }
-}
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/inherits/package.json b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/inherits/package.json
deleted file mode 100644
index 6c556ed..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/inherits/package.json
+++ /dev/null
@@ -1,50 +0,0 @@
-{
-  "name": "inherits",
-  "description": "Browser-friendly inheritance fully compatible with standard node.js inherits()",
-  "version": "2.0.1",
-  "keywords": [
-    "inheritance",
-    "class",
-    "klass",
-    "oop",
-    "object-oriented",
-    "inherits",
-    "browser",
-    "browserify"
-  ],
-  "main": "./inherits.js",
-  "browser": "./inherits_browser.js",
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/isaacs/inherits"
-  },
-  "license": "ISC",
-  "scripts": {
-    "test": "node test"
-  },
-  "bugs": {
-    "url": "https://github.com/isaacs/inherits/issues"
-  },
-  "_id": "inherits@2.0.1",
-  "dist": {
-    "shasum": "b17d08d326b4423e568eff719f91b0b1cbdf69f1",
-    "tarball": "http://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz"
-  },
-  "_from": "inherits@~2.0.1",
-  "_npmVersion": "1.3.8",
-  "_npmUser": {
-    "name": "isaacs",
-    "email": "i@izs.me"
-  },
-  "maintainers": [
-    {
-      "name": "isaacs",
-      "email": "i@izs.me"
-    }
-  ],
-  "directories": {},
-  "_shasum": "b17d08d326b4423e568eff719f91b0b1cbdf69f1",
-  "_resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
-  "readme": "ERROR: No README data found!",
-  "homepage": "https://github.com/isaacs/inherits"
-}
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/inherits/test.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/inherits/test.js
deleted file mode 100644
index fc53012..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/inherits/test.js
+++ /dev/null
@@ -1,25 +0,0 @@
-var inherits = require('./inherits.js')
-var assert = require('assert')
-
-function test(c) {
-  assert(c.constructor === Child)
-  assert(c.constructor.super_ === Parent)
-  assert(Object.getPrototypeOf(c) === Child.prototype)
-  assert(Object.getPrototypeOf(Object.getPrototypeOf(c)) === Parent.prototype)
-  assert(c instanceof Child)
-  assert(c instanceof Parent)
-}
-
-function Child() {
-  Parent.call(this)
-  test(this)
-}
-
-function Parent() {}
-
-inherits(Child, Parent)
-
-var c = new Child
-test(c)
-
-console.log('ok')
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/object-inspect/.travis.yml b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/object-inspect/.travis.yml
deleted file mode 100644
index cc4dba2..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/object-inspect/.travis.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-language: node_js
-node_js:
-  - "0.8"
-  - "0.10"
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/object-inspect/LICENSE b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/object-inspect/LICENSE
deleted file mode 100644
index ee27ba4..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/object-inspect/LICENSE
+++ /dev/null
@@ -1,18 +0,0 @@
-This software is released under the MIT license:
-
-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/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/object-inspect/example/all.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/object-inspect/example/all.js
deleted file mode 100644
index 6d2d4be..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/object-inspect/example/all.js
+++ /dev/null
@@ -1,17 +0,0 @@
-var inspect = require('../');
-var holes = [ 'a', 'b' ];
-holes[4] = 'e', holes[6] = 'g';
-var obj = {
-    a: 1,
-    b: [ 3, 4, undefined, null ],
-    c: undefined,
-    d: null,
-    e: {
-        regex: /^x/i,
-        buf: new Buffer('abc'),
-        holes: holes
-    },
-    now: new Date
-};
-obj.self = obj;
-console.log(inspect(obj));
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/object-inspect/example/circular.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/object-inspect/example/circular.js
deleted file mode 100644
index 1006d0c..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/object-inspect/example/circular.js
+++ /dev/null
@@ -1,4 +0,0 @@
-var inspect = require('../');
-var obj = { a: 1, b: [3,4] };
-obj.c = obj;
-console.log(inspect(obj));
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/object-inspect/example/fn.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/object-inspect/example/fn.js
deleted file mode 100644
index 4c00ba6..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/object-inspect/example/fn.js
+++ /dev/null
@@ -1,3 +0,0 @@
-var inspect = require('../');
-var obj = [ 1, 2, function f (n) { return n + 5 }, 4 ];
-console.log(inspect(obj));
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/object-inspect/example/inspect.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/object-inspect/example/inspect.js
deleted file mode 100644
index b5ad4d1..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/object-inspect/example/inspect.js
+++ /dev/null
@@ -1,7 +0,0 @@
-var inspect = require('../');
-
-var d = document.createElement('div');
-d.setAttribute('id', 'beep');
-d.innerHTML = '<b>wooo</b><i>iiiii</i>';
-
-console.log(inspect([ d, { a: 3, b : 4, c: [5,6,[7,[8,[9]]]] } ]));
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/object-inspect/index.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/object-inspect/index.js
deleted file mode 100644
index 2fa2225..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/object-inspect/index.js
+++ /dev/null
@@ -1,127 +0,0 @@
-module.exports = function inspect_ (obj, opts, depth, seen) {
-    if (!opts) opts = {};
-    
-    var maxDepth = opts.depth === undefined ? 5 : opts.depth;
-    if (depth === undefined) depth = 0;
-    if (depth > maxDepth && maxDepth > 0) return '...';
-    
-    if (seen === undefined) seen = [];
-    else if (indexOf(seen, obj) >= 0) {
-        return '[Circular]';
-    }
-    
-    function inspect (value, from) {
-        if (from) {
-            seen = seen.slice();
-            seen.push(from);
-        }
-        return inspect_(value, opts, depth + 1, seen);
-    }
-    
-    if (typeof obj === 'string') {
-        return inspectString(obj);
-    }
-    else if (typeof obj === 'function') {
-        var name = nameOf(obj);
-        return '[Function' + (name ? ': ' + name : '') + ']';
-    }
-    else if (obj === null) {
-        return 'null';
-    }
-    else if (isElement(obj)) {
-        var s = '<' + String(obj.nodeName).toLowerCase();
-        var attrs = obj.attributes || [];
-        for (var i = 0; i < attrs.length; i++) {
-            s += ' ' + attrs[i].name + '="' + quote(attrs[i].value) + '"';
-        }
-        s += '>';
-        if (obj.childNodes && obj.childNodes.length) s += '...';
-        s += '</' + String(obj.tagName).toLowerCase() + '>';
-        return s;
-    }
-    else if (isArray(obj)) {
-        if (obj.length === 0) return '[]';
-        var xs = Array(obj.length);
-        for (var i = 0; i < obj.length; i++) {
-            xs[i] = has(obj, i) ? inspect(obj[i], obj) : '';
-        }
-        return '[ ' + xs.join(', ') + ' ]';
-    }
-    else if (typeof obj === 'object' && typeof obj.inspect === 'function') {
-        return obj.inspect();
-    }
-    else if (typeof obj === 'object' && !isDate(obj) && !isRegExp(obj)) {
-        var xs = [], keys = [];
-        for (var key in obj) {
-            if (has(obj, key)) keys.push(key);
-        }
-        keys.sort();
-        for (var i = 0; i < keys.length; i++) {
-            var key = keys[i];
-            if (/[^\w$]/.test(key)) {
-                xs.push(inspect(key) + ': ' + inspect(obj[key], obj));
-            }
-            else xs.push(key + ': ' + inspect(obj[key], obj));
-        }
-        if (xs.length === 0) return '{}';
-        return '{ ' + xs.join(', ') + ' }';
-    }
-    else return String(obj);
-};
-
-function quote (s) {
-    return String(s).replace(/"/g, '&quot;');
-}
-
-function isArray (obj) {
-    return {}.toString.call(obj) === '[object Array]';
-}
-
-function isDate (obj) {
-    return {}.toString.call(obj) === '[object Date]';
-}
-
-function isRegExp (obj) {
-    return {}.toString.call(obj) === '[object RegExp]';
-}
-
-function has (obj, key) {
-    if (!{}.hasOwnProperty) return key in obj;
-    return {}.hasOwnProperty.call(obj, key);
-}
-
-function nameOf (f) {
-    if (f.name) return f.name;
-    var m = f.toString().match(/^function\s*([\w$]+)/);
-    if (m) return m[1];
-}
-
-function indexOf (xs, x) {
-    if (xs.indexOf) return xs.indexOf(x);
-    for (var i = 0, l = xs.length; i < l; i++) {
-        if (xs[i] === x) return i;
-    }
-    return -1;
-}
-
-function isElement (x) {
-    if (!x || typeof x !== 'object') return false;
-    if (typeof HTMLElement !== 'undefined') {
-        return x instanceof HTMLElement;
-    }
-    else return typeof x.nodeName === 'string'
-        && typeof x.getAttribute === 'function'
-    ;
-}
-
-function inspectString (str) {
-    var s = str.replace(/(['\\])/g, '\\$1').replace(/[\x00-\x1f]/g, lowbyte);
-    return "'" + s + "'";
-    
-    function lowbyte (c) {
-        var n = c.charCodeAt(0);
-        var x = { 8: 'b', 9: 't', 10: 'n', 12: 'f', 13: 'r' }[n];
-        if (x) return '\\' + x;
-        return '\\x' + (n < 0x10 ? '0' : '') + n.toString(16);
-    }
-}
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/object-inspect/package.json b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/object-inspect/package.json
deleted file mode 100644
index 613f9c7..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/object-inspect/package.json
+++ /dev/null
@@ -1,70 +0,0 @@
-{
-  "name": "object-inspect",
-  "version": "0.4.0",
-  "description": "string representations of objects in node and the browser",
-  "main": "index.js",
-  "devDependencies": {
-    "tape": "~2.6.0"
-  },
-  "scripts": {
-    "test": "tape test/*.js"
-  },
-  "testling": {
-    "files": [
-      "test/*.js",
-      "test/browser/*.js"
-    ],
-    "browsers": [
-      "ie/6..latest",
-      "chrome/latest",
-      "firefox/latest",
-      "safari/latest",
-      "opera/latest",
-      "iphone/latest",
-      "ipad/latest",
-      "android/latest"
-    ]
-  },
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/substack/object-inspect.git"
-  },
-  "homepage": "https://github.com/substack/object-inspect",
-  "keywords": [
-    "inspect",
-    "util.inspect",
-    "object",
-    "stringify",
-    "pretty"
-  ],
-  "author": {
-    "name": "James Halliday",
-    "email": "mail@substack.net",
-    "url": "http://substack.net"
-  },
-  "license": "MIT",
-  "bugs": {
-    "url": "https://github.com/substack/object-inspect/issues"
-  },
-  "_id": "object-inspect@0.4.0",
-  "dist": {
-    "shasum": "f5157c116c1455b243b06ee97703392c5ad89fec",
-    "tarball": "http://registry.npmjs.org/object-inspect/-/object-inspect-0.4.0.tgz"
-  },
-  "_from": "object-inspect@~0.4.0",
-  "_npmVersion": "1.4.4",
-  "_npmUser": {
-    "name": "substack",
-    "email": "mail@substack.net"
-  },
-  "maintainers": [
-    {
-      "name": "substack",
-      "email": "mail@substack.net"
-    }
-  ],
-  "directories": {},
-  "_shasum": "f5157c116c1455b243b06ee97703392c5ad89fec",
-  "_resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-0.4.0.tgz",
-  "readme": "ERROR: No README data found!"
-}
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/object-inspect/readme.markdown b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/object-inspect/readme.markdown
deleted file mode 100644
index 41959a4..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/object-inspect/readme.markdown
+++ /dev/null
@@ -1,59 +0,0 @@
-# object-inspect
-
-string representations of objects in node and the browser
-
-[![testling badge](https://ci.testling.com/substack/object-inspect.png)](https://ci.testling.com/substack/object-inspect)
-
-[![build status](https://secure.travis-ci.org/substack/object-inspect.png)](http://travis-ci.org/substack/object-inspect)
-
-# example
-
-## circular
-
-``` js
-var inspect = require('object-inspect');
-var obj = { a: 1, b: [3,4] };
-obj.c = obj;
-console.log(inspect(obj));
-```
-
-## dom element
-
-``` js
-var inspect = require('object-inspect');
-
-var d = document.createElement('div');
-d.setAttribute('id', 'beep');
-d.innerHTML = '<b>wooo</b><i>iiiii</i>';
-
-console.log(inspect([ d, { a: 3, b : 4, c: [5,6,[7,[8,[9]]]] } ]));
-```
-
-output:
-
-```
-[ <div id="beep">...</div>, { a: 3, b: 4, c: [ 5, 6, [ 7, [ 8, [ ... ] ] ] ] } ]
-```
-
-# methods
-
-``` js
-var inspect = require('object-inspect')
-```
-
-## var s = inspect(obj, opts={})
-
-Return a string `s` with the string representation of `obj` up to a depth of
-`opts.depth`.
-
-# install
-
-With [npm](https://npmjs.org) do:
-
-```
-npm install object-inspect
-```
-
-# license
-
-MIT
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/object-inspect/test/browser/dom.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/object-inspect/test/browser/dom.js
deleted file mode 100644
index 30d0b7e..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/object-inspect/test/browser/dom.js
+++ /dev/null
@@ -1,15 +0,0 @@
-var inspect = require('../../');
-var test = require('tape');
-
-test('dom element', function (t) {
-    t.plan(1);
-    
-    var d = document.createElement('div');
-    d.setAttribute('id', 'beep');
-    d.innerHTML = '<b>wooo</b><i>iiiii</i>';
-    
-    t.equal(
-        inspect([ d, { a: 3, b : 4, c: [5,6,[7,[8,[9]]]] } ]),
-        '[ <div id="beep">...</div>, { a: 3, b: 4, c: [ 5, 6, [ 7, [ 8, [ ... ] ] ] ] } ]'
-    );
-});
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/object-inspect/test/circular.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/object-inspect/test/circular.js
deleted file mode 100644
index 28598a7..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/object-inspect/test/circular.js
+++ /dev/null
@@ -1,9 +0,0 @@
-var inspect = require('../');
-var test = require('tape');
-
-test('circular', function (t) {
-    t.plan(1);
-    var obj = { a: 1, b: [3,4] };
-    obj.c = obj;
-    t.equal(inspect(obj), '{ a: 1, b: [ 3, 4 ], c: [Circular] }');
-});
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/object-inspect/test/fn.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/object-inspect/test/fn.js
deleted file mode 100644
index cdf97dd..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/object-inspect/test/fn.js
+++ /dev/null
@@ -1,8 +0,0 @@
-var inspect = require('../');
-var test = require('tape');
-
-test('function', function (t) {
-    t.plan(1);
-    var obj = [ 1, 2, function f (n) { return n + 5 }, 4 ];
-    t.equal(inspect(obj), '[ 1, 2, [Function: f], 4 ]');
-});
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/object-inspect/test/holes.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/object-inspect/test/holes.js
deleted file mode 100644
index ae54de4..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/object-inspect/test/holes.js
+++ /dev/null
@@ -1,15 +0,0 @@
-var test = require('tape');
-var inspect = require('../');
-
-var xs = [ 'a', 'b' ];
-xs[5] = 'f';
-xs[7] = 'j';
-xs[8] = 'k';
-
-test('holes', function (t) {
-    t.plan(1);
-    t.equal(
-        inspect(xs),
-        "[ 'a', 'b', , , , 'f', , 'j', 'k' ]"
-    );
-});
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/object-inspect/test/lowbyte.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/object-inspect/test/lowbyte.js
deleted file mode 100644
index debd59c..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/object-inspect/test/lowbyte.js
+++ /dev/null
@@ -1,12 +0,0 @@
-var test = require('tape');
-var inspect = require('../');
-
-var obj = { x: 'a\r\nb', y: '\5! \x1f \022' };
-
-test('interpolate low bytes', function (t) {
-    t.plan(1);
-    t.equal(
-        inspect(obj),
-        "{ x: 'a\\r\\nb', y: '\\x05! \\x1f \\x12' }"
-    );
-});
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/object-inspect/test/undef.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/object-inspect/test/undef.js
deleted file mode 100644
index 833238f..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/object-inspect/test/undef.js
+++ /dev/null
@@ -1,12 +0,0 @@
-var test = require('tape');
-var inspect = require('../');
-
-var obj = { a: 1, b: [ 3, 4, undefined, null ], c: undefined, d: null };
-
-test('undef and null', function (t) {
-    t.plan(1);
-    t.equal(
-        inspect(obj),
-        '{ a: 1, b: [ 3, 4, undefined, null ], c: undefined, d: null }'
-    );
-});
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/resumer/.travis.yml b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/resumer/.travis.yml
deleted file mode 100644
index cc4dba2..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/resumer/.travis.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-language: node_js
-node_js:
-  - "0.8"
-  - "0.10"
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/resumer/LICENSE b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/resumer/LICENSE
deleted file mode 100644
index ee27ba4..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/resumer/LICENSE
+++ /dev/null
@@ -1,18 +0,0 @@
-This software is released under the MIT license:
-
-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/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/resumer/example/resume.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/resumer/example/resume.js
deleted file mode 100644
index d04e61a..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/resumer/example/resume.js
+++ /dev/null
@@ -1,8 +0,0 @@
-var resumer = require('../');
-createStream().pipe(process.stdout);
-
-function createStream () {
-    var stream = resumer();
-    stream.queue('beep boop\n');
-    return stream;
-}
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/resumer/index.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/resumer/index.js
deleted file mode 100644
index 14de798..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/resumer/index.js
+++ /dev/null
@@ -1,29 +0,0 @@
-var through = require('through');
-var nextTick = typeof setImmediate !== 'undefined'
-    ? setImmediate
-    : process.nextTick
-;
-
-module.exports = function (write, end) {
-    var tr = through(write, end);
-    tr.pause();
-    var resume = tr.resume;
-    var pause = tr.pause;
-    var paused = false;
-    
-    tr.pause = function () {
-        paused = true;
-        return pause.apply(this, arguments);
-    };
-    
-    tr.resume = function () {
-        paused = false;
-        return resume.apply(this, arguments);
-    };
-    
-    nextTick(function () {
-        if (!paused) tr.resume();
-    });
-    
-    return tr;
-};
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/resumer/package.json b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/resumer/package.json
deleted file mode 100644
index bede0fb..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/resumer/package.json
+++ /dev/null
@@ -1,71 +0,0 @@
-{
-  "name": "resumer",
-  "version": "0.0.0",
-  "description": "a through stream that starts paused and resumes on the next tick",
-  "main": "index.js",
-  "dependencies": {
-    "through": "~2.3.4"
-  },
-  "devDependencies": {
-    "tap": "~0.4.0",
-    "tape": "~1.0.2",
-    "concat-stream": "~0.1.1"
-  },
-  "scripts": {
-    "test": "tap test/*.js"
-  },
-  "testling": {
-    "files": "test/*.js",
-    "browsers": [
-      "ie/6..latest",
-      "chrome/20..latest",
-      "firefox/10..latest",
-      "safari/latest",
-      "opera/11.0..latest",
-      "iphone/6",
-      "ipad/6"
-    ]
-  },
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/substack/resumer.git"
-  },
-  "homepage": "https://github.com/substack/resumer",
-  "keywords": [
-    "through",
-    "stream",
-    "pause",
-    "resume"
-  ],
-  "author": {
-    "name": "James Halliday",
-    "email": "mail@substack.net",
-    "url": "http://substack.net"
-  },
-  "license": "MIT",
-  "readme": "# resumer\n\nReturn a through stream that starts out paused and resumes on the next tick,\nunless somebody called `.pause()`.\n\nThis module has the same signature as\n[through](https://npmjs.com/package/through).\n\n[![browser support](https://ci.testling.com/substack/resumer.png)](http://ci.testling.com/substack/resumer)\n\n[![build status](https://secure.travis-ci.org/substack/resumer.png)](http://travis-ci.org/substack/resumer)\n\n# example\n\n``` js\nvar resumer = require('resumer');\nvar s = createStream();\ns.pipe(process.stdout);\n\nfunction createStream () {\n    var stream = resumer();\n    stream.queue('beep boop\\n');\n    return stream;\n}\n```\n\n```\n$ node example/resume.js\nbeep boop\n```\n\n# methods\n\n``` js\nvar resumer = require('resumer')\n```\n\n## resumer(write, end)\n\nReturn a new through stream from `write` and `end`, which default to\npass-through `.queue()` functions if not specified.\n\nThe stream starts out paused and will be resumed on the next tick unless you\ncall `.pause()` first.\n\n`write` and `end` get passed directly through to\n[through](https://npmjs.com/package/through).\n\n# install\n\nWith [npm](https://npmjs.org) do:\n\n```\nnpm install resumer\n```\n\n# license\n\nMIT\n",
-  "readmeFilename": "readme.markdown",
-  "_id": "resumer@0.0.0",
-  "dist": {
-    "shasum": "f1e8f461e4064ba39e82af3cdc2a8c893d076759",
-    "tarball": "http://registry.npmjs.org/resumer/-/resumer-0.0.0.tgz"
-  },
-  "_from": "resumer@~0.0.0",
-  "_npmVersion": "1.2.2",
-  "_npmUser": {
-    "name": "substack",
-    "email": "mail@substack.net"
-  },
-  "maintainers": [
-    {
-      "name": "substack",
-      "email": "mail@substack.net"
-    }
-  ],
-  "directories": {},
-  "_shasum": "f1e8f461e4064ba39e82af3cdc2a8c893d076759",
-  "_resolved": "https://registry.npmjs.org/resumer/-/resumer-0.0.0.tgz",
-  "bugs": {
-    "url": "https://github.com/substack/resumer/issues"
-  }
-}
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/resumer/readme.markdown b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/resumer/readme.markdown
deleted file mode 100644
index 5d9df66..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/resumer/readme.markdown
+++ /dev/null
@@ -1,59 +0,0 @@
-# resumer
-
-Return a through stream that starts out paused and resumes on the next tick,
-unless somebody called `.pause()`.
-
-This module has the same signature as
-[through](https://npmjs.com/package/through).
-
-[![browser support](https://ci.testling.com/substack/resumer.png)](http://ci.testling.com/substack/resumer)
-
-[![build status](https://secure.travis-ci.org/substack/resumer.png)](http://travis-ci.org/substack/resumer)
-
-# example
-
-``` js
-var resumer = require('resumer');
-var s = createStream();
-s.pipe(process.stdout);
-
-function createStream () {
-    var stream = resumer();
-    stream.queue('beep boop\n');
-    return stream;
-}
-```
-
-```
-$ node example/resume.js
-beep boop
-```
-
-# methods
-
-``` js
-var resumer = require('resumer')
-```
-
-## resumer(write, end)
-
-Return a new through stream from `write` and `end`, which default to
-pass-through `.queue()` functions if not specified.
-
-The stream starts out paused and will be resumed on the next tick unless you
-call `.pause()` first.
-
-`write` and `end` get passed directly through to
-[through](https://npmjs.com/package/through).
-
-# install
-
-With [npm](https://npmjs.org) do:
-
-```
-npm install resumer
-```
-
-# license
-
-MIT
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/resumer/test/resume.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/resumer/test/resume.js
deleted file mode 100644
index 1eaecac..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/resumer/test/resume.js
+++ /dev/null
@@ -1,37 +0,0 @@
-var test = require('tape');
-var resumer = require('../');
-var concat = require('concat-stream');
-
-test('implicit resume', function (t) {
-    t.plan(1);
-    
-    var s = createStream();
-    s.pipe(concat(function (err, body) {
-        t.equal(body, 'beep boop\n');
-    }));
-});
-
-test('pause/resume', function (t) {
-    t.plan(2);
-    
-    var s = createStream();
-    s.pause();
-    
-    var paused = true;
-    setTimeout(function () {
-        paused = false;
-        s.resume();
-    }, 100);
-    
-    s.pipe(concat(function (err, body) {
-        t.equal(paused, false);
-        t.equal(body, 'beep boop\n');
-    }));
-});
-
-function createStream () {
-    var stream = resumer();
-    stream.queue('beep boop\n');
-    stream.queue(null);
-    return stream;
-}
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/resumer/test/through.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/resumer/test/through.js
deleted file mode 100644
index ddcaf48..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/resumer/test/through.js
+++ /dev/null
@@ -1,36 +0,0 @@
-var test = require('tape');
-var resumer = require('../');
-var concat = require('concat-stream');
-
-test('through write/end', function (t) {
-    t.plan(2);
-    
-    var s = createStream();
-    
-    s.on('okok', function () {
-        t.ok(true);
-    });
-    
-    s.pipe(concat(function (err, body) {
-        t.equal(body, 'BEGIN\nRAWR\nEND\n');
-    }));
-    
-    setTimeout(function () {
-        s.end('rawr\n');
-    }, 50);
-});
-
-function createStream () {
-    var stream = resumer(write, end);
-    stream.queue('BEGIN\n');
-    return stream;
-    
-    function write (x) {
-        this.queue(String(x).toUpperCase());
-    }
-    function end () {
-        this.emit('okok');
-        this.queue('END\n');
-        this.queue(null);
-    }
-}
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/through/.travis.yml b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/through/.travis.yml
deleted file mode 100644
index c693a93..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/through/.travis.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-language: node_js
-node_js:
-  - 0.6
-  - 0.8
-  - "0.10"
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/through/LICENSE.APACHE2 b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/through/LICENSE.APACHE2
deleted file mode 100644
index 6366c04..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/through/LICENSE.APACHE2
+++ /dev/null
@@ -1,15 +0,0 @@
-Apache License, Version 2.0
-
-Copyright (c) 2011 Dominic Tarr
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/through/LICENSE.MIT b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/through/LICENSE.MIT
deleted file mode 100644
index 6eafbd7..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/through/LICENSE.MIT
+++ /dev/null
@@ -1,24 +0,0 @@
-The MIT License
-
-Copyright (c) 2011 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/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/through/index.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/through/index.js
deleted file mode 100644
index ca5fc59..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/through/index.js
+++ /dev/null
@@ -1,108 +0,0 @@
-var Stream = require('stream')
-
-// through
-//
-// a stream that does nothing but re-emit the input.
-// useful for aggregating a series of changing but not ending streams into one stream)
-
-exports = module.exports = through
-through.through = through
-
-//create a readable writable stream.
-
-function through (write, end, opts) {
-  write = write || function (data) { this.queue(data) }
-  end = end || function () { this.queue(null) }
-
-  var ended = false, destroyed = false, buffer = [], _ended = false
-  var stream = new Stream()
-  stream.readable = stream.writable = true
-  stream.paused = false
-
-//  stream.autoPause   = !(opts && opts.autoPause   === false)
-  stream.autoDestroy = !(opts && opts.autoDestroy === false)
-
-  stream.write = function (data) {
-    write.call(this, data)
-    return !stream.paused
-  }
-
-  function drain() {
-    while(buffer.length && !stream.paused) {
-      var data = buffer.shift()
-      if(null === data)
-        return stream.emit('end')
-      else
-        stream.emit('data', data)
-    }
-  }
-
-  stream.queue = stream.push = function (data) {
-//    console.error(ended)
-    if(_ended) return stream
-    if(data === null) _ended = true
-    buffer.push(data)
-    drain()
-    return stream
-  }
-
-  //this will be registered as the first 'end' listener
-  //must call destroy next tick, to make sure we're after any
-  //stream piped from here.
-  //this is only a problem if end is not emitted synchronously.
-  //a nicer way to do this is to make sure this is the last listener for 'end'
-
-  stream.on('end', function () {
-    stream.readable = false
-    if(!stream.writable && stream.autoDestroy)
-      process.nextTick(function () {
-        stream.destroy()
-      })
-  })
-
-  function _end () {
-    stream.writable = false
-    end.call(stream)
-    if(!stream.readable && stream.autoDestroy)
-      stream.destroy()
-  }
-
-  stream.end = function (data) {
-    if(ended) return
-    ended = true
-    if(arguments.length) stream.write(data)
-    _end() // will emit or queue
-    return stream
-  }
-
-  stream.destroy = function () {
-    if(destroyed) return
-    destroyed = true
-    ended = true
-    buffer.length = 0
-    stream.writable = stream.readable = false
-    stream.emit('close')
-    return stream
-  }
-
-  stream.pause = function () {
-    if(stream.paused) return
-    stream.paused = true
-    return stream
-  }
-
-  stream.resume = function () {
-    if(stream.paused) {
-      stream.paused = false
-      stream.emit('resume')
-    }
-    drain()
-    //may have become paused again,
-    //as drain emits 'data'.
-    if(!stream.paused)
-      stream.emit('drain')
-    return stream
-  }
-  return stream
-}
-
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/through/package.json b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/through/package.json
deleted file mode 100644
index a6d08b9..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/through/package.json
+++ /dev/null
@@ -1,66 +0,0 @@
-{
-  "name": "through",
-  "version": "2.3.8",
-  "description": "simplified stream construction",
-  "main": "index.js",
-  "scripts": {
-    "test": "set -e; for t in test/*.js; do node $t; done"
-  },
-  "devDependencies": {
-    "stream-spec": "~0.3.5",
-    "tape": "~2.3.2",
-    "from": "~0.1.3"
-  },
-  "keywords": [
-    "stream",
-    "streams",
-    "user-streams",
-    "pipe"
-  ],
-  "author": {
-    "name": "Dominic Tarr",
-    "email": "dominic.tarr@gmail.com",
-    "url": "dominictarr.com"
-  },
-  "license": "MIT",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/dominictarr/through.git"
-  },
-  "homepage": "https://github.com/dominictarr/through",
-  "testling": {
-    "browsers": [
-      "ie/8..latest",
-      "ff/15..latest",
-      "chrome/20..latest",
-      "safari/5.1..latest"
-    ],
-    "files": "test/*.js"
-  },
-  "gitHead": "2c5a6f9a0cc54da759b6e10964f2081c358e49dc",
-  "bugs": {
-    "url": "https://github.com/dominictarr/through/issues"
-  },
-  "_id": "through@2.3.8",
-  "_shasum": "0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5",
-  "_from": "through@~2.3.4",
-  "_npmVersion": "2.12.0",
-  "_nodeVersion": "2.3.1",
-  "_npmUser": {
-    "name": "dominictarr",
-    "email": "dominic.tarr@gmail.com"
-  },
-  "maintainers": [
-    {
-      "name": "dominictarr",
-      "email": "dominic.tarr@gmail.com"
-    }
-  ],
-  "dist": {
-    "shasum": "0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5",
-    "tarball": "http://registry.npmjs.org/through/-/through-2.3.8.tgz"
-  },
-  "directories": {},
-  "_resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
-  "readme": "ERROR: No README data found!"
-}
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/through/readme.markdown b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/through/readme.markdown
deleted file mode 100644
index cb34c81..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/through/readme.markdown
+++ /dev/null
@@ -1,64 +0,0 @@
-#through
-
-[![build status](https://secure.travis-ci.org/dominictarr/through.png)](http://travis-ci.org/dominictarr/through)
-[![testling badge](https://ci.testling.com/dominictarr/through.png)](https://ci.testling.com/dominictarr/through)
-
-Easy way to create a `Stream` that is both `readable` and `writable`. 
-
-* Pass in optional `write` and `end` methods.
-* `through` takes care of pause/resume logic if you use `this.queue(data)` instead of `this.emit('data', data)`.
-* Use `this.pause()` and `this.resume()` to manage flow.
-* Check `this.paused` to see current flow state. (`write` always returns `!this.paused`).
-
-This function is the basis for most of the synchronous streams in 
-[event-stream](http://github.com/dominictarr/event-stream).
-
-``` js
-var through = require('through')
-
-through(function write(data) {
-    this.queue(data) //data *must* not be null
-  },
-  function end () { //optional
-    this.queue(null)
-  })
-```
-
-Or, can also be used _without_ buffering on pause, use `this.emit('data', data)`,
-and this.emit('end')
-
-``` js
-var through = require('through')
-
-through(function write(data) {
-    this.emit('data', data)
-    //this.pause() 
-  },
-  function end () { //optional
-    this.emit('end')
-  })
-```
-
-## Extended Options
-
-You will probably not need these 99% of the time.
-
-### autoDestroy=false
-
-By default, `through` emits close when the writable
-and readable side of the stream has ended.
-If that is not desired, set `autoDestroy=false`.
-
-``` js
-var through = require('through')
-
-//like this
-var ts = through(write, end, {autoDestroy: false})
-//or like this
-var ts = through(write, end)
-ts.autoDestroy = false
-```
-
-## License
-
-MIT / Apache2
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/through/test/async.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/through/test/async.js
deleted file mode 100644
index 46bdbae..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/through/test/async.js
+++ /dev/null
@@ -1,28 +0,0 @@
-var from = require('from')
-var through = require('../')
-
-var tape = require('tape')
-
-tape('simple async example', function (t) {
- 
-  var n = 0, expected = [1,2,3,4,5], actual = []
-  from(expected)
-  .pipe(through(function(data) {
-    this.pause()
-    n ++
-    setTimeout(function(){
-      console.log('pushing data', data)
-      this.push(data)
-      this.resume()
-    }.bind(this), 300)
-  })).pipe(through(function(data) {
-    console.log('pushing data second time', data);
-    this.push(data)
-  })).on('data', function (d) {
-    actual.push(d)
-  }).on('end', function() {
-    t.deepEqual(actual, expected)
-    t.end()
-  })
-
-})
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/through/test/auto-destroy.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/through/test/auto-destroy.js
deleted file mode 100644
index 9a8fd00..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/through/test/auto-destroy.js
+++ /dev/null
@@ -1,30 +0,0 @@
-var test = require('tape')
-var through = require('../')
-
-// must emit end before close.
-
-test('end before close', function (assert) {
-  var ts = through()
-  ts.autoDestroy = false
-  var ended = false, closed = false
-
-  ts.on('end', function () {
-    assert.ok(!closed)
-    ended = true
-  })
-  ts.on('close', function () {
-    assert.ok(ended)
-    closed = true
-  })
-
-  ts.write(1)
-  ts.write(2)
-  ts.write(3)
-  ts.end()
-  assert.ok(ended)
-  assert.notOk(closed)
-  ts.destroy()
-  assert.ok(closed)
-  assert.end()
-})
-
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/through/test/buffering.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/through/test/buffering.js
deleted file mode 100644
index b0084bf..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/through/test/buffering.js
+++ /dev/null
@@ -1,71 +0,0 @@
-var test = require('tape')
-var through = require('../')
-
-// must emit end before close.
-
-test('buffering', function(assert) {
-  var ts = through(function (data) {
-    this.queue(data)
-  }, function () {
-    this.queue(null)
-  })
-
-  var ended = false,  actual = []
-
-  ts.on('data', actual.push.bind(actual))
-  ts.on('end', function () {
-    ended = true
-  })
-
-  ts.write(1)
-  ts.write(2)
-  ts.write(3)
-  assert.deepEqual(actual, [1, 2, 3])
-  ts.pause()
-  ts.write(4)
-  ts.write(5)
-  ts.write(6)
-  assert.deepEqual(actual, [1, 2, 3])
-  ts.resume()
-  assert.deepEqual(actual, [1, 2, 3, 4, 5, 6])
-  ts.pause()
-  ts.end()
-  assert.ok(!ended)
-  ts.resume()
-  assert.ok(ended)
-  assert.end()
-})
-
-test('buffering has data in queue, when ends', function (assert) {
-
-  /*
-   * If stream ends while paused with data in the queue,
-   * stream should still emit end after all data is written
-   * on resume.
-   */
-
-  var ts = through(function (data) {
-    this.queue(data)
-  }, function () {
-    this.queue(null)
-  })
-
-  var ended = false,  actual = []
-
-  ts.on('data', actual.push.bind(actual))
-  ts.on('end', function () {
-    ended = true
-  })
-
-  ts.pause()
-  ts.write(1)
-  ts.write(2)
-  ts.write(3)
-  ts.end()
-  assert.deepEqual(actual, [], 'no data written yet, still paused')
-  assert.ok(!ended, 'end not emitted yet, still paused')
-  ts.resume()
-  assert.deepEqual(actual, [1, 2, 3], 'resumed, all data should be delivered')
-  assert.ok(ended, 'end should be emitted once all data was delivered')
-  assert.end();
-})
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/through/test/end.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/through/test/end.js
deleted file mode 100644
index fa113f5..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/through/test/end.js
+++ /dev/null
@@ -1,45 +0,0 @@
-var test = require('tape')
-var through = require('../')
-
-// must emit end before close.
-
-test('end before close', function (assert) {
-  var ts = through()
-  var ended = false, closed = false
-
-  ts.on('end', function () {
-    assert.ok(!closed)
-    ended = true
-  })
-  ts.on('close', function () {
-    assert.ok(ended)
-    closed = true
-  })
-
-  ts.write(1)
-  ts.write(2)
-  ts.write(3)
-  ts.end()
-  assert.ok(ended)
-  assert.ok(closed)
-  assert.end()
-})
-
-test('end only once', function (t) {
-
-  var ts = through()
-  var ended = false, closed = false
-
-  ts.on('end', function () {
-    t.equal(ended, false)
-    ended = true
-  })
-
-  ts.queue(null)
-  ts.queue(null)
-  ts.queue(null)
-
-  ts.resume()
-
-  t.end()
-})
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/through/test/index.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/through/test/index.js
deleted file mode 100644
index 96da82f..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/node_modules/through/test/index.js
+++ /dev/null
@@ -1,133 +0,0 @@
-
-var test = require('tape')
-var spec = require('stream-spec')
-var through = require('../')
-
-/*
-  I'm using these two functions, and not streams and pipe
-  so there is less to break. if this test fails it must be
-  the implementation of _through_
-*/
-
-function write(array, stream) {
-  array = array.slice()
-  function next() {
-    while(array.length)
-      if(stream.write(array.shift()) === false)
-        return stream.once('drain', next)
-    
-    stream.end()
-  }
-
-  next()
-}
-
-function read(stream, callback) {
-  var actual = []
-  stream.on('data', function (data) {
-    actual.push(data)
-  })
-  stream.once('end', function () {
-    callback(null, actual)
-  })
-  stream.once('error', function (err) {
-    callback(err)
-  })
-}
-
-test('simple defaults', function(assert) {
-
-  var l = 1000
-    , expected = []
-
-  while(l--) expected.push(l * Math.random())
-
-  var t = through()
-  var s = spec(t).through().pausable()
-
-  read(t, function (err, actual) {
-    assert.ifError(err)
-    assert.deepEqual(actual, expected)
-    assert.end()
-  })
-
-  t.on('close', s.validate)
-
-  write(expected, t)
-});
-
-test('simple functions', function(assert) {
-
-  var l = 1000
-    , expected = [] 
-
-  while(l--) expected.push(l * Math.random())
-
-  var t = through(function (data) {
-      this.emit('data', data*2)
-    }) 
-  var s = spec(t).through().pausable()
-      
-
-  read(t, function (err, actual) {
-    assert.ifError(err)
-    assert.deepEqual(actual, expected.map(function (data) {
-      return data*2
-    }))
-    assert.end()
-  })
-
-  t.on('close', s.validate)
-
-  write(expected, t)
-})
-
-test('pauses', function(assert) {
-
-  var l = 1000
-    , expected = [] 
-
-  while(l--) expected.push(l) //Math.random())
-
-  var t = through()    
- 
-  var s = spec(t)
-      .through()
-      .pausable()
-
-  t.on('data', function () {
-    if(Math.random() > 0.1) return
-    t.pause()
-    process.nextTick(function () {
-      t.resume()
-    })
-  })
-
-  read(t, function (err, actual) {
-    assert.ifError(err)
-    assert.deepEqual(actual, expected)
-  })
-
-  t.on('close', function () {
-    s.validate()
-    assert.end()
-  })
-
-  write(expected, t)
-})
-
-test('does not soft-end on `undefined`', function(assert) {
-  var stream = through()
-    , count = 0
-
-  stream.on('data', function (data) {
-    count++
-  })
-
-  stream.write(undefined)
-  stream.write(undefined)
-
-  assert.equal(count, 2)
-
-  assert.end()
-})
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/package.json b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/package.json
deleted file mode 100644
index 998806b..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/package.json
+++ /dev/null
@@ -1,88 +0,0 @@
-{
-  "name": "tape",
-  "version": "3.5.0",
-  "description": "tap-producing test harness for node and browsers",
-  "main": "index.js",
-  "bin": {
-    "tape": "./bin/tape"
-  },
-  "directories": {
-    "example": "example",
-    "test": "test"
-  },
-  "dependencies": {
-    "deep-equal": "~0.2.0",
-    "defined": "~0.0.0",
-    "glob": "~3.2.9",
-    "inherits": "~2.0.1",
-    "object-inspect": "~0.4.0",
-    "resumer": "~0.0.0",
-    "through": "~2.3.4"
-  },
-  "devDependencies": {
-    "tap": "~0.4.8",
-    "falafel": "~0.3.1",
-    "concat-stream": "~1.4.1"
-  },
-  "scripts": {
-    "test": "tap test/*.js"
-  },
-  "testling": {
-    "files": "test/browser/*.js",
-    "browsers": [
-      "ie/6..latest",
-      "chrome/20..latest",
-      "firefox/10..latest",
-      "safari/latest",
-      "opera/11.0..latest",
-      "iphone/6",
-      "ipad/6"
-    ]
-  },
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/substack/tape.git"
-  },
-  "homepage": "https://github.com/substack/tape",
-  "keywords": [
-    "tap",
-    "test",
-    "harness",
-    "assert",
-    "browser"
-  ],
-  "author": {
-    "name": "James Halliday",
-    "email": "mail@substack.net",
-    "url": "http://substack.net"
-  },
-  "license": "MIT",
-  "gitHead": "51f2f97d7eade23b1e23b7cfea37f449ade5b9c3",
-  "bugs": {
-    "url": "https://github.com/substack/tape/issues"
-  },
-  "_id": "tape@3.5.0",
-  "_shasum": "aebb061388104ad0cb407be842782049d64624f8",
-  "_from": "tape@^3.5.0",
-  "_npmVersion": "1.4.28",
-  "_npmUser": {
-    "name": "raynos",
-    "email": "raynos2@gmail.com"
-  },
-  "maintainers": [
-    {
-      "name": "substack",
-      "email": "mail@substack.net"
-    },
-    {
-      "name": "raynos",
-      "email": "raynos2@gmail.com"
-    }
-  ],
-  "dist": {
-    "shasum": "aebb061388104ad0cb407be842782049d64624f8",
-    "tarball": "http://registry.npmjs.org/tape/-/tape-3.5.0.tgz"
-  },
-  "_resolved": "https://registry.npmjs.org/tape/-/tape-3.5.0.tgz",
-  "readme": "ERROR: No README data found!"
-}
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/readme.markdown b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/readme.markdown
deleted file mode 100644
index 7a3263f..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/readme.markdown
+++ /dev/null
@@ -1,317 +0,0 @@
-# tape
-
-tap-producing test harness for node and browsers
-
-[![browser support](https://ci.testling.com/substack/tape.png)](http://ci.testling.com/substack/tape)
-
-[![build status](https://secure.travis-ci.org/substack/tape.png)](http://travis-ci.org/substack/tape)
-
-![tape](http://substack.net/images/tape_drive.png)
-
-# example
-
-``` js
-var test = require('tape');
-
-test('timing test', function (t) {
-    t.plan(2);
-    
-    t.equal(typeof Date.now, 'function');
-    var start = Date.now();
-    
-    setTimeout(function () {
-        t.equal(Date.now() - start, 100);
-    }, 100);
-});
-```
-
-```
-$ node example/timing.js
-TAP version 13
-# timing test
-ok 1 should be equal
-not ok 2 should be equal
-  ---
-    operator: equal
-    expected: 100
-    actual:   107
-  ...
-
-1..2
-# tests 2
-# pass  1
-# fail  1
-```
-
-# pretty reporters
-
-The default TAP output is good for machines and humans that are robots.
-
-If you want a more colorful / pretty output there are lots of modules on npm
-that will output something pretty if you pipe TAP into them:
-
- - https://github.com/scottcorgan/tap-spec
- - https://github.com/scottcorgan/tap-dot
- - https://github.com/substack/faucet
- - https://github.com/juliangruber/tap-bail
- - https://github.com/kirbysayshi/tap-browser-color
- - https://github.com/gummesson/tap-json
- - https://github.com/gummesson/tap-min
- - https://github.com/calvinmetcalf/tap-nyan
- - https://www.npmjs.org/package/tap-pessimist
- - https://github.com/toolness/tap-prettify
- - https://github.com/shuhei/colortape
- - https://github.com/aghassemi/tap-xunit
-
-To use them, try `node test/index.js | tap-spec` or pipe it into one
-of the modules of your choice!
-
-# uncaught exceptions
-
-By default, uncaught exceptions in your tests will not be intercepted, and will cause tape to crash. If you find this behavior undesirable, use [tape-catch](https://github.com/michaelrhodes/tape-catch) to report any exceptions as TAP errors.
-
-# methods
-
-The assertion methods in tape are heavily influenced or copied from the methods
-in [node-tap](https://github.com/isaacs/node-tap).
-
-```
-var test = require('tape')
-```
-
-## test([name], [opts], cb)
-
-Create a new test with an optional `name` string and optional `opts` object. 
-`cb(t)` fires with the new test object `t` once all preceeding tests have
-finished. Tests execute serially.
-
-Available `opts` options are:
-- opts.skip = true/false. See test.skip.
-- opts.timeout = 500. Set a timeout for the test, after which it will fail. 
-  See test.timeoutAfter.
-
-If you forget to `t.plan()` out how many assertions you are going to run and you
-don't call `t.end()` explicitly, your test will hang.
-
-## test.skip(name, cb)
-
-Generate a new test that will be skipped over.
-
-## t.plan(n)
-
-Declare that `n` assertions should be run. `t.end()` will be called
-automatically after the `n`th assertion. If there are any more assertions after
-the `n`th, or after `t.end()` is called, they will generate errors.
-
-## t.end(err)
-
-Declare the end of a test explicitly. If `err` is passed in `t.end` will assert
-that it is falsey.
-
-## t.fail(msg)
-
-Generate a failing assertion with a message `msg`.
-
-## t.pass(msg)
-
-Generate a passing assertion with a message `msg`.
-
-## t.timeoutAfter(ms)
-
-Automatically timeout the test after X ms.
-
-## t.skip(msg)
- 
-Generate an assertion that will be skipped over.
-
-## t.ok(value, msg)
-
-Assert that `value` is truthy with an optional description message `msg`.
-
-Aliases: `t.true()`, `t.assert()`
-
-## t.notOk(value, msg)
-
-Assert that `value` is falsy with an optional description message `msg`.
-
-Aliases: `t.false()`, `t.notok()`
-
-## t.error(err, msg)
-
-Assert that `err` is falsy. If `err` is non-falsy, use its `err.message` as the
-description message.
-
-Aliases: `t.ifError()`, `t.ifErr()`, `t.iferror()`
-
-## t.equal(actual, expected, msg)
-
-Assert that `actual === expected` with an optional description `msg`.
-
-Aliases: `t.equals()`, `t.isEqual()`, `t.is()`, `t.strictEqual()`,
-`t.strictEquals()`
-
-## t.notEqual(actual, expected, msg)
-
-Assert that `actual !== expected` with an optional description `msg`.
-
-Aliases: `t.notEquals()`, `t.notStrictEqual()`, `t.notStrictEquals()`,
-`t.isNotEqual()`, `t.isNot()`, `t.not()`, `t.doesNotEqual()`, `t.isInequal()`
-
-## t.deepEqual(actual, expected, msg)
-
-Assert that `actual` and `bexpected` have the same structure and nested values using
-[node's deepEqual() algorithm](https://github.com/substack/node-deep-equal)
-with strict comparisons (`===`) on leaf nodes and an optional description
-`msg`.
-
-Aliases: `t.deepEquals()`, `t.isEquivalent()`, `t.same()`
-
-## t.notDeepEqual(actual, expected, msg)
-
-Assert that `actual` and `expected` do not have the same structure and nested values using
-[node's deepEqual() algorithm](https://github.com/substack/node-deep-equal)
-with strict comparisons (`===`) on leaf nodes and an optional description
-`msg`.
-
-Aliases: `t.notEquivalent()`, `t.notDeeply()`, `t.notSame()`,
-`t.isNotDeepEqual()`, `t.isNotDeeply()`, `t.isNotEquivalent()`,
-`t.isInequivalent()`
-
-## t.deepLooseEqual(actual, expected, msg)
-
-Assert that `actual` and `expected` have the same structure and nested values using
-[node's deepEqual() algorithm](https://github.com/substack/node-deep-equal)
-with loose comparisons (`==`) on leaf nodes and an optional description `msg`.
-
-Aliases: `t.looseEqual()`, `t.looseEquals()`
-
-## t.notDeepLooseEqual(actual, expected, msg)
-
-Assert that `actual` and `expected` do not have the same structure and nested values using
-[node's deepEqual() algorithm](https://github.com/substack/node-deep-equal)
-with loose comparisons (`==`) on leaf nodes and an optional description `msg`.
-
-Aliases: `t.notLooseEqual()`, `t.notLooseEquals()`
-
-## t.throws(fn, expected, msg)
-
-Assert that the function call `fn()` throws an exception. `expected`, if present, must be a `RegExp` or `Function`.
-
-## t.doesNotThrow(fn, expected, msg)
-
-Assert that the function call `fn()` does not throw an exception.
-
-## t.test(name, cb)
-
-Create a subtest with a new test handle `st` from `cb(st)` inside the current
-test `t`. `cb(st)` will only fire when `t` finishes. Additional tests queued up
-after `t` will not be run until all subtests finish.
-
-## var htest = test.createHarness()
-
-Create a new test harness instance, which is a function like `test()`, but with
-a new pending stack and test state.
-
-By default the TAP output goes to `console.log()`. You can pipe the output to
-someplace else if you `htest.createStream().pipe()` to a destination stream on
-the first tick.
-
-## test.only(name, cb)
-
-Like `test(name, cb)` except if you use `.only` this is the only test case
-that will run for the entire process, all other test cases using tape will
-be ignored
-
-## var stream = test.createStream(opts)
-
-Create a stream of output, bypassing the default output stream that writes
-messages to `console.log()`. By default `stream` will be a text stream of TAP
-output, but you can get an object stream instead by setting `opts.objectMode` to
-`true`.
-
-### tap stream reporter
-
-You can create your own custom test reporter using this `createStream()` api:
-
-``` js
-var test = require('tape');
-var path = require('path');
-
-test.createStream().pipe(process.stdout);
-
-process.argv.slice(2).forEach(function (file) {
-    require(path.resolve(file));
-});
-```
-
-You could substitute `process.stdout` for whatever other output stream you want,
-like a network connection or a file.
-
-Pass in test files to run as arguments:
-
-```
-$ node tap.js test/x.js test/y.js
-TAP version 13
-# (anonymous)
-not ok 1 should be equal
-  ---
-    operator: equal
-    expected: "boop"
-    actual:   "beep"
-  ...
-# (anonymous)
-ok 2 should be equal
-ok 3 (unnamed assert)
-# wheee
-ok 4 (unnamed assert)
-
-1..4
-# tests 4
-# pass  3
-# fail  1
-```
-
-### object stream reporter
-
-Here's how you can render an object stream instead of TAP:
-
-``` js
-var test = require('tape');
-var path = require('path');
-
-test.createStream({ objectMode: true }).on('data', function (row) {
-    console.log(JSON.stringify(row))
-});
-
-process.argv.slice(2).forEach(function (file) {
-    require(path.resolve(file));
-});
-```
-
-The output for this runner is:
-
-```
-$ node object.js test/x.js test/y.js
-{"type":"test","name":"(anonymous)","id":0}
-{"id":0,"ok":false,"name":"should be equal","operator":"equal","actual":"beep","expected":"boop","error":{},"test":0,"type":"assert"}
-{"type":"end","test":0}
-{"type":"test","name":"(anonymous)","id":1}
-{"id":0,"ok":true,"name":"should be equal","operator":"equal","actual":2,"expected":2,"test":1,"type":"assert"}
-{"id":1,"ok":true,"name":"(unnamed assert)","operator":"ok","actual":true,"expected":true,"test":1,"type":"assert"}
-{"type":"end","test":1}
-{"type":"test","name":"wheee","id":2}
-{"id":0,"ok":true,"name":"(unnamed assert)","operator":"ok","actual":true,"expected":true,"test":2,"type":"assert"}
-{"type":"end","test":2}
-```
-
-# install
-
-With [npm](https://npmjs.org) do:
-
-```
-npm install tape
-```
-
-# license
-
-MIT
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/add-subtest-async.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/add-subtest-async.js
deleted file mode 100644
index 74b4d8a..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/add-subtest-async.js
+++ /dev/null
@@ -1,11 +0,0 @@
-var test = require('../')
-
-test('parent', function (t) {
-  t.pass('parent');
-  setTimeout(function () {
-    t.test('child', function (t) {
-      t.pass('child');
-      t.end();
-    });
-  }, 100)
-})
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/array.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/array.js
deleted file mode 100644
index 2d49863..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/array.js
+++ /dev/null
@@ -1,68 +0,0 @@
-var falafel = require('falafel');
-var tape = require('../');
-var tap = require('tap');
-
-tap.test('array test', function (tt) {
-    tt.plan(1);
-    
-    var test = tape.createHarness();
-    var tc = tap.createConsumer();
-    
-    var rows = [];
-    tc.on('data', function (r) { rows.push(r) });
-    tc.on('end', function () {
-        var rs = rows.map(function (r) {
-            if (r && typeof r === 'object') {
-                return { id : r.id, ok : r.ok, name : r.name.trim() };
-            }
-            else return r;
-        });
-        tt.same(rs, [
-            'TAP version 13',
-            'array',
-            { id: 1, ok: true, name: 'should be equivalent' },
-            { id: 2, ok: true, name: 'should be equivalent' },
-            { id: 3, ok: true, name: 'should be equivalent' },
-            { id: 4, ok: true, name: 'should be equivalent' },
-            { id: 5, ok: true, name: 'should be equivalent' },
-            'tests 5',
-            'pass  5',
-            'ok'
-        ]);
-    });
-    
-    test.createStream().pipe(tc);
-    
-    test('array', function (t) {
-        t.plan(5);
-        
-        var src = '(' + function () {
-            var xs = [ 1, 2, [ 3, 4 ] ];
-            var ys = [ 5, 6 ];
-            g([ xs, ys ]);
-        } + ')()';
-        
-        var output = falafel(src, function (node) {
-            if (node.type === 'ArrayExpression') {
-                node.update('fn(' + node.source() + ')');
-            }
-        });
-        
-        var arrays = [
-            [ 3, 4 ],
-            [ 1, 2, [ 3, 4 ] ],
-            [ 5, 6 ],
-            [ [ 1, 2, [ 3, 4 ] ], [ 5, 6 ] ],
-        ];
-        
-        Function(['fn','g'], output)(
-            function (xs) {
-                t.same(arrays.shift(), xs);
-                return xs;
-            },
-            function (xs) {
-                t.same(xs, [ [ 1, 2, [ 3, 4 ] ], [ 5, 6 ] ]);
-            }
-        );
-    });
-});
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/bound.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/bound.js
deleted file mode 100644
index d398195..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/bound.js
+++ /dev/null
@@ -1,10 +0,0 @@
-var test = require('../');
-
-test('bind works', function (t) {
-  t.plan(2);
-  var equal = t.equal;
-  var deepEqual = t.deepEqual;
-  equal(3, 3);
-  deepEqual([4], [4]);
-  t.end();
-});
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/browser/asserts.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/browser/asserts.js
deleted file mode 100644
index a1b24f6..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/browser/asserts.js
+++ /dev/null
@@ -1,9 +0,0 @@
-var test = require('../../');
-
-test(function (t) {
-    t.plan(4);
-    t.ok(true);
-    t.equal(3, 1+2);
-    t.deepEqual([1,2,[3,4]], [1,2,[3,4]]);
-    t.notDeepEqual([1,2,[3,4,5]], [1,2,[3,4]]);
-});
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/child_ordering.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/child_ordering.js
deleted file mode 100644
index 12efafe..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/child_ordering.js
+++ /dev/null
@@ -1,54 +0,0 @@
-var test = require('../');
-
-var childRan = false;
-
-test('parent', function(t) {
-    t.test('child', function(t) {
-        childRan = true;
-        t.pass('child ran');
-        t.end();
-    });
-    t.end();
-});
-
-test('uncle', function(t) {
-    t.ok(childRan, 'Child should run before next top-level test');
-    t.end();
-});
-
-var grandParentRan = false;
-var parentRan = false;
-var grandChildRan = false;
-test('grandparent', function(t) {
-    t.ok(!grandParentRan, 'grand parent ran twice');
-    grandParentRan = true;
-    t.test('parent', function(t) {
-        t.ok(!parentRan, 'parent ran twice');
-        parentRan = true;
-        t.test('grandchild', function(t) {
-            t.ok(!grandChildRan, 'grand child ran twice');
-            grandChildRan = true;
-            t.pass('grand child ran');
-            t.end();
-        });
-        t.pass('parent ran');
-        t.end();
-    });
-    t.test('other parent', function(t) {
-        t.ok(parentRan, 'first parent runs before second parent');
-        t.ok(grandChildRan, 'grandchild runs before second parent');
-        t.end();
-    });
-    t.pass('grandparent ran');
-    t.end();
-});
-
-test('second grandparent', function(t) {
-    t.ok(grandParentRan, 'grandparent ran');
-    t.ok(parentRan, 'parent ran');
-    t.ok(grandChildRan, 'grandchild ran');
-    t.pass('other grandparent ran');
-    t.end();
-});
-
-// vim: set softtabstop=4 shiftwidth=4:
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/circular-things.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/circular-things.js
deleted file mode 100644
index 1a0368d..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/circular-things.js
+++ /dev/null
@@ -1,43 +0,0 @@
-var tape = require('../');
-var tap = require('tap');
-
-tap.test('circular test', function (assert) {
-    var test = tape.createHarness({ exit : false });
-    var tc = tap.createConsumer();
-
-    var rows = [];
-    tc.on('data', function (r) { rows.push(r) });
-    tc.on('end', function () {
-        // console.log("rs", rows)
-
-        // console.log("deepEqual?")
-
-        assert.same(rows, [
-            "TAP version 13"
-            , "circular"
-            , { id: 1
-                , ok: false
-                , name: " should be equal"
-                , operator: "equal"
-                , expected: "{}"
-                , actual: '{ circular: [Circular] }'
-            }
-            , "tests 1"
-            , "pass  0"
-            , "fail  1"
-        ])
-        assert.end()
-    })
-
-    // tt.equal(10, 10)
-    // tt.end()
-
-    test.createStream().pipe(tc);
-
-    test("circular", function (t) {
-        t.plan(1)
-        var circular = {}
-        circular.circular = circular
-        t.equal(circular, {})
-    })
-})
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/deep.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/deep.js
deleted file mode 100644
index 02f3681..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/deep.js
+++ /dev/null
@@ -1,9 +0,0 @@
-var test = require('../');
-
-test('deep strict equal', function (t) {
-    t.notDeepEqual(
-        [ { a: '3' } ],
-        [ { a: 3 } ]
-    );
-    t.end();
-});
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/double_end.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/double_end.js
deleted file mode 100644
index c405d45..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/double_end.js
+++ /dev/null
@@ -1,27 +0,0 @@
-var test = require('tap').test;
-var concat = require('concat-stream');
-var spawn = require('child_process').spawn;
-
-test(function (t) {
-    t.plan(2);
-    var ps = spawn(process.execPath, [ __dirname + '/double_end/double.js' ]);
-    ps.on('exit', function (code) {
-        t.equal(code, 1);
-    });
-    ps.stdout.pipe(concat(function (body) {
-        t.equal(body.toString('utf8'), [
-            'TAP version 13',
-            '# double end',
-            'ok 1 should be equal',
-            'not ok 2 .end() called twice',
-            '  ---',
-            '    operator: fail',
-            '  ...',
-            '',
-            '1..2',
-            '# tests 2',
-            '# pass  1',
-            '# fail  1',
-        ].join('\n') + '\n\n');
-    }));
-});
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/double_end/double.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/double_end/double.js
deleted file mode 100644
index 4473482..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/double_end/double.js
+++ /dev/null
@@ -1,9 +0,0 @@
-var test = require('../../');
-
-test('double end', function (t) {
-    t.equal(1 + 1, 2);
-    t.end();
-    setTimeout(function () {
-        t.end();
-    }, 5);
-});
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/end-as-callback.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/end-as-callback.js
deleted file mode 100644
index 6d24a0c..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/end-as-callback.js
+++ /dev/null
@@ -1,66 +0,0 @@
-var tap = require("tap");
-var tape = require("../");
-
-tap.test("tape assert.end as callback", function (tt) {
-    var test = tape.createHarness({ exit: false })
-    var tc = tap.createConsumer()
-
-    var rows = []
-    tc.on("data", function (r) { rows.push(r) })
-    tc.on("end", function () {
-        var rs = rows.map(function (r) {
-            return r && typeof r === "object" ?
-                { id: r.id, ok: r.ok, name: r.name.trim() } :
-                r
-        })
-
-        tt.deepEqual(rs, [
-            "TAP version 13",
-            "do a task and write",
-            { id: 1, ok: true, name: "null" },
-            { id: 2, ok: true, name: "should be equal" },
-            { id: 3, ok: true, name: "null" },
-            "do a task and write fail",
-            { id: 4, ok: true, name: "null" },
-            { id: 5, ok: true, name: "should be equal" },
-            { id: 6, ok: false, name: "Error: fail" },
-            "tests 6",
-            "pass  5",
-            "fail  1"
-        ])
-
-        tt.end()
-    })
-
-    test.createStream().pipe(tc)
-
-    test("do a task and write", function (assert) {
-        fakeAsyncTask("foo", function (err, value) {
-            assert.ifError(err)
-            assert.equal(value, "taskfoo")
-
-            fakeAsyncWrite("bar", assert.end)
-        })
-    })
-
-    test("do a task and write fail", function (assert) {
-        fakeAsyncTask("bar", function (err, value) {
-            assert.ifError(err)
-            assert.equal(value, "taskbar")
-
-            fakeAsyncWriteFail("baz", assert.end)
-        })
-    })
-})
-
-function fakeAsyncTask(name, cb) {
-    cb(null, "task" + name)
-}
-
-function fakeAsyncWrite(name, cb) {
-    cb(null)
-}
-
-function fakeAsyncWriteFail(name, cb) {
-    cb(new Error("fail"))
-}
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/exit.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/exit.js
deleted file mode 100644
index 7f7c5d0..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/exit.js
+++ /dev/null
@@ -1,142 +0,0 @@
-var tap = require('tap');
-var spawn = require('child_process').spawn;
-
-tap.test('exit ok', function (t) {
-    t.plan(2);
-    
-    var tc = tap.createConsumer();
-    
-    var rows = [];
-    tc.on('data', function (r) { rows.push(r) });
-    tc.on('end', function () {
-        var rs = rows.map(function (r) {
-            if (r && typeof r === 'object') {
-                return { id : r.id, ok : r.ok, name : r.name.trim() };
-            }
-            else return r;
-        });
-        t.same(rs, [
-            'TAP version 13',
-            'array',
-            { id: 1, ok: true, name: 'should be equivalent' },
-            { id: 2, ok: true, name: 'should be equivalent' },
-            { id: 3, ok: true, name: 'should be equivalent' },
-            { id: 4, ok: true, name: 'should be equivalent' },
-            { id: 5, ok: true, name: 'should be equivalent' },
-            'tests 5',
-            'pass  5',
-            'ok'
-        ]);
-    });
-    
-    var ps = spawn(process.execPath, [ __dirname + '/exit/ok.js' ]);
-    ps.stdout.pipe(tc);
-    ps.on('exit', function (code) {
-        t.equal(code, 0);
-    });
-});
-
-tap.test('exit fail', function (t) {
-    t.plan(2);
-    
-    var tc = tap.createConsumer();
-    
-    var rows = [];
-    tc.on('data', function (r) { rows.push(r) });
-    tc.on('end', function () {
-        var rs = rows.map(function (r) {
-            if (r && typeof r === 'object') {
-                return { id : r.id, ok : r.ok, name : r.name.trim() };
-            }
-            else return r;
-        });
-        t.same(rs, [
-            'TAP version 13',
-            'array',
-            { id: 1, ok: true, name: 'should be equivalent' },
-            { id: 2, ok: true, name: 'should be equivalent' },
-            { id: 3, ok: true, name: 'should be equivalent' },
-            { id: 4, ok: true, name: 'should be equivalent' },
-            { id: 5, ok: false, name: 'should be equivalent' },
-            'tests 5',
-            'pass  4',
-            'fail  1'
-        ]);
-    });
-    
-    var ps = spawn(process.execPath, [ __dirname + '/exit/fail.js' ]);
-    ps.stdout.pipe(tc);
-    ps.on('exit', function (code) {
-        t.notEqual(code, 0);
-    });
-});
-
-tap.test('too few exit', function (t) {
-    t.plan(2);
-    
-    var tc = tap.createConsumer();
-    
-    var rows = [];
-    tc.on('data', function (r) { rows.push(r) });
-    tc.on('end', function () {
-        var rs = rows.map(function (r) {
-            if (r && typeof r === 'object') {
-                return { id : r.id, ok : r.ok, name : r.name.trim() };
-            }
-            else return r;
-        });
-        t.same(rs, [
-            'TAP version 13',
-            'array',
-            { id: 1, ok: true, name: 'should be equivalent' },
-            { id: 2, ok: true, name: 'should be equivalent' },
-            { id: 3, ok: true, name: 'should be equivalent' },
-            { id: 4, ok: true, name: 'should be equivalent' },
-            { id: 5, ok: true, name: 'should be equivalent' },
-            { id: 6, ok: false, name: 'plan != count' },
-            'tests 6',
-            'pass  5',
-            'fail  1'
-        ]);
-    });
-    
-    var ps = spawn(process.execPath, [ __dirname + '/exit/too_few.js' ]);
-    ps.stdout.pipe(tc);
-    ps.on('exit', function (code) {
-        t.notEqual(code, 0);
-    });
-});
-
-tap.test('more planned in a second test', function (t) {
-    t.plan(2);
-    
-    var tc = tap.createConsumer();
-    
-    var rows = [];
-    tc.on('data', function (r) { rows.push(r) });
-    tc.on('end', function () {
-        var rs = rows.map(function (r) {
-            if (r && typeof r === 'object') {
-                return { id : r.id, ok : r.ok, name : r.name.trim() };
-            }
-            else return r;
-        });
-        t.same(rs, [
-            'TAP version 13',
-            'first',
-            { id: 1, ok: true, name: '(unnamed assert)' },
-            'second',
-            { id: 2, ok: true, name: '(unnamed assert)' },
-            { id: 3, ok: false, name: 'plan != count' },
-            'tests 3',
-            'pass  2',
-            'fail  1'
-        ]);
-    });
-    
-    var ps = spawn(process.execPath, [ __dirname + '/exit/second.js' ]);
-    ps.stdout.pipe(tc);
-    ps.on('exit', function (code) {
-        t.notEqual(code, 0);
-    });
-});
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/exit/fail.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/exit/fail.js
deleted file mode 100644
index d7fd3ce..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/exit/fail.js
+++ /dev/null
@@ -1,35 +0,0 @@
-var test = require('../../');
-var falafel = require('falafel');
-
-test('array', function (t) {
-    t.plan(5);
-    
-    var src = '(' + function () {
-        var xs = [ 1, 2, [ 3, 4 ] ];
-        var ys = [ 5, 6 ];
-        g([ xs, ys ]);
-    } + ')()';
-    
-    var output = falafel(src, function (node) {
-        if (node.type === 'ArrayExpression') {
-            node.update('fn(' + node.source() + ')');
-        }
-    });
-    
-    var arrays = [
-        [ 3, 4 ],
-        [ 1, 2, [ 3, 4 ] ],
-        [ 5, 6 ],
-        [ [ 1, 2, [ 3, 4 ] ], [ 5, 6 ] ],
-    ];
-    
-    Function(['fn','g'], output)(
-        function (xs) {
-            t.same(arrays.shift(), xs);
-            return xs;
-        },
-        function (xs) {
-            t.same(xs, [ [ 1, 2, [ 3, 4444 ] ], [ 5, 6 ] ]);
-        }
-    );
-});
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/exit/ok.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/exit/ok.js
deleted file mode 100644
index a02c7b6..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/exit/ok.js
+++ /dev/null
@@ -1,35 +0,0 @@
-var falafel = require('falafel');
-var test = require('../../');
-
-test('array', function (t) {
-    t.plan(5);
-    
-    var src = '(' + function () {
-        var xs = [ 1, 2, [ 3, 4 ] ];
-        var ys = [ 5, 6 ];
-        g([ xs, ys ]);
-    } + ')()';
-    
-    var output = falafel(src, function (node) {
-        if (node.type === 'ArrayExpression') {
-            node.update('fn(' + node.source() + ')');
-        }
-    });
-    
-    var arrays = [
-        [ 3, 4 ],
-        [ 1, 2, [ 3, 4 ] ],
-        [ 5, 6 ],
-        [ [ 1, 2, [ 3, 4 ] ], [ 5, 6 ] ],
-    ];
-    
-    Function(['fn','g'], output)(
-        function (xs) {
-            t.same(arrays.shift(), xs);
-            return xs;
-        },
-        function (xs) {
-            t.same(xs, [ [ 1, 2, [ 3, 4 ] ], [ 5, 6 ] ]);
-        }
-    );
-});
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/exit/second.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/exit/second.js
deleted file mode 100644
index 8a206bb..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/exit/second.js
+++ /dev/null
@@ -1,11 +0,0 @@
-var test = require('../../');
-
-test('first', function (t) {
-    t.plan(1);
-    t.ok(true);
-});
-
-test('second', function (t) {
-    t.plan(2);
-    t.ok(true);
-});
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/exit/too_few.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/exit/too_few.js
deleted file mode 100644
index 8e60ce5..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/exit/too_few.js
+++ /dev/null
@@ -1,35 +0,0 @@
-var falafel = require('falafel');
-var test = require('../../');
-
-test('array', function (t) {
-    t.plan(6);
-    
-    var src = '(' + function () {
-        var xs = [ 1, 2, [ 3, 4 ] ];
-        var ys = [ 5, 6 ];
-        g([ xs, ys ]);
-    } + ')()';
-    
-    var output = falafel(src, function (node) {
-        if (node.type === 'ArrayExpression') {
-            node.update('fn(' + node.source() + ')');
-        }
-    });
-    
-    var arrays = [
-        [ 3, 4 ],
-        [ 1, 2, [ 3, 4 ] ],
-        [ 5, 6 ],
-        [ [ 1, 2, [ 3, 4 ] ], [ 5, 6 ] ],
-    ];
-    
-    Function(['fn','g'], output)(
-        function (xs) {
-            t.same(arrays.shift(), xs);
-            return xs;
-        },
-        function (xs) {
-            t.same(xs, [ [ 1, 2, [ 3, 4 ] ], [ 5, 6 ] ]);
-        }
-    );
-});
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/fail.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/fail.js
deleted file mode 100644
index d56045a..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/fail.js
+++ /dev/null
@@ -1,68 +0,0 @@
-var falafel = require('falafel');
-var tape = require('../');
-var tap = require('tap');
-
-tap.test('array test', function (tt) {
-    tt.plan(1);
-    
-    var test = tape.createHarness({ exit : false });
-    var tc = tap.createConsumer();
-    
-    var rows = [];
-    tc.on('data', function (r) { rows.push(r) });
-    tc.on('end', function () {
-        var rs = rows.map(function (r) {
-            if (r && typeof r === 'object') {
-                return { id : r.id, ok : r.ok, name : r.name.trim() };
-            }
-            else return r;
-        });
-        tt.same(rs, [
-            'TAP version 13',
-            'array',
-            { id: 1, ok: true, name: 'should be equivalent' },
-            { id: 2, ok: true, name: 'should be equivalent' },
-            { id: 3, ok: true, name: 'should be equivalent' },
-            { id: 4, ok: true, name: 'should be equivalent' },
-            { id: 5, ok: false, name: 'should be equivalent' },
-            'tests 5',
-            'pass  4',
-            'fail  1'
-        ]);
-    });
-    
-    test.createStream().pipe(tc);
-    
-    test('array', function (t) {
-        t.plan(5);
-        
-        var src = '(' + function () {
-            var xs = [ 1, 2, [ 3, 4 ] ];
-            var ys = [ 5, 6 ];
-            g([ xs, ys ]);
-        } + ')()';
-        
-        var output = falafel(src, function (node) {
-            if (node.type === 'ArrayExpression') {
-                node.update('fn(' + node.source() + ')');
-            }
-        });
-        
-        var arrays = [
-            [ 3, 4 ],
-            [ 1, 2, [ 3, 4 ] ],
-            [ 5, 6 ],
-            [ [ 1, 2, [ 3, 4 ] ], [ 5, 6 ] ],
-        ];
-        
-        Function(['fn','g'], output)(
-            function (xs) {
-                t.same(arrays.shift(), xs);
-                return xs;
-            },
-            function (xs) {
-                t.same(xs, [ [ 1, 2, [ 3, 4444 ] ], [ 5, 6 ] ]);
-            }
-        );
-    });
-});
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/many.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/many.js
deleted file mode 100644
index 10556e5..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/many.js
+++ /dev/null
@@ -1,8 +0,0 @@
-var test = require('../');
-
-test('many tests', function (t) {
-    t.plan(100);
-    for (var i = 0; i < 100; i++) {
-        setTimeout(function () { t.pass() }, Math.random() * 50);
-    }
-});
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/max_listeners.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/max_listeners.js
deleted file mode 100644
index 5edfb15..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/max_listeners.js
+++ /dev/null
@@ -1,7 +0,0 @@
-var spawn = require('child_process').spawn;
-var ps = spawn(process.execPath, [ __dirname + '/max_listeners/source.js' ]);
-ps.stdout.pipe(process.stdout, { end : false });
-
-ps.stderr.on('data', function (buf) {
-    console.log('not ok ' + buf);
-});
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/max_listeners/source.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/max_listeners/source.js
deleted file mode 100644
index 839a327..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/max_listeners/source.js
+++ /dev/null
@@ -1,5 +0,0 @@
-var test = require('../../');
-
-for (var i = 0; i < 11; i ++) {
-    test(function (t) { t.end() });
-}
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/nested-async-plan-noend.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/nested-async-plan-noend.js
deleted file mode 100644
index 6f8cfdd..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/nested-async-plan-noend.js
+++ /dev/null
@@ -1,36 +0,0 @@
-var test = require('../');
-
-test('Harness async test support', function(t) {
-  t.plan(3);
-
-  t.ok(true, 'sync child A');
-
-  t.test('sync child B', function(tt) {
-    tt.plan(2);
-
-    setTimeout(function(){
-      tt.test('async grandchild A', function(ttt) {
-        ttt.plan(1);
-        ttt.ok(true);
-      });
-    }, 50);
-
-    setTimeout(function() {
-      tt.test('async grandchild B', function(ttt) {
-        ttt.plan(1);
-        ttt.ok(true);
-      });
-    }, 100);
-  });
-
-  setTimeout(function() {
-    t.test('async child', function(tt) {
-      tt.plan(2);
-      tt.ok(true, 'sync grandchild in async child A');
-      tt.test('sync grandchild in async child B', function(ttt) {
-        ttt.plan(1);
-        ttt.ok(true);
-      });
-    });
-  }, 200);
-});
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/nested-sync-noplan-noend.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/nested-sync-noplan-noend.js
deleted file mode 100644
index a206c50..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/nested-sync-noplan-noend.js
+++ /dev/null
@@ -1,50 +0,0 @@
-var tape = require('../');
-var tap = require('tap');
-
-tap.test('nested sync test without plan or end', function (tt) {
-    tt.plan(1);
-
-    var test = tape.createHarness();
-    var tc = tap.createConsumer();
-
-    var rows = [];
-    tc.on('data', function (r) { rows.push(r) });
-    tc.on('end', function () {
-        var rs = rows.map(function (r) {
-            if (r && typeof r === 'object') {
-                return { id : r.id, ok : r.ok, name : r.name.trim() };
-            }
-            else return r;
-        });
-        var expected = [
-            'TAP version 13',
-            'nested without plan or end',
-            'first',
-            { id: 1, ok: true, name: '(unnamed assert)' },
-            'second',
-            { id: 2, ok: true, name: '(unnamed assert)' },
-            'tests 2',
-            'pass  2',
-            'ok'
-        ]
-        tt.same(rs, expected);
-    });
-
-    test.createStream().pipe(tc);
-
-    test('nested without plan or end', function(t) {
-        t.test('first', function(q) {
-            setTimeout(function first() { 
-                q.ok(true);
-                q.end() 
-            }, 10);
-        });
-        t.test('second', function(q) {
-            setTimeout(function second() { 
-                q.ok(true);
-                q.end() 
-            }, 10);
-        });
-    });
-
-});
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/nested.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/nested.js
deleted file mode 100644
index 673465d..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/nested.js
+++ /dev/null
@@ -1,89 +0,0 @@
-var falafel = require('falafel');
-var tape = require('../');
-var tap = require('tap');
-
-tap.test('array test', function (tt) {
-    tt.plan(1);
-    
-    var test = tape.createHarness();
-    var tc = tap.createConsumer();
-    
-    var rows = [];
-    tc.on('data', function (r) { rows.push(r) });
-    tc.on('end', function () {
-        var rs = rows.map(function (r) {
-            if (r && typeof r === 'object') {
-                return { id : r.id, ok : r.ok, name : r.name.trim() };
-            }
-            else return r;
-        });
-        tt.same(rs, [
-            'TAP version 13',
-            'nested array test',
-            { id: 1, ok: true, name: 'should be equivalent' },
-            { id: 2, ok: true, name: 'should be equivalent' },
-            { id: 3, ok: true, name: 'should be equivalent' },
-            { id: 4, ok: true, name: 'should be equivalent' },
-            { id: 5, ok: true, name: 'should be equivalent' },
-            'inside test',
-            { id: 6, ok: true, name: '(unnamed assert)' },
-            { id: 7, ok: true, name: '(unnamed assert)' },
-            'another',
-            { id: 8, ok: true, name: '(unnamed assert)' },
-            'tests 8',
-            'pass  8',
-            'ok'
-        ]);
-    });
-    
-    test.createStream().pipe(tc);
-    
-    test('nested array test', function (t) {
-        t.plan(6);
-        
-        var src = '(' + function () {
-            var xs = [ 1, 2, [ 3, 4 ] ];
-            var ys = [ 5, 6 ];
-            g([ xs, ys ]);
-        } + ')()';
-        
-        var output = falafel(src, function (node) {
-            if (node.type === 'ArrayExpression') {
-                node.update('fn(' + node.source() + ')');
-            }
-        });
-        
-        t.test('inside test', function (q) {
-            q.plan(2);
-            q.ok(true);
-            
-            setTimeout(function () {
-                q.ok(true);
-            }, 100);
-        });
-        
-        var arrays = [
-            [ 3, 4 ],
-            [ 1, 2, [ 3, 4 ] ],
-            [ 5, 6 ],
-            [ [ 1, 2, [ 3, 4 ] ], [ 5, 6 ] ],
-        ];
-        
-        Function(['fn','g'], output)(
-            function (xs) {
-                t.same(arrays.shift(), xs);
-                return xs;
-            },
-            function (xs) {
-                t.same(xs, [ [ 1, 2, [ 3, 4 ] ], [ 5, 6 ] ]);
-            }
-        );
-    });
-
-    test('another', function (t) {
-        t.plan(1);
-        setTimeout(function () {
-            t.ok(true);
-        }, 50);
-    });
-});
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/nested2.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/nested2.js
deleted file mode 100644
index 58ae8f3..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/nested2.js
+++ /dev/null
@@ -1,19 +0,0 @@
-var test = require('../');
-
-test(function(t) {
-    var i = 0
-    t.test('setup', function(t) {
-        process.nextTick(function() {
-            t.equal(i, 0, 'called once')
-            i++
-            t.end()
-        })
-    })
-
-
-    t.test('teardown', function(t) {
-        t.end()
-    })
-
-    t.end()
-})
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/no_callback.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/no_callback.js
deleted file mode 100644
index 760ff26..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/no_callback.js
+++ /dev/null
@@ -1,3 +0,0 @@
-var test = require('../');
-
-test('No callback.');
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/only.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/only.js
deleted file mode 100644
index 9e6bc26..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/only.js
+++ /dev/null
@@ -1,53 +0,0 @@
-var tap = require('tap');
-var tape = require('../');
-
-tap.test('tape only test', function (tt) {
-    var test = tape.createHarness({ exit: false });
-    var tc = tap.createConsumer();
-    var ran = [];
-
-    var rows = []
-    tc.on('data', function (r) { rows.push(r) })
-    tc.on('end', function () {
-        var rs = rows.map(function (r) {
-            if (r && typeof r === 'object') {
-                return { id: r.id, ok: r.ok, name: r.name.trim() };
-            }
-            else {
-                return r;
-            }
-        })
-
-        tt.deepEqual(rs, [
-            'TAP version 13',
-            'run success',
-            { id: 1, ok: true, name: 'assert name'},
-            'tests 1',
-            'pass  1',
-            'ok'
-        ])
-        tt.deepEqual(ran, [ 3 ]);
-
-        tt.end()
-    })
-
-    test.createStream().pipe(tc)
-
-    test("never run fail", function (t) {
-        ran.push(1);
-        t.equal(true, false)
-        t.end()
-    })
-
-    test("never run success", function (t) {
-        ran.push(2);
-        t.equal(true, true)
-        t.end()
-    })
-
-    test.only("run success", function (t) {
-        ran.push(3);
-        t.ok(true, "assert name")
-        t.end()
-    })
-})
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/only2.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/only2.js
deleted file mode 100644
index fcf4f43..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/only2.js
+++ /dev/null
@@ -1,9 +0,0 @@
-var test = require('../');
-
-test('only2 test 1', function (t) {
-    t.end();
-});
-
-test.only('only2 test 2', function (t) {
-    t.end();
-});
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/only3.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/only3.js
deleted file mode 100644
index b192a4e..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/only3.js
+++ /dev/null
@@ -1,15 +0,0 @@
-var test = require('../');
-
-test('only3 test 1', function (t) {
-    t.fail('not 1');
-    t.end();
-});
-
-test.only('only3 test 2', function (t) {
-    t.end();
-});
-
-test('only3 test 3', function (t) {
-    t.fail('not 3');
-    t.end();
-});
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/order.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/order.js
deleted file mode 100644
index 02aaa05..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/order.js
+++ /dev/null
@@ -1,17 +0,0 @@
-var test = require('../');
-var current = 0;
-
-test(function (t) {
-    t.equal(current++, 0);
-    t.end();
-});
-test(function (t) {
-    t.plan(1);
-    setTimeout(function () {
-        t.equal(current++, 1);
-    }, 100);
-});
-test(function (t) {
-    t.equal(current++, 2);
-    t.end();
-});
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/plan_optional.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/plan_optional.js
deleted file mode 100644
index a092eab..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/plan_optional.js
+++ /dev/null
@@ -1,15 +0,0 @@
-var test = require('../');
-
-test('plan should be optional', function (t) {
-    t.pass('no plan here');
-    t.end();
-});
-
-test('no plan async', function (t) {
-    setTimeout(function() {
-        t.pass('ok');
-        t.end();
-    }, 100);
-});
-
-// vim: set softtabstop=4 shiftwidth=4:
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/skip.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/skip.js
deleted file mode 100644
index 216b600..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/skip.js
+++ /dev/null
@@ -1,46 +0,0 @@
-var test = require('../');
-var ran = 0;
-
-test('do not skip this', { skip: false }, function(t) {
-    t.pass('this should run');
-    ran ++;
-    t.end();
-});
-
-test('skip this', { skip: true }, function(t) {
-    t.fail('this should not even run');
-	ran++;
-    t.end();
-});
-
-test.skip('skip this too', function(t) {
-    t.fail('this should not even run');
-	ran++;
-    t.end();
-});
-
-test.skip('skip this too', function(t) {
-    t.fail('this should not even run');
-    t.end();
-});
-
-test('skip subtest', function(t) {
-    ran ++;
-    t.test('do not skip this', { skip: false }, function(t) {
-        ran ++;
-        t.pass('this should run');
-        t.end();
-    });
-    t.test('skip this', { skip: true }, function(t) {
-        t.fail('this should not even run');
-        t.end();
-    });
-    t.end();
-});
-
-test('right number of tests ran', function(t) {
-    t.equal(ran, 3, 'ran the right number of tests');
-    t.end();
-});
-
-// vim: set softtabstop=4 shiftwidth=4:
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/subcount.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/subcount.js
deleted file mode 100644
index 3a5df3f..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/subcount.js
+++ /dev/null
@@ -1,14 +0,0 @@
-var test = require('../');
-
-test('parent test', function (t) {
-    t.plan(2);
-    t.test('first child', function (t) {
-        t.plan(1);
-        t.pass('pass first child');
-    })
-
-    t.test(function (t) {
-        t.plan(1);
-        t.pass('pass second child');
-    })
-})
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/subtest_and_async.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/subtest_and_async.js
deleted file mode 100644
index 719dbf5..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/subtest_and_async.js
+++ /dev/null
@@ -1,23 +0,0 @@
-var test = require('../');
-
-var asyncFunction = function (callback) {
-  setTimeout(callback, Math.random * 50);
-};
-
-test('master test', function (t) {
-  t.test('subtest 1', function (t) {
-    t.pass('subtest 1 before async call');
-    asyncFunction(function () {
-      t.pass('subtest 1 in async callback');
-      t.end();
-    })
-  });
-
-  t.test('subtest 2', function (t) {
-    t.pass('subtest 2 before async call');
-    asyncFunction(function () {
-      t.pass('subtest 2 in async callback');
-      t.end();
-    })
-  });
-});
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/subtest_plan.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/subtest_plan.js
deleted file mode 100644
index 2b075ae..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/subtest_plan.js
+++ /dev/null
@@ -1,21 +0,0 @@
-var test = require('../');
-
-test('parent', function (t) {
-    t.plan(3)
-
-    var firstChildRan = false;
-
-    t.pass('assertion in parent');
-
-    t.test('first child', function (t) {
-        t.plan(1);
-        t.pass('pass first child');
-        firstChildRan = true;
-    });
-
-    t.test('second child', function (t) {
-        t.plan(2);
-        t.ok(firstChildRan, 'first child ran first');
-        t.pass('pass second child');
-    });
-});
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/throws.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/throws.js
deleted file mode 100644
index ec91fb8..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/throws.js
+++ /dev/null
@@ -1,20 +0,0 @@
-var test = require('../');
-
-function fn() {
-    throw new TypeError('RegExp');
-}
-
-test('throws', function (t) {
-    t.throws(fn);
-    t.end();
-});
-
-test('throws (RegExp match)', function (t) {
-    t.throws(fn, /RegExp/);
-    t.end();
-});
-
-test('throws (Function match)', function (t) {
-    t.throws(fn, TypeError);
-    t.end();
-});
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/timeoutAfter.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/timeoutAfter.js
deleted file mode 100644
index bd2a4f1..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/timeoutAfter.js
+++ /dev/null
@@ -1,35 +0,0 @@
-var tape = require('../');
-var tap = require('tap');
-
-tap.test('timeoutAfter test', function (tt) {
-    tt.plan(1);
-    
-    var test = tape.createHarness();
-    var tc = tap.createConsumer();
-    
-    var rows = [];
-    tc.on('data', function (r) { rows.push(r) });
-    tc.on('end', function () {
-        var rs = rows.map(function (r) {
-            if (r && typeof r === 'object') {
-                return { id : r.id, ok : r.ok, name : r.name.trim() };
-            }
-            else return r;
-        });
-        tt.same(rs, [
-            'TAP version 13',
-            'timeoutAfter',
-            { id: 1, ok: false, name: 'test timed out after 1ms' },
-            'tests 1',
-            'pass  0',
-            'fail  1'
-        ]);
-    });
-    
-    test.createStream().pipe(tc);
-    
-    test('timeoutAfter', function (t) {
-        t.plan(1);
-        t.timeoutAfter(1);
-    });
-});
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/too_many.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/too_many.js
deleted file mode 100644
index b5c3881..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/too_many.js
+++ /dev/null
@@ -1,69 +0,0 @@
-var falafel = require('falafel');
-var tape = require('../');
-var tap = require('tap');
-
-tap.test('array test', function (tt) {
-    tt.plan(1);
-    
-    var test = tape.createHarness({ exit : false });
-    var tc = tap.createConsumer();
-    
-    var rows = [];
-    tc.on('data', function (r) { rows.push(r) });
-    tc.on('end', function () {
-        var rs = rows.map(function (r) {
-            if (r && typeof r === 'object') {
-                return { id : r.id, ok : r.ok, name : r.name.trim() };
-            }
-            else return r;
-        });
-        tt.same(rs, [
-            'TAP version 13',
-            'array',
-            { id: 1, ok: true, name: 'should be equivalent' },
-            { id: 2, ok: true, name: 'should be equivalent' },
-            { id: 3, ok: true, name: 'should be equivalent' },
-            { id: 4, ok: true, name: 'should be equivalent' },
-            { id: 5, ok: false, name: 'plan != count' },
-            { id: 6, ok: true, name: 'should be equivalent' },
-            'tests 6',
-            'pass  5',
-            'fail  1'
-        ]);
-    });
-    
-    test.createStream().pipe(tc);
-    
-    test('array', function (t) {
-        t.plan(3);
-        
-        var src = '(' + function () {
-            var xs = [ 1, 2, [ 3, 4 ] ];
-            var ys = [ 5, 6 ];
-            g([ xs, ys ]);
-        } + ')()';
-        
-        var output = falafel(src, function (node) {
-            if (node.type === 'ArrayExpression') {
-                node.update('fn(' + node.source() + ')');
-            }
-        });
-        
-        var arrays = [
-            [ 3, 4 ],
-            [ 1, 2, [ 3, 4 ] ],
-            [ 5, 6 ],
-            [ [ 1, 2, [ 3, 4 ] ], [ 5, 6 ] ],
-        ];
-        
-        Function(['fn','g'], output)(
-            function (xs) {
-                t.same(arrays.shift(), xs);
-                return xs;
-            },
-            function (xs) {
-                t.same(xs, [ [ 1, 2, [ 3, 4 ] ], [ 5, 6 ] ]);
-            }
-        );
-    });
-});
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/undef.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/undef.js
deleted file mode 100644
index e856a54..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/node_modules/tape/test/undef.js
+++ /dev/null
@@ -1,32 +0,0 @@
-var tape = require('../');
-var tap = require('tap');
-var concat = require('concat-stream');
-
-tap.test('array test', function (tt) {
-    tt.plan(1);
-    
-    var test = tape.createHarness();
-    test.createStream().pipe(concat(function (body) {
-        tt.equal(
-            body.toString('utf8'),
-            'TAP version 13\n'
-            + '# undef\n'
-            + 'not ok 1 should be equivalent\n'
-            + '  ---\n'
-            + '    operator: deepEqual\n'
-            + '    expected: { beep: undefined }\n'
-            + '    actual:   {}\n'
-            + '  ...\n'
-            + '\n'
-            + '1..1\n'
-            + '# tests 1\n'
-            + '# pass  0\n'
-            + '# fail  1\n'
-        );
-    }));
-    
-    test('undef', function (t) {
-        t.plan(1);
-        t.deepEqual({}, { beep: undefined });
-    });
-});
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/package.json b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/package.json
deleted file mode 100644
index 9606ad2..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/package.json
+++ /dev/null
@@ -1,51 +0,0 @@
-{
-  "name": "cordova-registry-mapper",
-  "version": "1.1.13",
-  "description": "Maps old plugin ids to new plugin names for fetching from npm",
-  "main": "index.js",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/stevengill/cordova-registry-mapper.git"
-  },
-  "scripts": {
-    "test": "node tests/test.js"
-  },
-  "keywords": [
-    "cordova",
-    "plugins"
-  ],
-  "author": {
-    "name": "Steve Gill"
-  },
-  "license": "Apache version 2.0",
-  "dependencies": {
-    "tape": "^3.5.0"
-  },
-  "gitHead": "f9aedb702a876f1a4d53760bb31a39358e0f261e",
-  "bugs": {
-    "url": "https://github.com/stevengill/cordova-registry-mapper/issues"
-  },
-  "homepage": "https://github.com/stevengill/cordova-registry-mapper#readme",
-  "_id": "cordova-registry-mapper@1.1.13",
-  "_shasum": "08e74b13833abb4bda4b279a0d447590113c8c28",
-  "_from": "cordova-registry-mapper@^1.1.8",
-  "_npmVersion": "2.14.2",
-  "_nodeVersion": "0.10.36",
-  "_npmUser": {
-    "name": "stevegill",
-    "email": "stevengill97@gmail.com"
-  },
-  "dist": {
-    "shasum": "08e74b13833abb4bda4b279a0d447590113c8c28",
-    "tarball": "http://registry.npmjs.org/cordova-registry-mapper/-/cordova-registry-mapper-1.1.13.tgz"
-  },
-  "maintainers": [
-    {
-      "name": "stevegill",
-      "email": "stevengill97@gmail.com"
-    }
-  ],
-  "directories": {},
-  "_resolved": "https://registry.npmjs.org/cordova-registry-mapper/-/cordova-registry-mapper-1.1.13.tgz",
-  "readme": "ERROR: No README data found!"
-}
diff --git a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/tests/test.js b/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/tests/test.js
deleted file mode 100644
index 35343be..0000000
--- a/bin/node_modules/cordova-common/node_modules/cordova-registry-mapper/tests/test.js
+++ /dev/null
@@ -1,11 +0,0 @@
-var test = require('tape');
-var oldToNew = require('../index').oldToNew;
-var newToOld = require('../index').newToOld;
-
-test('plugin mappings exist', function(t) {
-    t.plan(2);
-
-    t.equal('cordova-plugin-device', oldToNew['org.apache.cordova.device']);
-
-    t.equal('org.apache.cordova.device', newToOld['cordova-plugin-device']);
-})
diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/.npmignore b/bin/node_modules/cordova-common/node_modules/elementtree/.npmignore
deleted file mode 100644
index 3c3629e..0000000
--- a/bin/node_modules/cordova-common/node_modules/elementtree/.npmignore
+++ /dev/null
@@ -1 +0,0 @@
-node_modules
diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/.travis.yml b/bin/node_modules/cordova-common/node_modules/elementtree/.travis.yml
deleted file mode 100644
index 6f27c96..0000000
--- a/bin/node_modules/cordova-common/node_modules/elementtree/.travis.yml
+++ /dev/null
@@ -1,10 +0,0 @@
-language: node_js
-
-node_js:
-  - 0.6
-
-script: make test
-
-notifications:
-  email:
-    - tomaz+travisci@tomaz.me
diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/CHANGES.md b/bin/node_modules/cordova-common/node_modules/elementtree/CHANGES.md
deleted file mode 100644
index 50d415d..0000000
--- a/bin/node_modules/cordova-common/node_modules/elementtree/CHANGES.md
+++ /dev/null
@@ -1,39 +0,0 @@
-elementtree v0.1.6 (in development)
-
-* Add support for CData elements. (#14)
-  [hermannpencole]
-
-elementtree v0.1.5 - 2012-11-14
-
-* Fix a bug in the find() and findtext() method which could manifest itself
-  under some conditions.
-  [metagriffin]
-
-elementtree v0.1.4 - 2012-10-15
-
-* Allow user to use namespaced attributes when using find* functions.
-  [Andrew Lunny]
-
-elementtree v0.1.3 - 2012-09-21
-
-* Improve the output of text content in the tags (strip unnecessary line break
-  characters).
-
-[Darryl Pogue]
-
-elementtree v0.1.2 - 2012-09-04
-
- * Allow user to pass 'indent' option to ElementTree.write method. If this
-   option is specified (e.g. {'indent': 4}). XML will be pretty printed.
-   [Darryl Pogue, Tomaz Muraus]
-
- * Bump sax dependency version.
-
-elementtree v0.1.1 - 2011-09-23
-
- * Improve special character escaping.
-   [Ryan Phillips]
-
-elementtree v0.1.0 - 2011-09-05
-
- * Initial release.
diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/LICENSE.txt b/bin/node_modules/cordova-common/node_modules/elementtree/LICENSE.txt
deleted file mode 100644
index 6b0b127..0000000
--- a/bin/node_modules/cordova-common/node_modules/elementtree/LICENSE.txt
+++ /dev/null
@@ -1,203 +0,0 @@
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-
diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/Makefile b/bin/node_modules/cordova-common/node_modules/elementtree/Makefile
deleted file mode 100644
index ab7c4e0..0000000
--- a/bin/node_modules/cordova-common/node_modules/elementtree/Makefile
+++ /dev/null
@@ -1,21 +0,0 @@
-TESTS := \
-	tests/test-simple.js
-
-
-
-PATH := ./node_modules/.bin:$(PATH)
-
-WHISKEY := $(shell bash -c 'PATH=$(PATH) type -p whiskey')
-
-default: test
-
-test:
-	NODE_PATH=`pwd`/lib/ ${WHISKEY} --scope-leaks --sequential --real-time --tests "${TESTS}"
-
-tap:
-	NODE_PATH=`pwd`/lib/ ${WHISKEY} --test-reporter tap --sequential --real-time --tests "${TESTS}"
-
-coverage:
-	NODE_PATH=`pwd`/lib/ ${WHISKEY} --sequential --coverage  --coverage-reporter html --coverage-dir coverage_html --tests "${TESTS}"
-
-.PHONY: default test coverage tap scope
diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/NOTICE b/bin/node_modules/cordova-common/node_modules/elementtree/NOTICE
deleted file mode 100644
index 28ad70a..0000000
--- a/bin/node_modules/cordova-common/node_modules/elementtree/NOTICE
+++ /dev/null
@@ -1,5 +0,0 @@
-node-elementtree
-Copyright (c) 2011, Rackspace, Inc.
-
-The ElementTree toolkit is Copyright (c) 1999-2007 by Fredrik Lundh
-
diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/README.md b/bin/node_modules/cordova-common/node_modules/elementtree/README.md
deleted file mode 100644
index 738420c..0000000
--- a/bin/node_modules/cordova-common/node_modules/elementtree/README.md
+++ /dev/null
@@ -1,141 +0,0 @@
-node-elementtree
-====================
-
-node-elementtree is a [Node.js](http://nodejs.org) XML parser and serializer based upon the [Python ElementTree v1.3](http://effbot.org/zone/element-index.htm) module.
-
-Installation
-====================
-
-    $ npm install elementtree
-    
-Using the library
-====================
-
-For the usage refer to the Python ElementTree library documentation - [http://effbot.org/zone/element-index.htm#usage](http://effbot.org/zone/element-index.htm#usage).
-
-Supported XPath expressions in `find`, `findall` and `findtext` methods are listed on [http://effbot.org/zone/element-xpath.htm](http://effbot.org/zone/element-xpath.htm).
-
-Example 1 – Creating An XML Document
-====================
-
-This example shows how to build a valid XML document that can be published to
-Atom Hopper. Atom Hopper is used internally as a bridge from products all the
-way to collecting revenue, called “Usage.”  MaaS and other products send similar
-events to it every time user performs an action on a resource
-(e.g. creates,updates or deletes). Below is an example of leveraging the API
-to create a new XML document.
-
-```javascript
-var et = require('elementtree');
-var XML = et.XML;
-var ElementTree = et.ElementTree;
-var element = et.Element;
-var subElement = et.SubElement;
-
-var date, root, tenantId, serviceName, eventType, usageId, dataCenter, region,
-checks, resourceId, category, startTime, resourceName, etree, xml;
-
-date = new Date();
-
-root = element('entry');
-root.set('xmlns', 'http://www.w3.org/2005/Atom');
-
-tenantId = subElement(root, 'TenantId');
-tenantId.text = '12345';
-
-serviceName = subElement(root, 'ServiceName');
-serviceName.text = 'MaaS';
-
-resourceId = subElement(root, 'ResourceID');
-resourceId.text = 'enAAAA';
-
-usageId = subElement(root, 'UsageID');
-usageId.text = '550e8400-e29b-41d4-a716-446655440000';
-
-eventType = subElement(root, 'EventType');
-eventType.text = 'create';
-
-category = subElement(root, 'category');
-category.set('term', 'monitoring.entity.create');
-
-dataCenter = subElement(root, 'DataCenter');
-dataCenter.text = 'global';
-
-region = subElement(root, 'Region');
-region.text = 'global';
-
-startTime = subElement(root, 'StartTime');
-startTime.text = date;
-
-resourceName = subElement(root, 'ResourceName');
-resourceName.text = 'entity';
-
-etree = new ElementTree(root);
-xml = etree.write({'xml_declaration': false});
-console.log(xml);
-```
-
-As you can see, both et.Element and et.SubElement are factory methods which
-return a new instance of Element and SubElement class, respectively.
-When you create a new element (tag) you can use set method to set an attribute.
-To set the tag value, assign a value to the .text attribute.
-
-This example would output a document that looks like this:
-
-```xml
-<entry xmlns="http://www.w3.org/2005/Atom">
-  <TenantId>12345</TenantId>
-  <ServiceName>MaaS</ServiceName>
-  <ResourceID>enAAAA</ResourceID>
-  <UsageID>550e8400-e29b-41d4-a716-446655440000</UsageID>
-  <EventType>create</EventType>
-  <category term="monitoring.entity.create"/>
-  <DataCenter>global</DataCenter>
-  <Region>global</Region>
-  <StartTime>Sun Apr 29 2012 16:37:32 GMT-0700 (PDT)</StartTime>
-  <ResourceName>entity</ResourceName>
-</entry>
-```
-
-Example 2 – Parsing An XML Document
-====================
-
-This example shows how to parse an XML document and use simple XPath selectors.
-For demonstration purposes, we will use the XML document located at
-https://gist.github.com/2554343.
-
-Behind the scenes, node-elementtree uses Isaac’s sax library for parsing XML,
-but the library has a concept of “parsers,” which means it’s pretty simple to
-add support for a different parser.
-
-```javascript
-var fs = require('fs');
-
-var et = require('elementtree');
-
-var XML = et.XML;
-var ElementTree = et.ElementTree;
-var element = et.Element;
-var subElement = et.SubElement;
-
-var data, etree;
-
-data = fs.readFileSync('document.xml').toString();
-etree = et.parse(data);
-
-console.log(etree.findall('./entry/TenantId').length); // 2
-console.log(etree.findtext('./entry/ServiceName')); // MaaS
-console.log(etree.findall('./entry/category')[0].get('term')); // monitoring.entity.create
-console.log(etree.findall('*/category/[@term="monitoring.entity.update"]').length); // 1
-```
-
-Build status
-====================
-
-[![Build Status](https://secure.travis-ci.org/racker/node-elementtree.png)](http://travis-ci.org/racker/node-elementtree)
-
-
-License
-====================
-
-node-elementtree is distributed under the [Apache license](http://www.apache.org/licenses/LICENSE-2.0.html).
diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/lib/constants.js b/bin/node_modules/cordova-common/node_modules/elementtree/lib/constants.js
deleted file mode 100644
index b057faf..0000000
--- a/bin/node_modules/cordova-common/node_modules/elementtree/lib/constants.js
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- *  Copyright 2011 Rackspace
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- */
-
-var DEFAULT_PARSER = 'sax';
-
-exports.DEFAULT_PARSER = DEFAULT_PARSER;
diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/lib/elementpath.js b/bin/node_modules/cordova-common/node_modules/elementtree/lib/elementpath.js
deleted file mode 100644
index 2e93f47..0000000
--- a/bin/node_modules/cordova-common/node_modules/elementtree/lib/elementpath.js
+++ /dev/null
@@ -1,343 +0,0 @@
-/**
- *  Copyright 2011 Rackspace
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- */
-
-var sprintf = require('./sprintf').sprintf;
-
-var utils = require('./utils');
-var SyntaxError = require('./errors').SyntaxError;
-
-var _cache = {};
-
-var RE = new RegExp(
-  "(" +
-  "'[^']*'|\"[^\"]*\"|" +
-  "::|" +
-  "//?|" +
-  "\\.\\.|" +
-  "\\(\\)|" +
-  "[/.*:\\[\\]\\(\\)@=])|" +
-  "((?:\\{[^}]+\\})?[^/\\[\\]\\(\\)@=\\s]+)|" +
-  "\\s+", 'g'
-);
-
-var xpath_tokenizer = utils.findall.bind(null, RE);
-
-function prepare_tag(next, token) {
-  var tag = token[0];
-
-  function select(context, result) {
-    var i, len, elem, rv = [];
-
-    for (i = 0, len = result.length; i < len; i++) {
-      elem = result[i];
-      elem._children.forEach(function(e) {
-        if (e.tag === tag) {
-          rv.push(e);
-        }
-      });
-    }
-
-    return rv;
-  }
-
-  return select;
-}
-
-function prepare_star(next, token) {
-  function select(context, result) {
-    var i, len, elem, rv = [];
-
-    for (i = 0, len = result.length; i < len; i++) {
-      elem = result[i];
-      elem._children.forEach(function(e) {
-        rv.push(e);
-      });
-    }
-
-    return rv;
-  }
-
-  return select;
-}
-
-function prepare_dot(next, token) {
-  function select(context, result) {
-    var i, len, elem, rv = [];
-
-    for (i = 0, len = result.length; i < len; i++) {
-      elem = result[i];
-      rv.push(elem);
-    }
-
-    return rv;
-  }
-
-  return select;
-}
-
-function prepare_iter(next, token) {
-  var tag;
-  token = next();
-
-  if (token[1] === '*') {
-    tag = '*';
-  }
-  else if (!token[1]) {
-    tag = token[0] || '';
-  }
-  else {
-    throw new SyntaxError(token);
-  }
-
-  function select(context, result) {
-    var i, len, elem, rv = [];
-
-    for (i = 0, len = result.length; i < len; i++) {
-      elem = result[i];
-      elem.iter(tag, function(e) {
-        if (e !== elem) {
-          rv.push(e);
-        }
-      });
-    }
-
-    return rv;
-  }
-
-  return select;
-}
-
-function prepare_dot_dot(next, token) {
-  function select(context, result) {
-    var i, len, elem, rv = [], parent_map = context.parent_map;
-
-    if (!parent_map) {
-      context.parent_map = parent_map = {};
-
-      context.root.iter(null, function(p) {
-        p._children.forEach(function(e) {
-          parent_map[e] = p;
-        });
-      });
-    }
-
-    for (i = 0, len = result.length; i < len; i++) {
-      elem = result[i];
-
-      if (parent_map.hasOwnProperty(elem)) {
-        rv.push(parent_map[elem]);
-      }
-    }
-
-    return rv;
-  }
-
-  return select;
-}
-
-
-function prepare_predicate(next, token) {
-  var tag, key, value, select;
-  token = next();
-
-  if (token[1] === '@') {
-    // attribute
-    token = next();
-
-    if (token[1]) {
-      throw new SyntaxError(token, 'Invalid attribute predicate');
-    }
-
-    key = token[0];
-    token = next();
-
-    if (token[1] === ']') {
-      select = function(context, result) {
-        var i, len, elem, rv = [];
-
-        for (i = 0, len = result.length; i < len; i++) {
-          elem = result[i];
-
-          if (elem.get(key)) {
-            rv.push(elem);
-          }
-        }
-
-        return rv;
-      };
-    }
-    else if (token[1] === '=') {
-      value = next()[1];
-
-      if (value[0] === '"' || value[value.length - 1] === '\'') {
-        value = value.slice(1, value.length - 1);
-      }
-      else {
-        throw new SyntaxError(token, 'Ivalid comparison target');
-      }
-
-      token = next();
-      select = function(context, result) {
-        var i, len, elem, rv = [];
-
-        for (i = 0, len = result.length; i < len; i++) {
-          elem = result[i];
-
-          if (elem.get(key) === value) {
-            rv.push(elem);
-          }
-        }
-
-        return rv;
-      };
-    }
-
-    if (token[1] !== ']') {
-      throw new SyntaxError(token, 'Invalid attribute predicate');
-    }
-  }
-  else if (!token[1]) {
-    tag = token[0] || '';
-    token = next();
-
-    if (token[1] !== ']') {
-      throw new SyntaxError(token, 'Invalid node predicate');
-    }
-
-    select = function(context, result) {
-      var i, len, elem, rv = [];
-
-      for (i = 0, len = result.length; i < len; i++) {
-        elem = result[i];
-
-        if (elem.find(tag)) {
-          rv.push(elem);
-        }
-      }
-
-      return rv;
-    };
-  }
-  else {
-    throw new SyntaxError(null, 'Invalid predicate');
-  }
-
-  return select;
-}
-
-
-
-var ops = {
-  "": prepare_tag,
-  "*": prepare_star,
-  ".": prepare_dot,
-  "..": prepare_dot_dot,
-  "//": prepare_iter,
-  "[": prepare_predicate,
-};
-
-function _SelectorContext(root) {
-  this.parent_map = null;
-  this.root = root;
-}
-
-function findall(elem, path) {
-  var selector, result, i, len, token, value, select, context;
-
-  if (_cache.hasOwnProperty(path)) {
-    selector = _cache[path];
-  }
-  else {
-    // TODO: Use smarter cache purging approach
-    if (Object.keys(_cache).length > 100) {
-      _cache = {};
-    }
-
-    if (path.charAt(0) === '/') {
-      throw new SyntaxError(null, 'Cannot use absolute path on element');
-    }
-
-    result = xpath_tokenizer(path);
-    selector = [];
-
-    function getToken() {
-      return result.shift();
-    }
-
-    token = getToken();
-    while (true) {
-      var c = token[1] || '';
-      value = ops[c](getToken, token);
-
-      if (!value) {
-        throw new SyntaxError(null, sprintf('Invalid path: %s', path));
-      }
-
-      selector.push(value);
-      token = getToken();
-
-      if (!token) {
-        break;
-      }
-      else if (token[1] === '/') {
-        token = getToken();
-      }
-
-      if (!token) {
-        break;
-      }
-    }
-
-    _cache[path] = selector;
-  }
-
-  // Execute slector pattern
-  result = [elem];
-  context = new _SelectorContext(elem);
-
-  for (i = 0, len = selector.length; i < len; i++) {
-    select = selector[i];
-    result = select(context, result);
-  }
-
-  return result || [];
-}
-
-function find(element, path) {
-  var resultElements = findall(element, path);
-
-  if (resultElements && resultElements.length > 0) {
-    return resultElements[0];
-  }
-
-  return null;
-}
-
-function findtext(element, path, defvalue) {
-  var resultElements = findall(element, path);
-
-  if (resultElements && resultElements.length > 0) {
-    return resultElements[0].text;
-  }
-
-  return defvalue;
-}
-
-
-exports.find = find;
-exports.findall = findall;
-exports.findtext = findtext;
diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/lib/elementtree.js b/bin/node_modules/cordova-common/node_modules/elementtree/lib/elementtree.js
deleted file mode 100644
index 61d9276..0000000
--- a/bin/node_modules/cordova-common/node_modules/elementtree/lib/elementtree.js
+++ /dev/null
@@ -1,611 +0,0 @@
-/**
- *  Copyright 2011 Rackspace
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- */
-
-var sprintf = require('./sprintf').sprintf;
-
-var utils = require('./utils');
-var ElementPath = require('./elementpath');
-var TreeBuilder = require('./treebuilder').TreeBuilder;
-var get_parser = require('./parser').get_parser;
-var constants = require('./constants');
-
-var element_ids = 0;
-
-function Element(tag, attrib)
-{
-  this._id = element_ids++;
-  this.tag = tag;
-  this.attrib = {};
-  this.text = null;
-  this.tail = null;
-  this._children = [];
-
-  if (attrib) {
-    this.attrib = utils.merge(this.attrib, attrib);
-  }
-}
-
-Element.prototype.toString = function()
-{
-  return sprintf("<Element %s at %s>", this.tag, this._id);
-};
-
-Element.prototype.makeelement = function(tag, attrib)
-{
-  return new Element(tag, attrib);
-};
-
-Element.prototype.len = function()
-{
-  return this._children.length;
-};
-
-Element.prototype.getItem = function(index)
-{
-  return this._children[index];
-};
-
-Element.prototype.setItem = function(index, element)
-{
-  this._children[index] = element;
-};
-
-Element.prototype.delItem = function(index)
-{
-  this._children.splice(index, 1);
-};
-
-Element.prototype.getSlice = function(start, stop)
-{
-  return this._children.slice(start, stop);
-};
-
-Element.prototype.setSlice = function(start, stop, elements)
-{
-  var i;
-  var k = 0;
-  for (i = start; i < stop; i++, k++) {
-    this._children[i] = elements[k];
-  }
-};
-
-Element.prototype.delSlice = function(start, stop)
-{
-  this._children.splice(start, stop - start);
-};
-
-Element.prototype.append = function(element)
-{
-  this._children.push(element);
-};
-
-Element.prototype.extend = function(elements)
-{
-  this._children.concat(elements);
-};
-
-Element.prototype.insert = function(index, element)
-{
-  this._children[index] = element;
-};
-
-Element.prototype.remove = function(element)
-{
-  this._children = this._children.filter(function(e) {
-    /* TODO: is this the right way to do this? */
-    if (e._id === element._id) {
-      return false;
-    }
-    return true;
-  });
-};
-
-Element.prototype.getchildren = function() {
-  return this._children;
-};
-
-Element.prototype.find = function(path)
-{
-  return ElementPath.find(this, path);
-};
-
-Element.prototype.findtext = function(path, defvalue)
-{
-  return ElementPath.findtext(this, path, defvalue);
-};
-
-Element.prototype.findall = function(path, defvalue)
-{
-  return ElementPath.findall(this, path, defvalue);
-};
-
-Element.prototype.clear = function()
-{
-  this.attrib = {};
-  this._children = [];
-  this.text = null;
-  this.tail = null;
-};
-
-Element.prototype.get = function(key, defvalue)
-{
-  if (this.attrib[key] !== undefined) {
-    return this.attrib[key];
-  }
-  else {
-    return defvalue;
-  }
-};
-
-Element.prototype.set = function(key, value)
-{
-  this.attrib[key] = value;
-};
-
-Element.prototype.keys = function()
-{
-  return Object.keys(this.attrib);
-};
-
-Element.prototype.items = function()
-{
-  return utils.items(this.attrib);
-};
-
-/*
- * In python this uses a generator, but in v8 we don't have em,
- * so we use a callback instead.
- **/
-Element.prototype.iter = function(tag, callback)
-{
-  var self = this;
-  var i, child;
-
-  if (tag === "*") {
-    tag = null;
-  }
-
-  if (tag === null || this.tag === tag) {
-    callback(self);
-  }
-
-  for (i = 0; i < this._children.length; i++) {
-    child = this._children[i];
-    child.iter(tag, function(e) {
-      callback(e);
-    });
-  }
-};
-
-Element.prototype.itertext = function(callback)
-{
-  this.iter(null, function(e) {
-    if (e.text) {
-      callback(e.text);
-    }
-
-    if (e.tail) {
-      callback(e.tail);
-    }
-  });
-};
-
-
-function SubElement(parent, tag, attrib) {
-  var element = parent.makeelement(tag, attrib);
-  parent.append(element);
-  return element;
-}
-
-function Comment(text) {
-  var element = new Element(Comment);
-  if (text) {
-    element.text = text;
-  }
-  return element;
-}
-
-function CData(text) {
-  var element = new Element(CData);
-  if (text) {
-    element.text = text;
-  }
-  return element;
-}
-
-function ProcessingInstruction(target, text)
-{
-  var element = new Element(ProcessingInstruction);
-  element.text = target;
-  if (text) {
-    element.text = element.text + " " + text;
-  }
-  return element;
-}
-
-function QName(text_or_uri, tag)
-{
-  if (tag) {
-    text_or_uri = sprintf("{%s}%s", text_or_uri, tag);
-  }
-  this.text = text_or_uri;
-}
-
-QName.prototype.toString = function() {
-  return this.text;
-};
-
-function ElementTree(element)
-{
-  this._root = element;
-}
-
-ElementTree.prototype.getroot = function() {
-  return this._root;
-};
-
-ElementTree.prototype._setroot = function(element) {
-  this._root = element;
-};
-
-ElementTree.prototype.parse = function(source, parser) {
-  if (!parser) {
-    parser = get_parser(constants.DEFAULT_PARSER);
-    parser = new parser.XMLParser(new TreeBuilder());
-  }
-
-  parser.feed(source);
-  this._root = parser.close();
-  return this._root;
-};
-
-ElementTree.prototype.iter = function(tag, callback) {
-  this._root.iter(tag, callback);
-};
-
-ElementTree.prototype.find = function(path) {
-  return this._root.find(path);
-};
-
-ElementTree.prototype.findtext = function(path, defvalue) {
-  return this._root.findtext(path, defvalue);
-};
-
-ElementTree.prototype.findall = function(path) {
-  return this._root.findall(path);
-};
-
-/**
- * Unlike ElementTree, we don't write to a file, we return you a string.
- */
-ElementTree.prototype.write = function(options) {
-  var sb = [];
-  options = utils.merge({
-    encoding: 'utf-8',
-    xml_declaration: null,
-    default_namespace: null,
-    method: 'xml'}, options);
-
-  if (options.xml_declaration !== false) {
-    sb.push("<?xml version='1.0' encoding='"+options.encoding +"'?>\n");
-  }
-
-  if (options.method === "text") {
-    _serialize_text(sb, self._root, encoding);
-  }
-  else {
-    var qnames, namespaces, indent, indent_string;
-    var x = _namespaces(this._root, options.encoding, options.default_namespace);
-    qnames = x[0];
-    namespaces = x[1];
-
-    if (options.hasOwnProperty('indent')) {
-      indent = 0;
-      indent_string = new Array(options.indent + 1).join(' ');
-    }
-    else {
-      indent = false;
-    }
-
-    if (options.method === "xml") {
-      _serialize_xml(function(data) {
-        sb.push(data);
-      }, this._root, options.encoding, qnames, namespaces, indent, indent_string);
-    }
-    else {
-      /* TODO: html */
-      throw new Error("unknown serialization method "+ options.method);
-    }
-  }
-
-  return sb.join("");
-};
-
-var _namespace_map = {
-    /* "well-known" namespace prefixes */
-    "http://www.w3.org/XML/1998/namespace": "xml",
-    "http://www.w3.org/1999/xhtml": "html",
-    "http://www.w3.org/1999/02/22-rdf-syntax-ns#": "rdf",
-    "http://schemas.xmlsoap.org/wsdl/": "wsdl",
-    /* xml schema */
-    "http://www.w3.org/2001/XMLSchema": "xs",
-    "http://www.w3.org/2001/XMLSchema-instance": "xsi",
-    /* dublic core */
-    "http://purl.org/dc/elements/1.1/": "dc",
-};
-
-function register_namespace(prefix, uri) {
-  if (/ns\d+$/.test(prefix)) {
-    throw new Error('Prefix format reserved for internal use');
-  }
-
-  if (_namespace_map.hasOwnProperty(uri) && _namespace_map[uri] === prefix) {
-    delete _namespace_map[uri];
-  }
-
-  _namespace_map[uri] = prefix;
-}
-
-
-function _escape(text, encoding, isAttribute, isText) {
-  if (text) {
-    text = text.toString();
-    text = text.replace(/&/g, '&amp;');
-    text = text.replace(/</g, '&lt;');
-    text = text.replace(/>/g, '&gt;');
-    if (!isText) {
-        text = text.replace(/\n/g, '&#xA;');
-        text = text.replace(/\r/g, '&#xD;');
-    }
-    if (isAttribute) {
-      text = text.replace(/"/g, '&quot;');
-    }
-  }
-  return text;
-}
-
-/* TODO: benchmark single regex */
-function _escape_attrib(text, encoding) {
-  return _escape(text, encoding, true);
-}
-
-function _escape_cdata(text, encoding) {
-  return _escape(text, encoding, false);
-}
-
-function _escape_text(text, encoding) {
-  return _escape(text, encoding, false, true);
-}
-
-function _namespaces(elem, encoding, default_namespace) {
-  var qnames = {};
-  var namespaces = {};
-
-  if (default_namespace) {
-    namespaces[default_namespace] = "";
-  }
-
-  function encode(text) {
-    return text;
-  }
-
-  function add_qname(qname) {
-    if (qname[0] === "{") {
-      var tmp = qname.substring(1).split("}", 2);
-      var uri = tmp[0];
-      var tag = tmp[1];
-      var prefix = namespaces[uri];
-
-      if (prefix === undefined) {
-        prefix = _namespace_map[uri];
-        if (prefix === undefined) {
-          prefix = "ns" + Object.keys(namespaces).length;
-        }
-        if (prefix !== "xml") {
-          namespaces[uri] = prefix;
-        }
-      }
-
-      if (prefix) {
-        qnames[qname] = sprintf("%s:%s", prefix, tag);
-      }
-      else {
-        qnames[qname] = tag;
-      }
-    }
-    else {
-      if (default_namespace) {
-        throw new Error('cannot use non-qualified names with default_namespace option');
-      }
-
-      qnames[qname] = qname;
-    }
-  }
-
-
-  elem.iter(null, function(e) {
-    var i;
-    var tag = e.tag;
-    var text = e.text;
-    var items = e.items();
-
-    if (tag instanceof QName && qnames[tag.text] === undefined) {
-      add_qname(tag.text);
-    }
-    else if (typeof(tag) === "string") {
-      add_qname(tag);
-    }
-    else if (tag !== null && tag !== Comment && tag !== CData && tag !== ProcessingInstruction) {
-      throw new Error('Invalid tag type for serialization: '+ tag);
-    }
-
-    if (text instanceof QName && qnames[text.text] === undefined) {
-      add_qname(text.text);
-    }
-
-    items.forEach(function(item) {
-      var key = item[0],
-          value = item[1];
-      if (key instanceof QName) {
-        key = key.text;
-      }
-
-      if (qnames[key] === undefined) {
-        add_qname(key);
-      }
-
-      if (value instanceof QName && qnames[value.text] === undefined) {
-        add_qname(value.text);
-      }
-    });
-  });
-  return [qnames, namespaces];
-}
-
-function _serialize_xml(write, elem, encoding, qnames, namespaces, indent, indent_string) {
-  var tag = elem.tag;
-  var text = elem.text;
-  var items;
-  var i;
-
-  var newlines = indent || (indent === 0);
-  write(Array(indent + 1).join(indent_string));
-
-  if (tag === Comment) {
-    write(sprintf("<!--%s-->", _escape_cdata(text, encoding)));
-  }
-  else if (tag === ProcessingInstruction) {
-    write(sprintf("<?%s?>", _escape_cdata(text, encoding)));
-  }
-  else if (tag === CData) {
-    text = text || '';
-    write(sprintf("<![CDATA[%s]]>", text));
-  }
-  else {
-    tag = qnames[tag];
-    if (tag === undefined) {
-      if (text) {
-        write(_escape_text(text, encoding));
-      }
-      elem.iter(function(e) {
-        _serialize_xml(write, e, encoding, qnames, null, newlines ? indent + 1 : false, indent_string);
-      });
-    }
-    else {
-      write("<" + tag);
-      items = elem.items();
-
-      if (items || namespaces) {
-        items.sort(); // lexical order
-
-        items.forEach(function(item) {
-          var k = item[0],
-              v = item[1];
-
-            if (k instanceof QName) {
-              k = k.text;
-            }
-
-            if (v instanceof QName) {
-              v = qnames[v.text];
-            }
-            else {
-              v = _escape_attrib(v, encoding);
-            }
-            write(sprintf(" %s=\"%s\"", qnames[k], v));
-        });
-
-        if (namespaces) {
-          items = utils.items(namespaces);
-          items.sort(function(a, b) { return a[1] < b[1]; });
-
-          items.forEach(function(item) {
-            var k = item[1],
-                v = item[0];
-
-            if (k) {
-              k = ':' + k;
-            }
-
-            write(sprintf(" xmlns%s=\"%s\"", k, _escape_attrib(v, encoding)));
-          });
-        }
-      }
-
-      if (text || elem.len()) {
-        if (text && text.toString().match(/^\s*$/)) {
-            text = null;
-        }
-
-        write(">");
-        if (!text && newlines) {
-          write("\n");
-        }
-
-        if (text) {
-          write(_escape_text(text, encoding));
-        }
-        elem._children.forEach(function(e) {
-          _serialize_xml(write, e, encoding, qnames, null, newlines ? indent + 1 : false, indent_string);
-        });
-
-        if (!text && indent) {
-          write(Array(indent + 1).join(indent_string));
-        }
-        write("</" + tag + ">");
-      }
-      else {
-        write(" />");
-      }
-    }
-  }
-
-  if (newlines) {
-    write("\n");
-  }
-}
-
-function parse(source, parser) {
-  var tree = new ElementTree();
-  tree.parse(source, parser);
-  return tree;
-}
-
-function tostring(element, options) {
-  return new ElementTree(element).write(options);
-}
-
-exports.PI = ProcessingInstruction;
-exports.Comment = Comment;
-exports.CData = CData;
-exports.ProcessingInstruction = ProcessingInstruction;
-exports.SubElement = SubElement;
-exports.QName = QName;
-exports.ElementTree = ElementTree;
-exports.ElementPath = ElementPath;
-exports.Element = function(tag, attrib) {
-  return new Element(tag, attrib);
-};
-
-exports.XML = function(data) {
-  var et = new ElementTree();
-  return et.parse(data);
-};
-
-exports.parse = parse;
-exports.register_namespace = register_namespace;
-exports.tostring = tostring;
diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/lib/errors.js b/bin/node_modules/cordova-common/node_modules/elementtree/lib/errors.js
deleted file mode 100644
index e8742be..0000000
--- a/bin/node_modules/cordova-common/node_modules/elementtree/lib/errors.js
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- *  Copyright 2011 Rackspace
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- */
-
-var util = require('util');
-
-var sprintf = require('./sprintf').sprintf;
-
-function SyntaxError(token, msg) {
-  msg = msg || sprintf('Syntax Error at token %s', token.toString());
-  this.token = token;
-  this.message = msg;
-  Error.call(this, msg);
-}
-
-util.inherits(SyntaxError, Error);
-
-exports.SyntaxError = SyntaxError;
diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/lib/parser.js b/bin/node_modules/cordova-common/node_modules/elementtree/lib/parser.js
deleted file mode 100644
index 7307ee4..0000000
--- a/bin/node_modules/cordova-common/node_modules/elementtree/lib/parser.js
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- *  Copyright 2011 Rackspace
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- */
-
-/* TODO: support node-expat C++ module optionally */
-
-var util = require('util');
-var parsers = require('./parsers/index');
-
-function get_parser(name) {
-  if (name === 'sax') {
-    return parsers.sax;
-  }
-  else {
-    throw new Error('Invalid parser: ' + name);
-  }
-}
-
-
-exports.get_parser = get_parser;
diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/lib/parsers/index.js b/bin/node_modules/cordova-common/node_modules/elementtree/lib/parsers/index.js
deleted file mode 100644
index 5eac5c8..0000000
--- a/bin/node_modules/cordova-common/node_modules/elementtree/lib/parsers/index.js
+++ /dev/null
@@ -1 +0,0 @@
-exports.sax = require('./sax');
diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/lib/parsers/sax.js b/bin/node_modules/cordova-common/node_modules/elementtree/lib/parsers/sax.js
deleted file mode 100644
index 69b0a59..0000000
--- a/bin/node_modules/cordova-common/node_modules/elementtree/lib/parsers/sax.js
+++ /dev/null
@@ -1,56 +0,0 @@
-var util = require('util');
-
-var sax = require('sax');
-
-var TreeBuilder = require('./../treebuilder').TreeBuilder;
-
-function XMLParser(target) {
-  this.parser = sax.parser(true);
-
-  this.target = (target) ? target : new TreeBuilder();
-
-  this.parser.onopentag = this._handleOpenTag.bind(this);
-  this.parser.ontext = this._handleText.bind(this);
-  this.parser.oncdata = this._handleCdata.bind(this);
-  this.parser.ondoctype = this._handleDoctype.bind(this);
-  this.parser.oncomment = this._handleComment.bind(this);
-  this.parser.onclosetag = this._handleCloseTag.bind(this);
-  this.parser.onerror = this._handleError.bind(this);
-}
-
-XMLParser.prototype._handleOpenTag = function(tag) {
-  this.target.start(tag.name, tag.attributes);
-};
-
-XMLParser.prototype._handleText = function(text) {
-  this.target.data(text);
-};
-
-XMLParser.prototype._handleCdata = function(text) {
-  this.target.data(text);
-};
-
-XMLParser.prototype._handleDoctype = function(text) {
-};
-
-XMLParser.prototype._handleComment = function(comment) {
-};
-
-XMLParser.prototype._handleCloseTag = function(tag) {
-  this.target.end(tag);
-};
-
-XMLParser.prototype._handleError = function(err) {
-  throw err;
-};
-
-XMLParser.prototype.feed = function(chunk) {
-  this.parser.write(chunk);
-};
-
-XMLParser.prototype.close = function() {
-  this.parser.close();
-  return this.target.close();
-};
-
-exports.XMLParser = XMLParser;
diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/lib/sprintf.js b/bin/node_modules/cordova-common/node_modules/elementtree/lib/sprintf.js
deleted file mode 100644
index f802c1b..0000000
--- a/bin/node_modules/cordova-common/node_modules/elementtree/lib/sprintf.js
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- *  Copyright 2011 Rackspace
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- */
-
-var cache = {};
-
-
-// Do any others need escaping?
-var TO_ESCAPE = {
-  '\'': '\\\'',
-  '\n': '\\n'
-};
-
-
-function populate(formatter) {
-  var i, type,
-      key = formatter,
-      prev = 0,
-      arg = 1,
-      builder = 'return \'';
-
-  for (i = 0; i < formatter.length; i++) {
-    if (formatter[i] === '%') {
-      type = formatter[i + 1];
-
-      switch (type) {
-        case 's':
-          builder += formatter.slice(prev, i) + '\' + arguments[' + arg + '] + \'';
-          prev = i + 2;
-          arg++;
-          break;
-        case 'j':
-          builder += formatter.slice(prev, i) + '\' + JSON.stringify(arguments[' + arg + ']) + \'';
-          prev = i + 2;
-          arg++;
-          break;
-        case '%':
-          builder += formatter.slice(prev, i + 1);
-          prev = i + 2;
-          i++;
-          break;
-      }
-
-
-    } else if (TO_ESCAPE[formatter[i]]) {
-      builder += formatter.slice(prev, i) + TO_ESCAPE[formatter[i]];
-      prev = i + 1;
-    }
-  }
-
-  builder += formatter.slice(prev) + '\';';
-  cache[key] = new Function(builder);
-}
-
-
-/**
- * A fast version of sprintf(), which currently only supports the %s and %j.
- * This caches a formatting function for each format string that is used, so
- * you should only use this sprintf() will be called many times with a single
- * format string and a limited number of format strings will ever be used (in
- * general this means that format strings should be string literals).
- *
- * @param {String} formatter A format string.
- * @param {...String} var_args Values that will be formatted by %s and %j.
- * @return {String} The formatted output.
- */
-exports.sprintf = function(formatter, var_args) {
-  if (!cache[formatter]) {
-    populate(formatter);
-  }
-
-  return cache[formatter].apply(null, arguments);
-};
diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/lib/treebuilder.js b/bin/node_modules/cordova-common/node_modules/elementtree/lib/treebuilder.js
deleted file mode 100644
index 393a98f..0000000
--- a/bin/node_modules/cordova-common/node_modules/elementtree/lib/treebuilder.js
+++ /dev/null
@@ -1,60 +0,0 @@
-function TreeBuilder(element_factory) {
-  this._data = [];
-  this._elem = [];
-  this._last = null;
-  this._tail = null;
-  if (!element_factory) {
-    /* evil circular dep */
-    element_factory = require('./elementtree').Element;
-  }
-  this._factory = element_factory;
-}
-
-TreeBuilder.prototype.close = function() {
-  return this._last;
-};
-
-TreeBuilder.prototype._flush = function() {
-  if (this._data) {
-    if (this._last !== null) {
-      var text = this._data.join("");
-      if (this._tail) {
-        this._last.tail = text;
-      }
-      else {
-        this._last.text = text;
-      }
-    }
-    this._data = [];
-  }
-};
-
-TreeBuilder.prototype.data = function(data) {
-  this._data.push(data);
-};
-
-TreeBuilder.prototype.start = function(tag, attrs) {
-  this._flush();
-  var elem = this._factory(tag, attrs);
-  this._last = elem;
-
-  if (this._elem.length) {
-    this._elem[this._elem.length - 1].append(elem);
-  }
-
-  this._elem.push(elem);
-
-  this._tail = null;
-};
-
-TreeBuilder.prototype.end = function(tag) {
-  this._flush();
-  this._last = this._elem.pop();
-  if (this._last.tag !== tag) {
-    throw new Error("end tag mismatch");
-  }
-  this._tail = 1;
-  return this._last;
-};
-
-exports.TreeBuilder = TreeBuilder;
diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/lib/utils.js b/bin/node_modules/cordova-common/node_modules/elementtree/lib/utils.js
deleted file mode 100644
index b08a670..0000000
--- a/bin/node_modules/cordova-common/node_modules/elementtree/lib/utils.js
+++ /dev/null
@@ -1,72 +0,0 @@
-/**
- *  Copyright 2011 Rackspace
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- */
-
-/**
- * @param {Object} hash.
- * @param {Array} ignored.
- */
-function items(hash, ignored) {
-  ignored = ignored || null;
-  var k, rv = [];
-
-  function is_ignored(key) {
-    if (!ignored || ignored.length === 0) {
-      return false;
-    }
-
-    return ignored.indexOf(key);
-  }
-
-  for (k in hash) {
-    if (hash.hasOwnProperty(k) && !(is_ignored(ignored))) {
-      rv.push([k, hash[k]]);
-    }
-  }
-
-  return rv;
-}
-
-
-function findall(re, str) {
-  var match, matches = [];
-
-  while ((match = re.exec(str))) {
-      matches.push(match);
-  }
-
-  return matches;
-}
-
-function merge(a, b) {
-  var c = {}, attrname;
-
-  for (attrname in a) {
-    if (a.hasOwnProperty(attrname)) {
-      c[attrname] = a[attrname];
-    }
-  }
-  for (attrname in b) {
-    if (b.hasOwnProperty(attrname)) {
-      c[attrname] = b[attrname];
-    }
-  }
-  return c;
-}
-
-exports.items = items;
-exports.findall = findall;
-exports.merge = merge;
diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/AUTHORS b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/AUTHORS
deleted file mode 100644
index 26d8659..0000000
--- a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/AUTHORS
+++ /dev/null
@@ -1,9 +0,0 @@
-# contributors sorted by whether or not they're me.
-Isaac Z. Schlueter <i@izs.me>
-Stein Martin Hustad <stein@hustad.com>
-Mikeal Rogers <mikeal.rogers@gmail.com>
-Laurie Harper <laurie@holoweb.net>
-Jann Horn <jann@Jann-PC.fritz.box>
-Elijah Insua <tmpvar@gmail.com>
-Henry Rawas <henryr@schakra.com>
-Justin Makeig <jmpublic@makeig.com>
diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/LICENSE b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/LICENSE
deleted file mode 100644
index 05a4010..0000000
--- a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/LICENSE
+++ /dev/null
@@ -1,23 +0,0 @@
-Copyright 2009, 2010, 2011 Isaac Z. Schlueter.
-All rights reserved.
-
-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/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/README.md b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/README.md
deleted file mode 100644
index 9c63dc4..0000000
--- a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/README.md
+++ /dev/null
@@ -1,213 +0,0 @@
-# sax js
-
-A sax-style parser for XML and HTML.
-
-Designed with [node](http://nodejs.org/) in mind, but should work fine in
-the browser or other CommonJS implementations.
-
-## What This Is
-
-* A very simple tool to parse through an XML string.
-* A stepping stone to a streaming HTML parser.
-* A handy way to deal with RSS and other mostly-ok-but-kinda-broken XML 
-  docs.
-
-## What This Is (probably) Not
-
-* An HTML Parser - That's a fine goal, but this isn't it.  It's just
-  XML.
-* A DOM Builder - You can use it to build an object model out of XML,
-  but it doesn't do that out of the box.
-* XSLT - No DOM = no querying.
-* 100% Compliant with (some other SAX implementation) - Most SAX
-  implementations are in Java and do a lot more than this does.
-* An XML Validator - It does a little validation when in strict mode, but
-  not much.
-* A Schema-Aware XSD Thing - Schemas are an exercise in fetishistic 
-  masochism.
-* A DTD-aware Thing - Fetching DTDs is a much bigger job.
-
-## Regarding `<!DOCTYPE`s and `<!ENTITY`s
-
-The parser will handle the basic XML entities in text nodes and attribute
-values: `&amp; &lt; &gt; &apos; &quot;`. It's possible to define additional
-entities in XML by putting them in the DTD. This parser doesn't do anything
-with that. If you want to listen to the `ondoctype` event, and then fetch
-the doctypes, and read the entities and add them to `parser.ENTITIES`, then
-be my guest.
-
-Unknown entities will fail in strict mode, and in loose mode, will pass
-through unmolested.
-
-## Usage
-
-    var sax = require("./lib/sax"),
-      strict = true, // set to false for html-mode
-      parser = sax.parser(strict);
-
-    parser.onerror = function (e) {
-      // an error happened.
-    };
-    parser.ontext = function (t) {
-      // got some text.  t is the string of text.
-    };
-    parser.onopentag = function (node) {
-      // opened a tag.  node has "name" and "attributes"
-    };
-    parser.onattribute = function (attr) {
-      // an attribute.  attr has "name" and "value"
-    };
-    parser.onend = function () {
-      // parser stream is done, and ready to have more stuff written to it.
-    };
-
-    parser.write('<xml>Hello, <who name="world">world</who>!</xml>').close();
-
-    // stream usage
-    // takes the same options as the parser
-    var saxStream = require("sax").createStream(strict, options)
-    saxStream.on("error", function (e) {
-      // unhandled errors will throw, since this is a proper node
-      // event emitter.
-      console.error("error!", e)
-      // clear the error
-      this._parser.error = null
-      this._parser.resume()
-    })
-    saxStream.on("opentag", function (node) {
-      // same object as above
-    })
-    // pipe is supported, and it's readable/writable
-    // same chunks coming in also go out.
-    fs.createReadStream("file.xml")
-      .pipe(saxStream)
-      .pipe(fs.createReadStream("file-copy.xml"))
-
-
-
-## Arguments
-
-Pass the following arguments to the parser function.  All are optional.
-
-`strict` - Boolean. Whether or not to be a jerk. Default: `false`.
-
-`opt` - Object bag of settings regarding string formatting.  All default to `false`.
-
-Settings supported:
-
-* `trim` - Boolean. Whether or not to trim text and comment nodes.
-* `normalize` - Boolean. If true, then turn any whitespace into a single
-  space.
-* `lowercasetags` - Boolean. If true, then lowercase tags in loose mode, 
-  rather than uppercasing them.
-* `xmlns` - Boolean. If true, then namespaces are supported.
-
-## Methods
-
-`write` - Write bytes onto the stream. You don't have to do this all at
-once. You can keep writing as much as you want.
-
-`close` - Close the stream. Once closed, no more data may be written until
-it is done processing the buffer, which is signaled by the `end` event.
-
-`resume` - To gracefully handle errors, assign a listener to the `error`
-event. Then, when the error is taken care of, you can call `resume` to
-continue parsing. Otherwise, the parser will not continue while in an error
-state.
-
-## Members
-
-At all times, the parser object will have the following members:
-
-`line`, `column`, `position` - Indications of the position in the XML
-document where the parser currently is looking.
-
-`startTagPosition` - Indicates the position where the current tag starts.
-
-`closed` - Boolean indicating whether or not the parser can be written to.
-If it's `true`, then wait for the `ready` event to write again.
-
-`strict` - Boolean indicating whether or not the parser is a jerk.
-
-`opt` - Any options passed into the constructor.
-
-`tag` - The current tag being dealt with.
-
-And a bunch of other stuff that you probably shouldn't touch.
-
-## Events
-
-All events emit with a single argument. To listen to an event, assign a
-function to `on<eventname>`. Functions get executed in the this-context of
-the parser object. The list of supported events are also in the exported
-`EVENTS` array.
-
-When using the stream interface, assign handlers using the EventEmitter
-`on` function in the normal fashion.
-
-`error` - Indication that something bad happened. The error will be hanging
-out on `parser.error`, and must be deleted before parsing can continue. By
-listening to this event, you can keep an eye on that kind of stuff. Note:
-this happens *much* more in strict mode. Argument: instance of `Error`.
-
-`text` - Text node. Argument: string of text.
-
-`doctype` - The `<!DOCTYPE` declaration. Argument: doctype string.
-
-`processinginstruction` - Stuff like `<?xml foo="blerg" ?>`. Argument:
-object with `name` and `body` members. Attributes are not parsed, as
-processing instructions have implementation dependent semantics.
-
-`sgmldeclaration` - Random SGML declarations. Stuff like `<!ENTITY p>`
-would trigger this kind of event. This is a weird thing to support, so it
-might go away at some point. SAX isn't intended to be used to parse SGML,
-after all.
-
-`opentag` - An opening tag. Argument: object with `name` and `attributes`.
-In non-strict mode, tag names are uppercased, unless the `lowercasetags`
-option is set.  If the `xmlns` option is set, then it will contain
-namespace binding information on the `ns` member, and will have a
-`local`, `prefix`, and `uri` member.
-
-`closetag` - A closing tag. In loose mode, tags are auto-closed if their
-parent closes. In strict mode, well-formedness is enforced. Note that
-self-closing tags will have `closeTag` emitted immediately after `openTag`.
-Argument: tag name.
-
-`attribute` - An attribute node.  Argument: object with `name` and `value`,
-and also namespace information if the `xmlns` option flag is set.
-
-`comment` - A comment node.  Argument: the string of the comment.
-
-`opencdata` - The opening tag of a `<![CDATA[` block.
-
-`cdata` - The text of a `<![CDATA[` block. Since `<![CDATA[` blocks can get
-quite large, this event may fire multiple times for a single block, if it
-is broken up into multiple `write()`s. Argument: the string of random
-character data.
-
-`closecdata` - The closing tag (`]]>`) of a `<![CDATA[` block.
-
-`opennamespace` - If the `xmlns` option is set, then this event will
-signal the start of a new namespace binding.
-
-`closenamespace` - If the `xmlns` option is set, then this event will
-signal the end of a namespace binding.
-
-`end` - Indication that the closed stream has ended.
-
-`ready` - Indication that the stream has reset, and is ready to be written
-to.
-
-`noscript` - In non-strict mode, `<script>` tags trigger a `"script"`
-event, and their contents are not checked for special xml characters.
-If you pass `noscript: true`, then this behavior is suppressed.
-
-## Reporting Problems
-
-It's best to write a failing test if you find an issue.  I will always
-accept pull requests with failing tests if they demonstrate intended
-behavior, but it is very hard to figure out what issue you're describing
-without a test.  Writing a test is also the best way for you yourself
-to figure out if you really understand the issue you think you have with
-sax-js.
diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/examples/big-not-pretty.xml b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/examples/big-not-pretty.xml
deleted file mode 100644
index fb5265d..0000000
--- a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/examples/big-not-pretty.xml
+++ /dev/null
@@ -1,8002 +0,0 @@
-<big>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
-</big>
diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/examples/example.js b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/examples/example.js
deleted file mode 100644
index e7f81e6..0000000
--- a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/examples/example.js
+++ /dev/null
@@ -1,41 +0,0 @@
-
-var fs = require("fs"),
-  sys = require("sys"),
-  path = require("path"),
-  xml = fs.cat(path.join(__dirname, "test.xml")),
-  sax = require("../lib/sax"),
-  strict = sax.parser(true),
-  loose = sax.parser(false, {trim:true}),
-  inspector = function (ev) { return function (data) {
-    // sys.error("");
-    // sys.error(ev+": "+sys.inspect(data));
-    // for (var i in data) sys.error(i+ " "+sys.inspect(data[i]));
-    // sys.error(this.line+":"+this.column);
-  }};
-
-xml.addCallback(function (xml) {
-  // strict.write(xml);
-  
-  sax.EVENTS.forEach(function (ev) {
-    loose["on"+ev] = inspector(ev);
-  });
-  loose.onend = function () {
-    // sys.error("end");
-    // sys.error(sys.inspect(loose));
-  };
-  
-  // do this one char at a time to verify that it works.
-  // (function () {
-  //   if (xml) {
-  //     loose.write(xml.substr(0,1000));
-  //     xml = xml.substr(1000);
-  //     process.nextTick(arguments.callee);
-  //   } else loose.close();
-  // })();
-  
-  for (var i = 0; i < 1000; i ++) {
-    loose.write(xml);
-    loose.close();
-  }
-
-});
diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/examples/get-products.js b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/examples/get-products.js
deleted file mode 100644
index 9e8d74a..0000000
--- a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/examples/get-products.js
+++ /dev/null
@@ -1,58 +0,0 @@
-// pull out /GeneralSearchResponse/categories/category/items/product tags
-// the rest we don't care about.
-
-var sax = require("../lib/sax.js")
-var fs = require("fs")
-var path = require("path")
-var xmlFile = path.resolve(__dirname, "shopping.xml")
-var util = require("util")
-var http = require("http")
-
-fs.readFile(xmlFile, function (er, d) {
-  http.createServer(function (req, res) {
-    if (er) throw er
-    var xmlstr = d.toString("utf8")
-
-    var parser = sax.parser(true)
-    var products = []
-    var product = null
-    var currentTag = null
-
-    parser.onclosetag = function (tagName) {
-      if (tagName === "product") {
-        products.push(product)
-        currentTag = product = null
-        return
-      }
-      if (currentTag && currentTag.parent) {
-        var p = currentTag.parent
-        delete currentTag.parent
-        currentTag = p
-      }
-    }
-
-    parser.onopentag = function (tag) {
-      if (tag.name !== "product" && !product) return
-      if (tag.name === "product") {
-        product = tag
-      }
-      tag.parent = currentTag
-      tag.children = []
-      tag.parent && tag.parent.children.push(tag)
-      currentTag = tag
-    }
-
-    parser.ontext = function (text) {
-      if (currentTag) currentTag.children.push(text)
-    }
-
-    parser.onend = function () {
-      var out = util.inspect(products, false, 3, true)
-      res.writeHead(200, {"content-type":"application/json"})
-      res.end("{\"ok\":true}")
-      // res.end(JSON.stringify(products))
-    }
-
-    parser.write(xmlstr).end()
-  }).listen(1337)
-})
diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/examples/hello-world.js b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/examples/hello-world.js
deleted file mode 100644
index cbfa518..0000000
--- a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/examples/hello-world.js
+++ /dev/null
@@ -1,4 +0,0 @@
-require("http").createServer(function (req, res) {
-  res.writeHead(200, {"content-type":"application/json"})
-  res.end(JSON.stringify({ok: true}))
-}).listen(1337)
diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/examples/not-pretty.xml b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/examples/not-pretty.xml
deleted file mode 100644
index 9592852..0000000
--- a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/examples/not-pretty.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<root>
-		something<else>  blerm <slurm 
-		
-		
-	attrib = 
-	"blorg"       ></else><!-- COMMENT!
-	
---><![CDATA[processing...]]>  <selfclosing tag="blr>&quot;"/> a bit down here</root>
diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/examples/pretty-print.js b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/examples/pretty-print.js
deleted file mode 100644
index cd6aca9..0000000
--- a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/examples/pretty-print.js
+++ /dev/null
@@ -1,74 +0,0 @@
-var sax = require("../lib/sax")
-  , printer = sax.createStream(false, {lowercasetags:true, trim:true})
-  , fs = require("fs")
-
-function entity (str) {
-  return str.replace('"', '&quot;')
-}
-
-printer.tabstop = 2
-printer.level = 0
-printer.indent = function () {
-  print("\n")
-  for (var i = this.level; i > 0; i --) {
-    for (var j = this.tabstop; j > 0; j --) {
-      print(" ")
-    }
-  }
-}
-printer.on("opentag", function (tag) {
-  this.indent()
-  this.level ++
-  print("<"+tag.name)
-  for (var i in tag.attributes) {
-    print(" "+i+"=\""+entity(tag.attributes[i])+"\"")
-  }
-  print(">")
-})
-
-printer.on("text", ontext)
-printer.on("doctype", ontext)
-function ontext (text) {
-  this.indent()
-  print(text)
-}
-
-printer.on("closetag", function (tag) {
-  this.level --
-  this.indent()
-  print("</"+tag+">")
-})
-
-printer.on("cdata", function (data) {
-  this.indent()
-  print("<![CDATA["+data+"]]>")
-})
-
-printer.on("comment", function (comment) {
-  this.indent()
-  print("<!--"+comment+"-->")
-})
-
-printer.on("error", function (error) {
-  console.error(error)
-  throw error
-})
-
-if (!process.argv[2]) {
-  throw new Error("Please provide an xml file to prettify\n"+
-    "TODO: read from stdin or take a file")
-}
-var xmlfile = require("path").join(process.cwd(), process.argv[2])
-var fstr = fs.createReadStream(xmlfile, { encoding: "utf8" })
-
-function print (c) {
-  if (!process.stdout.write(c)) {
-    fstr.pause()
-  }
-}
-
-process.stdout.on("drain", function () {
-  fstr.resume()
-})
-
-fstr.pipe(printer)
diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/examples/shopping.xml b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/examples/shopping.xml
deleted file mode 100644
index 223c6c6..0000000
--- a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/examples/shopping.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-<GeneralSearchResponse xmlns="urn:types.partner.api.shopping.com"><serverDetail><apiEnv>sandbox</apiEnv><apiVersion>3.1 r31.Kadu4DC.phase3</apiVersion><buildNumber>5778</buildNumber><buildTimestamp>2011.10.06 15:37:23 PST</buildTimestamp><requestId>p2.a121bc2aaf029435dce6</requestId><timestamp>2011-10-21T18:38:45.982-04:00</timestamp><responseTime>P0Y0M0DT0H0M0.169S</responseTime></serverDetail><exceptions exceptionCount="1"><exception type="warning"><code>1112</code><message>You are currently using the SDC API sandbox environment!  No clicks to merchant URLs from this response will be paid.  Please change the host of your API requests to 'publisher.api.shopping.com' when you have finished development and testing</message></exception></exceptions><clientTracking height="19" type="logo" width="106"><sourceURL>http://statTest.dealtime.com/pixel/noscript?PV_EvnTyp=APPV&amp;APPV_APITSP=10%2F21%2F11_06%3A38%3A45_PM&amp;APPV_DSPRQSID=p2.a121bc2aaf029435dce6&amp;APPV_IMGURL=http://img.shopping.com/sc/glb/sdc_logo_106x19.gif&amp;APPV_LI_LNKINID=7000610&amp;APPV_LI_SBMKYW=nikon&amp;APPV_MTCTYP=1000&amp;APPV_PRTID=2002&amp;APPV_BrnID=14804</sourceURL><hrefURL>http://www.shopping.com/digital-cameras/products</hrefURL><titleText>Digital Cameras</titleText><altText>Digital Cameras</altText></clientTracking><searchHistory><categorySelection id="3"><name>Electronics</name><categoryURL>http://www.shopping.com/xCH-electronics-nikon~linkin_id-7000610?oq=nikon</categoryURL></categorySelection><categorySelection id="449"><name>Cameras and Photography</name><categoryURL>http://www.shopping.com/xCH-cameras_and_photography-nikon~linkin_id-7000610?oq=nikon</categoryURL></categorySelection><categorySelection id="7185"><name>Digital Cameras</name><categoryURL>http://www.shopping.com/digital-cameras/nikon/products?oq=nikon&amp;linkin_id=7000610</categoryURL></categorySelection><dynamicNavigationHistory><keywordSearch dropped="false" modified="false"><originalKeyword>nikon</originalKeyword><resultKeyword>nikon</resultKeyword></keywordSearch></dynamicNavigationHistory></searchHistory><categories matchedCategoryCount="1" returnedCategoryCount="1"><category id="7185"><name>Digital Cameras</name><categoryURL>http://www.shopping.com/digital-cameras/nikon/products?oq=nikon&amp;linkin_id=7000610</categoryURL><items matchedItemCount="322" pageNumber="1" returnedItemCount="5"><product id="101677489"><name>Nikon D3100 Digital Camera</name><shortDescription>14.2 Megapixel, SLR Camera, 3 in. LCD Screen, With High Definition Video, Weight: 1 lb.</shortDescription><fullDescription>The Nikon D3100 digital SLR camera speaks to the growing ranks of enthusiastic D-SLR users and aspiring photographers by providing an easy-to-use and affordable entrance to the world of Nikon D-SLR’s. The 14.2-megapixel D3100 has powerful features, such as the enhanced Guide Mode that makes it easy to unleash creative potential and capture memories with still images and full HD video. Like having a personal photo tutor at your fingertips, this unique feature provides a simple graphical interface on the camera’s LCD that guides users by suggesting and/or adjusting camera settings to achieve the desired end result images. The D3100 is also the world’s first D-SLR to introduce full time auto focus (AF) in Live View and D-Movie mode to effortlessly achieve the critical focus needed when shooting Full HD 1080p video.</fullDescription><images><image available="true" height="100" width="100"><sourceURL>http://di1.shopping.com/images/pi/93/bc/04/101677489-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=2&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=1</sourceURL></image><image available="true" height="200" width="200"><sourceURL>http://di1.shopping.com/images/pi/93/bc/04/101677489-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=2&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=1</sourceURL></image><image available="true" height="300" width="300"><sourceURL>http://di1.shopping.com/images/pi/93/bc/04/101677489-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=2&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=1</sourceURL></image><image available="true" height="400" width="400"><sourceURL>http://di1.shopping.com/images/pi/93/bc/04/101677489-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=2&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=1</sourceURL></image><image available="true" height="500" width="606"><sourceURL>http://di1.shopping.com/images/pi/93/bc/04/101677489-606x500-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=2&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=1</sourceURL></image></images><rating><reviewCount>9</reviewCount><rating>4.56</rating><ratingImage height="18" width="91"><sourceURL>http://img.shopping.com/sc/pr/sdc_stars_sm_4.5.gif</sourceURL></ratingImage><reviewURL>http://www.shopping.com/Nikon-D3100/reviews~linkin_id-7000610</reviewURL></rating><minPrice>429.00</minPrice><maxPrice>1360.00</maxPrice><productOffersURL>http://www.shopping.com/Nikon-D3100/prices~linkin_id-7000610</productOffersURL><productSpecsURL>http://www.shopping.com/Nikon-D3100/info~linkin_id-7000610</productSpecsURL><offers matchedOfferCount="64" pageNumber="1" returnedOfferCount="5"><offer featured="false" id="-ZW6BMZqz6fbS-aULwga_g==" smartBuy="false" used="false"><name>Nikon D3100 Digital SLR Camera with 18-55mm NIKKOR VR Lens</name><description>The Nikon D3100 Digital SLR Camera is an affordable  compact  and lightweight photographic power-house. It features the all-purpose 18-55mm VR lens  a high-resolution 14.2 MP CMOS sensor along with a feature set that's comprehensive yet easy to navigate - the intuitive onboard learn-as-you grow guide mode allows the photographer to understand what the 3100 can do quickly and easily. Capture beautiful pictures and amazing Full HD 1080p movies with sound and full-time autofocus.  Availabilty: In Stock!</description><categoryId>7185</categoryId><manufacturer>Nikon</manufacturer><imageList><image available="true" height="100" width="100"><sourceURL>http://di102.shopping.com/images/di/2d/5a/57/36424d5a717a366662532d61554c7767615f67-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=1</sourceURL></image><image available="true" height="200" width="200"><sourceURL>http://di102.shopping.com/images/di/2d/5a/57/36424d5a717a366662532d61554c7767615f67-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=1</sourceURL></image><image available="true" height="300" width="300"><sourceURL>http://di102.shopping.com/images/di/2d/5a/57/36424d5a717a366662532d61554c7767615f67-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=1</sourceURL></image><image available="false" height="400" width="400"><sourceURL>http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=1</sourceURL></image><image available="true" height="350" width="350"><sourceURL>http://di102.shopping.com/images/di/2d/5a/57/36424d5a717a366662532d61554c7767615f67-350x350-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=1</sourceURL></image></imageList><stockStatus>in-stock</stockStatus><storeNotes>Free Shipping with Any Purchase!</storeNotes><basePrice currency="USD">529.00</basePrice><tax checkSite="true"></tax><shippingCost currency="USD">0.00</shippingCost><totalPrice checkSite="true"></totalPrice><originalPrice currency="USD">799.00</originalPrice><offerURL>http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=647&amp;BEFID=7185&amp;aon=%5E1&amp;MerchantID=475674&amp;crawler_id=475674&amp;dealId=-ZW6BMZqz6fbS-aULwga_g%3D%3D&amp;url=http%3A%2F%2Fwww.fumfie.com%2Fproduct%2F343.5%2Fshopping-com%3F&amp;linkin_id=7000610&amp;Issdt=111021183845&amp;searchID=p2.a121bc2aaf029435dce6&amp;DealName=Nikon+D3100+Digital+SLR+Camera+with+18-55mm+NIKKOR+VR+Lens&amp;dlprc=529.0&amp;crn=&amp;istrsmrc=1&amp;isathrsl=0&amp;AR=1&amp;NG=20&amp;NDP=200&amp;PN=1&amp;ST=7&amp;DB=sdcprod&amp;MT=phx-pkadudc2&amp;FPT=DSP&amp;NDS=&amp;NMS=&amp;MRS=&amp;PD=101677489&amp;brnId=14804&amp;IsFtr=0&amp;IsSmart=0&amp;DMT=&amp;op=&amp;CM=&amp;DlLng=1&amp;RR=1&amp;cid=&amp;semid1=&amp;semid2=&amp;IsLps=0&amp;CC=1&amp;SL=1&amp;FS=1&amp;code=&amp;acode=658&amp;category=&amp;HasLink=&amp;frameId=&amp;ND=&amp;MN=&amp;PT=&amp;prjID=&amp;GR=&amp;lnkId=&amp;VK=</offerURL><store authorizedReseller="false" id="475674" trusted="true"><name>FumFie</name><logo available="true" height="31" width="88"><sourceURL>http://img.shopping.com/cctool/merch_logos/475674.gif</sourceURL></logo><phoneNumber>866 666 9198</phoneNumber><ratingInfo><reviewCount>560</reviewCount><rating>4.27</rating><ratingImage height="18" width="91"><sourceURL>http://img.shopping.com/sc/mr/sdc_checks_45.gif</sourceURL></ratingImage><reviewURL>http://www.shopping.com/xMR-store_fumfie~MRD-475674~S-1~linkin_id-7000610</reviewURL></ratingInfo><countryFlag height="11" width="18"><sourceURL>http://img.shopping.com/sc/glb/flag/US.gif</sourceURL><countryCode>US</countryCode></countryFlag></store><sku>F343C5</sku></offer><offer featured="false" id="md1e9lD8vdOu4FHQfJqKng==" smartBuy="false" used="false"><name>Nikon Nikon D3100 14.2MP Digital SLR Camera with 18-55mm f/3.5-5.6 AF-S DX VR, Cameras</name><description>Nikon D3100 14.2MP Digital SLR Camera with 18-55mm f/3.5-5.6 AF-S DX VR</description><categoryId>7185</categoryId><manufacturer>Nikon</manufacturer><imageList><image available="true" height="100" width="100"><sourceURL>http://di109.shopping.com/images/di/6d/64/31/65396c443876644f7534464851664a714b6e67-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=2</sourceURL></image><image available="true" height="200" width="200"><sourceURL>http://di109.shopping.com/images/di/6d/64/31/65396c443876644f7534464851664a714b6e67-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=2</sourceURL></image><image available="true" height="300" width="300"><sourceURL>http://di109.shopping.com/images/di/6d/64/31/65396c443876644f7534464851664a714b6e67-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=2</sourceURL></image><image available="false" height="400" width="400"><sourceURL>http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=2</sourceURL></image><image available="true" height="352" width="385"><sourceURL>http://di109.shopping.com/images/di/6d/64/31/65396c443876644f7534464851664a714b6e67-385x352-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=2</sourceURL></image></imageList><stockStatus>in-stock</stockStatus><basePrice currency="USD">549.00</basePrice><tax checkSite="true"></tax><shippingCost currency="USD">0.00</shippingCost><totalPrice checkSite="true"></totalPrice><originalPrice currency="USD">549.00</originalPrice><offerURL>http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=779&amp;BEFID=7185&amp;aon=%5E1&amp;MerchantID=305814&amp;crawler_id=305814&amp;dealId=md1e9lD8vdOu4FHQfJqKng%3D%3D&amp;url=http%3A%2F%2Fwww.electronics-expo.com%2Findex.php%3Fpage%3Ditem%26id%3DNIKD3100%26source%3DSideCar%26scpid%3D8%26scid%3Dscsho318727%26&amp;linkin_id=7000610&amp;Issdt=111021183845&amp;searchID=p2.a121bc2aaf029435dce6&amp;DealName=Nikon+Nikon+D3100+14.2MP+Digital+SLR+Camera+with+18-55mm+f%2F3.5-5.6+AF-S+DX+VR%2C+Cameras&amp;dlprc=549.0&amp;crn=&amp;istrsmrc=1&amp;isathrsl=0&amp;AR=9&amp;NG=20&amp;NDP=200&amp;PN=1&amp;ST=7&amp;DB=sdcprod&amp;MT=phx-pkadudc2&amp;FPT=DSP&amp;NDS=&amp;NMS=&amp;MRS=&amp;PD=101677489&amp;brnId=14804&amp;IsFtr=0&amp;IsSmart=0&amp;DMT=&amp;op=&amp;CM=&amp;DlLng=1&amp;RR=9&amp;cid=&amp;semid1=&amp;semid2=&amp;IsLps=0&amp;CC=0&amp;SL=0&amp;FS=1&amp;code=&amp;acode=771&amp;category=&amp;HasLink=&amp;frameId=&amp;ND=&amp;MN=&amp;PT=&amp;prjID=&amp;GR=&amp;lnkId=&amp;VK=</offerURL><store authorizedReseller="false" id="305814" trusted="true"><name>Electronics Expo</name><logo available="true" height="31" width="88"><sourceURL>http://img.shopping.com/cctool/merch_logos/305814.gif</sourceURL></logo><phoneNumber>1-888-707-EXPO</phoneNumber><ratingInfo><reviewCount>371</reviewCount><rating>3.90</rating><ratingImage height="18" width="91"><sourceURL>http://img.shopping.com/sc/mr/sdc_checks_4.gif</sourceURL></ratingImage><reviewURL>http://www.shopping.com/xMR-store_electronics_expo~MRD-305814~S-1~linkin_id-7000610</reviewURL></ratingInfo><countryFlag height="11" width="18"><sourceURL>http://img.shopping.com/sc/glb/flag/US.gif</sourceURL><countryCode>US</countryCode></countryFlag></store><sku>NIKD3100</sku></offer><offer featured="false" id="yYuaXnDFtCY7rDUjkY2aaw==" smartBuy="false" used="false"><name>Nikon D3100 14.2-Megapixel Digital SLR Camera With 18-55mm Zoom-Nikkor Lens, Black</name><description>Split-second shutter response captures shots other cameras may have missed Helps eliminate the frustration of shutter delay! 14.2-megapixels for enlargements worth framing and hanging. Takes breathtaking 1080p HD movies. ISO sensitivity from 100-1600 for bright or dimly lit settings. 3.0in. color LCD for beautiful, wide-angle framing and viewing. In-camera image editing lets you retouch with no PC. Automatic scene modes include Child, Sports, Night Portrait and more. Accepts SDHC memory cards. Nikon D3100 14.2-Megapixel Digital SLR Camera With 18-55mm Zoom-Nikkor Lens, Black is one of many Digital SLR Cameras available through Office Depot. Made by Nikon.</description><categoryId>7185</categoryId><manufacturer>Nikon</manufacturer><imageList><image available="true" height="100" width="100"><sourceURL>http://di109.shopping.com/images/di/79/59/75/61586e4446744359377244556a6b5932616177-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=3</sourceURL></image><image available="true" height="200" width="200"><sourceURL>http://di109.shopping.com/images/di/79/59/75/61586e4446744359377244556a6b5932616177-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=3</sourceURL></image><image available="false" height="300" width="300"><sourceURL>http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=3</sourceURL></image><image available="false" height="400" width="400"><sourceURL>http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=3</sourceURL></image><image available="true" height="250" width="250"><sourceURL>http://di109.shopping.com/images/di/79/59/75/61586e4446744359377244556a6b5932616177-250x250-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=3</sourceURL></image></imageList><stockStatus>in-stock</stockStatus><basePrice currency="USD">549.99</basePrice><tax checkSite="true"></tax><shippingCost currency="USD">0.00</shippingCost><totalPrice checkSite="true"></totalPrice><originalPrice currency="USD">699.99</originalPrice><offerURL>http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=698&amp;BEFID=7185&amp;aon=%5E1&amp;MerchantID=467671&amp;crawler_id=467671&amp;dealId=yYuaXnDFtCY7rDUjkY2aaw%3D%3D&amp;url=http%3A%2F%2Flink.mercent.com%2Fredirect.ashx%3Fmr%3AmerchantID%3DOfficeDepot%26mr%3AtrackingCode%3DCEC9669E-6ABC-E011-9F24-0019B9C043EB%26mr%3AtargetUrl%3Dhttp%3A%2F%2Fwww.officedepot.com%2Fa%2Fproducts%2F486292%2FNikon-D3100-142-Megapixel-Digital-SLR%2F%253fcm_mmc%253dMercent-_-Shopping-_-Cameras_and_Camcorders-_-486292&amp;linkin_id=7000610&amp;Issdt=111021183845&amp;searchID=p2.a121bc2aaf029435dce6&amp;DealName=Nikon+D3100+14.2-Megapixel+Digital+SLR+Camera+With+18-55mm+Zoom-Nikkor+Lens%2C+Black&amp;dlprc=549.99&amp;crn=&amp;istrsmrc=1&amp;isathrsl=0&amp;AR=10&amp;NG=20&amp;NDP=200&amp;PN=1&amp;ST=7&amp;DB=sdcprod&amp;MT=phx-pkadudc2&amp;FPT=DSP&amp;NDS=&amp;NMS=&amp;MRS=&amp;PD=101677489&amp;brnId=14804&amp;IsFtr=0&amp;IsSmart=0&amp;DMT=&amp;op=&amp;CM=&amp;DlLng=1&amp;RR=10&amp;cid=&amp;semid1=&amp;semid2=&amp;IsLps=0&amp;CC=1&amp;SL=1&amp;FS=1&amp;code=&amp;acode=690&amp;category=&amp;HasLink=&amp;frameId=&amp;ND=&amp;MN=&amp;PT=&amp;prjID=&amp;GR=&amp;lnkId=&amp;VK=</offerURL><store authorizedReseller="false" id="467671" trusted="true"><name>Office Depot</name><logo available="true" height="31" width="88"><sourceURL>http://img.shopping.com/cctool/merch_logos/467671.gif</sourceURL></logo><phoneNumber>1-800-GO-DEPOT</phoneNumber><ratingInfo><reviewCount>135</reviewCount><rating>2.37</rating><ratingImage height="18" width="91"><sourceURL>http://img.shopping.com/sc/mr/sdc_checks_25.gif</sourceURL></ratingImage><reviewURL>http://www.shopping.com/xMR-store_office_depot_4158555~MRD-467671~S-1~linkin_id-7000610</reviewURL></ratingInfo><countryFlag height="11" width="18"><sourceURL>http://img.shopping.com/sc/glb/flag/US.gif</sourceURL><countryCode>US</countryCode></countryFlag></store><sku>486292</sku></offer><offer featured="false" id="Rl56U7CuiTYsH4MGZ02lxQ==" smartBuy="false" used="false"><name>Nikon® D3100™ 14.2MP Digital SLR with 18-55mm Lens</name><description>The Nikon D3100 DSLR will surprise you with its simplicity and impress you with superb results.</description><categoryId>7185</categoryId><manufacturer>Nikon</manufacturer><imageList><image available="true" height="100" width="100"><sourceURL>http://di103.shopping.com/images/di/52/6c/35/36553743756954597348344d475a30326c7851-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=4</sourceURL></image><image available="true" height="200" width="200"><sourceURL>http://di103.shopping.com/images/di/52/6c/35/36553743756954597348344d475a30326c7851-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=4</sourceURL></image><image available="false" height="300" width="300"><sourceURL>http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=4</sourceURL></image><image available="false" height="400" width="400"><sourceURL>http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=4</sourceURL></image><image available="true" height="220" width="220"><sourceURL>http://di103.shopping.com/images/di/52/6c/35/36553743756954597348344d475a30326c7851-220x220-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=4</sourceURL></image></imageList><stockStatus>in-stock</stockStatus><basePrice currency="USD">549.99</basePrice><tax checkSite="true"></tax><shippingCost currency="USD">6.05</shippingCost><totalPrice checkSite="true"></totalPrice><originalPrice currency="USD">549.99</originalPrice><offerURL>http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=504&amp;BEFID=7185&amp;aon=%5E1&amp;MerchantID=332477&amp;crawler_id=332477&amp;dealId=Rl56U7CuiTYsH4MGZ02lxQ%3D%3D&amp;url=http%3A%2F%2Ftracking.searchmarketing.com%2Fgsic.asp%3Faid%3D903483107%26&amp;linkin_id=7000610&amp;Issdt=111021183845&amp;searchID=p2.a121bc2aaf029435dce6&amp;DealName=Nikon%C2%AE+D3100%E2%84%A2+14.2MP+Digital+SLR+with+18-55mm+Lens&amp;dlprc=549.99&amp;crn=&amp;istrsmrc=0&amp;isathrsl=0&amp;AR=11&amp;NG=20&amp;NDP=200&amp;PN=1&amp;ST=7&amp;DB=sdcprod&amp;MT=phx-pkadudc2&amp;FPT=DSP&amp;NDS=&amp;NMS=&amp;MRS=&amp;PD=101677489&amp;brnId=14804&amp;IsFtr=0&amp;IsSmart=0&amp;DMT=&amp;op=&amp;CM=&amp;DlLng=1&amp;RR=11&amp;cid=&amp;semid1=&amp;semid2=&amp;IsLps=0&amp;CC=0&amp;SL=0&amp;FS=0&amp;code=&amp;acode=496&amp;category=&amp;HasLink=&amp;frameId=&amp;ND=&amp;MN=&amp;PT=&amp;prjID=&amp;GR=&amp;lnkId=&amp;VK=</offerURL><store authorizedReseller="false" id="332477" trusted="false"><name>RadioShack</name><logo available="true" height="31" width="88"><sourceURL>http://img.shopping.com/cctool/merch_logos/332477.gif</sourceURL></logo><ratingInfo><reviewCount>24</reviewCount><rating>2.25</rating><ratingImage height="18" width="91"><sourceURL>http://img.shopping.com/sc/mr/sdc_checks_25.gif</sourceURL></ratingImage><reviewURL>http://www.shopping.com/xMR-store_radioshack_9689~MRD-332477~S-1~linkin_id-7000610</reviewURL></ratingInfo><countryFlag height="11" width="18"><sourceURL>http://img.shopping.com/sc/glb/flag/US.gif</sourceURL><countryCode>US</countryCode></countryFlag></store><sku>9614867</sku></offer><offer featured="false" id="huS6xZKDKaKMTMP71eI6DA==" smartBuy="false" used="false"><name>Nikon D3100 SLR w/Nikon 18-55mm VR &amp; 55-200mm VR Lenses</name><description>14.2 Megapixels3" LCDLive ViewHD 1080p Video w/ Sound &amp; Autofocus11-point Autofocus3 Frames per Second ShootingISO 100 to 3200 (Expand to 12800-Hi2)Self Cleaning SensorEXPEED 2, Image Processing EngineScene Recognition System</description><categoryId>7185</categoryId><manufacturer>Nikon</manufacturer><imageList><image available="true" height="100" width="100"><sourceURL>http://di105.shopping.com/images/di/68/75/53/36785a4b444b614b4d544d5037316549364441-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=5</sourceURL></image><image available="true" height="200" width="200"><sourceURL>http://di105.shopping.com/images/di/68/75/53/36785a4b444b614b4d544d5037316549364441-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=5</sourceURL></image><image available="true" height="300" width="300"><sourceURL>http://di105.shopping.com/images/di/68/75/53/36785a4b444b614b4d544d5037316549364441-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=5</sourceURL></image><image available="false" height="400" width="400"><sourceURL>http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=5</sourceURL></image><image available="true" height="345" width="345"><sourceURL>http://di105.shopping.com/images/di/68/75/53/36785a4b444b614b4d544d5037316549364441-345x345-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=5</sourceURL></image></imageList><stockStatus>in-stock</stockStatus><basePrice currency="USD">695.00</basePrice><tax checkSite="true"></tax><shippingCost currency="USD">0.00</shippingCost><totalPrice checkSite="true"></totalPrice><originalPrice currency="USD">695.00</originalPrice><offerURL>http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=371&amp;BEFID=7185&amp;aon=%5E1&amp;MerchantID=487342&amp;crawler_id=487342&amp;dealId=huS6xZKDKaKMTMP71eI6DA%3D%3D&amp;url=http%3A%2F%2Fwww.rythercamera.com%2Fcatalog%2Fproduct_info.php%3Fcsv%3Dsh%26products_id%3D32983%26&amp;linkin_id=7000610&amp;Issdt=111021183845&amp;searchID=p2.a121bc2aaf029435dce6&amp;DealName=Nikon+D3100+SLR+w%2FNikon+18-55mm+VR+%26+55-200mm+VR+Lenses&amp;dlprc=695.0&amp;crn=&amp;istrsmrc=0&amp;isathrsl=0&amp;AR=15&amp;NG=20&amp;NDP=200&amp;PN=1&amp;ST=7&amp;DB=sdcprod&amp;MT=phx-pkadudc2&amp;FPT=DSP&amp;NDS=&amp;NMS=&amp;MRS=&amp;PD=101677489&amp;brnId=14804&amp;IsFtr=0&amp;IsSmart=0&amp;DMT=&amp;op=&amp;CM=&amp;DlLng=1&amp;RR=15&amp;cid=&amp;semid1=&amp;semid2=&amp;IsLps=0&amp;CC=0&amp;SL=0&amp;FS=1&amp;code=&amp;acode=379&amp;category=&amp;HasLink=&amp;frameId=&amp;ND=&amp;MN=&amp;PT=&amp;prjID=&amp;GR=&amp;lnkId=&amp;VK=</offerURL><store authorizedReseller="false" id="487342" trusted="false"><name>RytherCamera.com</name><logo available="true" height="31" width="88"><sourceURL>http://img.shopping.com/cctool/merch_logos/487342.gif</sourceURL></logo><phoneNumber>1-877-644-7593</phoneNumber><ratingInfo><reviewCount>0</reviewCount></ratingInfo><countryFlag height="11" width="18"><sourceURL>http://img.shopping.com/sc/glb/flag/US.gif</sourceURL><countryCode>US</countryCode></countryFlag></store><sku>32983</sku></offer></offers></product><product id="95397883"><name>Nikon COOLPIX S203 Digital Camera</name><shortDescription>10 Megapixel, Ultra-Compact Camera, 2.5 in. LCD Screen, 3x Optical Zoom, With Video Capability, Weight: 0.23 lb.</shortDescription><fullDescription>With 10.34 mega pixel, electronic VR vibration reduction, 5-level brightness adjustment, 3x optical zoom, and TFT LCD, Nikon Coolpix s203 fulfills all the demands of any photographer. The digital camera has an inbuilt memory of 44MB and an external memory slot made for all kinds of SD (Secure Digital) cards.</fullDescription><images><image available="true" height="100" width="100"><sourceURL>http://di1.shopping.com/images/pi/c4/ef/1b/95397883-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=2&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=2</sourceURL></image><image available="true" height="200" width="200"><sourceURL>http://di1.shopping.com/images/pi/c4/ef/1b/95397883-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=2&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=2</sourceURL></image><image available="true" height="300" width="300"><sourceURL>http://di1.shopping.com/images/pi/c4/ef/1b/95397883-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=2&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=2</sourceURL></image><image available="true" height="400" width="400"><sourceURL>http://di1.shopping.com/images/pi/c4/ef/1b/95397883-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=2&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=2</sourceURL></image><image available="true" height="499" width="500"><sourceURL>http://di1.shopping.com/images/pi/c4/ef/1b/95397883-500x499-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=2&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=2</sourceURL></image></images><rating><reviewCount>0</reviewCount></rating><minPrice>139.00</minPrice><maxPrice>139.00</maxPrice><productOffersURL>http://www.shopping.com/Nikon-Coolpix-S203/prices~linkin_id-7000610</productOffersURL><productSpecsURL>http://www.shopping.com/Nikon-Coolpix-S203/info~linkin_id-7000610</productSpecsURL><offers matchedOfferCount="1" pageNumber="1" returnedOfferCount="1"><offer featured="false" id="sBd2JnIEPM-A_lBAM1RZgQ==" smartBuy="false" used="false"><name>Nikon Coolpix S203 Digital Camera (Red)</name><description>With 10.34 mega pixel, electronic VR vibration reduction, 5-level brightness adjustment, 3x optical zoom, and TFT LCD, Nikon Coolpix s203 fulfills all the demands of any photographer. The digital camera has an inbuilt memory of 44MB and an external memory slot made for all kinds of SD (Secure Digital) cards.</description><categoryId>7185</categoryId><manufacturer>Nikon</manufacturer><imageList><image available="true" height="100" width="100"><sourceURL>http://di108.shopping.com/images/di/73/42/64/324a6e4945504d2d415f6c42414d31525a6751-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=1</sourceURL></image><image available="true" height="200" width="200"><sourceURL>http://di108.shopping.com/images/di/73/42/64/324a6e4945504d2d415f6c42414d31525a6751-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=1</sourceURL></image><image available="true" height="300" width="300"><sourceURL>http://di108.shopping.com/images/di/73/42/64/324a6e4945504d2d415f6c42414d31525a6751-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=1</sourceURL></image><image available="true" height="400" width="400"><sourceURL>http://di108.shopping.com/images/di/73/42/64/324a6e4945504d2d415f6c42414d31525a6751-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=1</sourceURL></image><image available="true" height="500" width="500"><sourceURL>http://di108.shopping.com/images/di/73/42/64/324a6e4945504d2d415f6c42414d31525a6751-500x500-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=1</sourceURL></image></imageList><stockStatus>in-stock</stockStatus><storeNotes>Fantastic prices with ease &amp; comfort of Amazon.com!</storeNotes><basePrice currency="USD">139.00</basePrice><shippingCost currency="USD">9.50</shippingCost><totalPrice checkSite="true"></totalPrice><originalPrice currency="USD">139.00</originalPrice><offerURL>http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=566&amp;BEFID=7185&amp;aon=%5E1&amp;MerchantID=301531&amp;crawler_id=1903313&amp;dealId=sBd2JnIEPM-A_lBAM1RZgQ%3D%3D&amp;url=http%3A%2F%2Fwww.amazon.com%2Fdp%2FB002T964IM%2Fref%3Dasc_df_B002T964IM1751618%3Fsmid%3DA22UHVNXG98FAT%26tag%3Ddealtime-ce-mp01feed-20%26linkCode%3Dasn%26creative%3D395105%26creativeASIN%3DB002T964IM&amp;linkin_id=7000610&amp;Issdt=111021183845&amp;searchID=p2.a121bc2aaf029435dce6&amp;DealName=Nikon+Coolpix+S203+Digital+Camera+%28Red%29&amp;dlprc=139.0&amp;crn=&amp;istrsmrc=0&amp;isathrsl=0&amp;AR=63&amp;NG=20&amp;NDP=200&amp;PN=1&amp;ST=7&amp;DB=sdcprod&amp;MT=phx-pkadudc2&amp;FPT=DSP&amp;NDS=&amp;NMS=&amp;MRS=&amp;PD=95397883&amp;brnId=14804&amp;IsFtr=0&amp;IsSmart=0&amp;DMT=&amp;op=&amp;CM=&amp;DlLng=1&amp;RR=63&amp;cid=&amp;semid1=&amp;semid2=&amp;IsLps=0&amp;CC=0&amp;SL=0&amp;FS=0&amp;code=&amp;acode=518&amp;category=&amp;HasLink=&amp;frameId=&amp;ND=&amp;MN=&amp;PT=&amp;prjID=&amp;GR=&amp;lnkId=&amp;VK=</offerURL><store authorizedReseller="false" id="301531" trusted="false"><name>Amazon Marketplace</name><logo available="true" height="31" width="88"><sourceURL>http://img.shopping.com/cctool/merch_logos/301531.gif</sourceURL></logo><ratingInfo><reviewCount>213</reviewCount><rating>2.73</rating><ratingImage height="18" width="91"><sourceURL>http://img.shopping.com/sc/mr/sdc_checks_25.gif</sourceURL></ratingImage><reviewURL>http://www.shopping.com/xMR-store_amazon_marketplace_9689~MRD-301531~S-1~linkin_id-7000610</reviewURL></ratingInfo><countryFlag height="11" width="18"><sourceURL>http://img.shopping.com/sc/glb/flag/US.gif</sourceURL><countryCode>US</countryCode></countryFlag></store><sku>B002T964IM</sku></offer></offers></product><product id="106834268"><name>Nikon S3100 Digital Camera</name><shortDescription>14.5 Megapixel, Compact Camera, 2.7 in. LCD Screen, 5x Optical Zoom, With High Definition Video, Weight: 0.23 lb.</shortDescription><fullDescription>This digital camera features a wide-angle optical Zoom-NIKKOR glass lens that allows you to capture anything from landscapes to portraits to action shots. The high-definition movie mode with one-touch recording makes it easy to capture video clips.</fullDescription><images><image available="true" height="100" width="100"><sourceURL>http://di1.shopping.com/images/pi/66/2d/33/106834268-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=2&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=3</sourceURL></image><image available="true" height="200" width="200"><sourceURL>http://di1.shopping.com/images/pi/66/2d/33/106834268-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=2&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=3</sourceURL></image><image available="true" height="300" width="300"><sourceURL>http://di1.shopping.com/images/pi/66/2d/33/106834268-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=2&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=3</sourceURL></image><image available="true" height="400" width="400"><sourceURL>http://di1.shopping.com/images/pi/66/2d/33/106834268-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=2&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=3</sourceURL></image><image available="true" height="387" width="507"><sourceURL>http://di1.shopping.com/images/pi/66/2d/33/106834268-507x387-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=2&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=3</sourceURL></image></images><rating><reviewCount>1</reviewCount><rating>2.00</rating><ratingImage height="18" width="91"><sourceURL>http://img.shopping.com/sc/pr/sdc_stars_sm_2.gif</sourceURL></ratingImage><reviewURL>http://www.shopping.com/nikon-s3100/reviews~linkin_id-7000610</reviewURL></rating><minPrice>99.95</minPrice><maxPrice>134.95</maxPrice><productOffersURL>http://www.shopping.com/nikon-s3100/prices~linkin_id-7000610</productOffersURL><productSpecsURL>http://www.shopping.com/nikon-s3100/info~linkin_id-7000610</productSpecsURL><offers matchedOfferCount="67" pageNumber="1" returnedOfferCount="5"><offer featured="false" id="UUyGoqV8r0-xrkn-rnGNbg==" smartBuy="false" used="false"><name>CoolPix S3100 14 Megapixel Compact Digital Camera- Red</name><description>Nikon Coolpix S3100 - Digital camera - compact - 14.0 Mpix - optical zoom: 5 x - supported memory: SD, SDXC, SDHC - red</description><categoryId>7185</categoryId><manufacturer>Nikon</manufacturer><imageList><image available="true" height="100" width="100"><sourceURL>http://di111.shopping.com/images/di/55/55/79/476f71563872302d78726b6e2d726e474e6267-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=1</sourceURL></image><image available="true" height="200" width="200"><sourceURL>http://di111.shopping.com/images/di/55/55/79/476f71563872302d78726b6e2d726e474e6267-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=1</sourceURL></image><image available="true" height="300" width="300"><sourceURL>http://di111.shopping.com/images/di/55/55/79/476f71563872302d78726b6e2d726e474e6267-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=1</sourceURL></image><image available="true" height="400" width="400"><sourceURL>http://di111.shopping.com/images/di/55/55/79/476f71563872302d78726b6e2d726e474e6267-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=1</sourceURL></image></imageList><stockStatus>in-stock</stockStatus><storeNotes>Get 30 days FREE SHIPPING w/ ShipVantage</storeNotes><basePrice currency="USD">119.95</basePrice><tax checkSite="true"></tax><shippingCost currency="USD">6.95</shippingCost><totalPrice checkSite="true"></totalPrice><originalPrice currency="USD">139.95</originalPrice><offerURL>http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=578&amp;BEFID=7185&amp;aon=%5E1&amp;MerchantID=485615&amp;crawler_id=485615&amp;dealId=UUyGoqV8r0-xrkn-rnGNbg%3D%3D&amp;url=http%3A%2F%2Fsears.rdr.channelintelligence.com%2Fgo.asp%3FfVhzOGNRAAQIASNiE1NbQBJpFHJ3Yx0CTAICI2BbH1lEFmgKP3QvUVpEREdlfUAUHAQPLVpFTVdtJzxAHUNYW3AhQBM0QhFvEXAbYh8EAAVmDAJeU1oyGG0GcBdhGwUGCAVqYF9SO0xSN1sZdmA7dmMdBQAJB24qX1NbQxI6AjA2ME5dVFULPDsGPFcQTTdaLTA6SR0OFlQvPAwMDxYcYlxIVkcoLTcCDA%3D%3D%26nAID%3D13736960%26&amp;linkin_id=7000610&amp;Issdt=111021183845&amp;searchID=p2.a121bc2aaf029435dce6&amp;DealName=CoolPix+S3100+14+Megapixel+Compact+Digital+Camera-+Red&amp;dlprc=119.95&amp;crn=&amp;istrsmrc=1&amp;isathrsl=0&amp;AR=28&amp;NG=20&amp;NDP=200&amp;PN=1&amp;ST=7&amp;DB=sdcprod&amp;MT=phx-pkadudc2&amp;FPT=DSP&amp;NDS=&amp;NMS=&amp;MRS=&amp;PD=106834268&amp;brnId=14804&amp;IsFtr=0&amp;IsSmart=0&amp;DMT=&amp;op=&amp;CM=&amp;DlLng=1&amp;RR=28&amp;cid=&amp;semid1=&amp;semid2=&amp;IsLps=0&amp;CC=0&amp;SL=1&amp;FS=0&amp;code=&amp;acode=583&amp;category=&amp;HasLink=&amp;frameId=&amp;ND=&amp;MN=&amp;PT=&amp;prjID=&amp;GR=&amp;lnkId=&amp;VK=</offerURL><store authorizedReseller="false" id="485615" trusted="true"><name>Sears</name><logo available="true" height="31" width="88"><sourceURL>http://img.shopping.com/cctool/merch_logos/485615.gif</sourceURL></logo><phoneNumber>1-800-349-4358</phoneNumber><ratingInfo><reviewCount>888</reviewCount><rating>2.85</rating><ratingImage height="18" width="91"><sourceURL>http://img.shopping.com/sc/mr/sdc_checks_3.gif</sourceURL></ratingImage><reviewURL>http://www.shopping.com/xMR-store_sears_4189479~MRD-485615~S-1~linkin_id-7000610</reviewURL></ratingInfo><countryFlag height="11" width="18"><sourceURL>http://img.shopping.com/sc/glb/flag/US.gif</sourceURL><countryCode>US</countryCode></countryFlag></store><sku>00337013000</sku></offer><offer featured="false" id="X87AwXlW1dXoMXk4QQDToQ==" smartBuy="false" used="false"><name>COOLPIX S3100 Pink</name><description>Nikon Coolpix S3100 - Digital camera - compact - 14.0 Mpix - optical zoom: 5 x - supported memory: SD, SDXC, SDHC - pink</description><categoryId>7185</categoryId><manufacturer>Nikon</manufacturer><imageList><image available="true" height="100" width="100"><sourceURL>http://di111.shopping.com/images/di/58/38/37/4177586c573164586f4d586b34515144546f51-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=2</sourceURL></image><image available="true" height="200" width="200"><sourceURL>http://di111.shopping.com/images/di/58/38/37/4177586c573164586f4d586b34515144546f51-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=2</sourceURL></image><image available="true" height="300" width="300"><sourceURL>http://di111.shopping.com/images/di/58/38/37/4177586c573164586f4d586b34515144546f51-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=2</sourceURL></image><image available="true" height="400" width="400"><sourceURL>http://di111.shopping.com/images/di/58/38/37/4177586c573164586f4d586b34515144546f51-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=2</sourceURL></image></imageList><stockStatus>in-stock</stockStatus><storeNotes>Get 30 days FREE SHIPPING w/ ShipVantage</storeNotes><basePrice currency="USD">119.95</basePrice><tax checkSite="true"></tax><shippingCost currency="USD">6.95</shippingCost><totalPrice checkSite="true"></totalPrice><originalPrice currency="USD">139.95</originalPrice><offerURL>http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=578&amp;BEFID=7185&amp;aon=%5E1&amp;MerchantID=485615&amp;crawler_id=485615&amp;dealId=X87AwXlW1dXoMXk4QQDToQ%3D%3D&amp;url=http%3A%2F%2Fsears.rdr.channelintelligence.com%2Fgo.asp%3FfVhzOGNRAAQIASNiE1NbQBJpFHJxYx0CTAICI2BbH1lEFmgKP3QvUVpEREdlfUAUHAQPLVpFTVdtJzxAHUNYW3AhQBM0QhFvEXAbYh8EAAVmb2JcUFxDEGsPc3QDEkFZVQ0WFhdRW0MWbgYWDlxzdGMdAVQWRi0xDAwPFhw9TSobb05eWVVYKzsLTFVVQi5RICs3SA8MU1s2MQQKD1wf%26nAID%3D13736960%26&amp;linkin_id=7000610&amp;Issdt=111021183845&amp;searchID=p2.a121bc2aaf029435dce6&amp;DealName=COOLPIX+S3100+Pink&amp;dlprc=119.95&amp;crn=&amp;istrsmrc=1&amp;isathrsl=0&amp;AR=31&amp;NG=20&amp;NDP=200&amp;PN=1&amp;ST=7&amp;DB=sdcprod&amp;MT=phx-pkadudc2&amp;FPT=DSP&amp;NDS=&amp;NMS=&amp;MRS=&amp;PD=106834268&amp;brnId=14804&amp;IsFtr=0&amp;IsSmart=0&amp;DMT=&amp;op=&amp;CM=&amp;DlLng=1&amp;RR=31&amp;cid=&amp;semid1=&amp;semid2=&amp;IsLps=0&amp;CC=0&amp;SL=1&amp;FS=0&amp;code=&amp;acode=583&amp;category=&amp;HasLink=&amp;frameId=&amp;ND=&amp;MN=&amp;PT=&amp;prjID=&amp;GR=&amp;lnkId=&amp;VK=</offerURL><store authorizedReseller="false" id="485615" trusted="true"><name>Sears</name><logo available="true" height="31" width="88"><sourceURL>http://img.shopping.com/cctool/merch_logos/485615.gif</sourceURL></logo><phoneNumber>1-800-349-4358</phoneNumber><ratingInfo><reviewCount>888</reviewCount><rating>2.85</rating><ratingImage height="18" width="91"><sourceURL>http://img.shopping.com/sc/mr/sdc_checks_3.gif</sourceURL></ratingImage><reviewURL>http://www.shopping.com/xMR-store_sears_4189479~MRD-485615~S-1~linkin_id-7000610</reviewURL></ratingInfo><countryFlag height="11" width="18"><sourceURL>http://img.shopping.com/sc/glb/flag/US.gif</sourceURL><countryCode>US</countryCode></countryFlag></store><sku>00337015000</sku></offer><offer featured="false" id="nvFwnpfA4rlA1Dbksdsa0w==" smartBuy="false" used="false"><name>Nikon Coolpix S3100 14.0 MP Digital Camera - Silver</name><description>Nikon Coolpix S3100 14.0 MP Digital Camera - Silver</description><categoryId>7185</categoryId><manufacturer>Nikon</manufacturer><imageList><image available="true" height="100" width="100"><sourceURL>http://di109.shopping.com/images/di/6e/76/46/776e70664134726c413144626b736473613077-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=3</sourceURL></image><image available="true" height="200" width="200"><sourceURL>http://di109.shopping.com/images/di/6e/76/46/776e70664134726c413144626b736473613077-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=3</sourceURL></image><image available="false" height="300" width="300"><sourceURL>http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=3</sourceURL></image><image available="false" height="400" width="400"><sourceURL>http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=3</sourceURL></image><image available="true" height="270" width="270"><sourceURL>http://di109.shopping.com/images/di/6e/76/46/776e70664134726c413144626b736473613077-270x270-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=3</sourceURL></image></imageList><stockStatus>in-stock</stockStatus><basePrice currency="USD">109.97</basePrice><tax checkSite="true"></tax><shippingCost currency="USD">0.00</shippingCost><totalPrice checkSite="true"></totalPrice><originalPrice currency="USD">109.97</originalPrice><offerURL>http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=803&amp;BEFID=7185&amp;aon=%5E&amp;MerchantID=475774&amp;crawler_id=475774&amp;dealId=nvFwnpfA4rlA1Dbksdsa0w%3D%3D&amp;url=http%3A%2F%2Fwww.thewiz.com%2Fcatalog%2Fproduct.jsp%3FmodelNo%3DS3100SILVER%26gdftrk%3DgdfV2677_a_7c996_a_7c4049_a_7c26262&amp;linkin_id=7000610&amp;Issdt=111021183845&amp;searchID=p2.a121bc2aaf029435dce6&amp;DealName=Nikon+Coolpix+S3100+14.0+MP+Digital+Camera+-+Silver&amp;dlprc=109.97&amp;crn=&amp;istrsmrc=0&amp;isathrsl=0&amp;AR=33&amp;NG=20&amp;NDP=200&amp;PN=1&amp;ST=7&amp;DB=sdcprod&amp;MT=phx-pkadudc2&amp;FPT=DSP&amp;NDS=&amp;NMS=&amp;MRS=&amp;PD=106834268&amp;brnId=14804&amp;IsFtr=0&amp;IsSmart=0&amp;DMT=&amp;op=&amp;CM=&amp;DlLng=1&amp;RR=33&amp;cid=&amp;semid1=&amp;semid2=&amp;IsLps=0&amp;CC=0&amp;SL=0&amp;FS=1&amp;code=&amp;acode=797&amp;category=&amp;HasLink=&amp;frameId=&amp;ND=&amp;MN=&amp;PT=&amp;prjID=&amp;GR=&amp;lnkId=&amp;VK=</offerURL><store authorizedReseller="false" id="475774" trusted="false"><name>TheWiz.com</name><logo available="false" height="31" width="88"><sourceURL>http://img.shopping.com/cctool/merch_logos/475774.gif</sourceURL></logo><phoneNumber>877-542-6988</phoneNumber><ratingInfo><reviewCount>0</reviewCount></ratingInfo><countryFlag height="11" width="18"><sourceURL>http://img.shopping.com/sc/glb/flag/US.gif</sourceURL><countryCode>US</countryCode></countryFlag></store><sku>26262</sku></offer><offer featured="false" id="5GtaN2NeryKwps-Se2l-4g==" smartBuy="false" used="false"><name>Nikon� COOLPIX� S3100 14MP Digital Camera (Silver)</name><description>The Nikon COOLPIX S3100 is the easy way to share your life and stay connected.</description><categoryId>7185</categoryId><manufacturer>Nikon</manufacturer><imageList><image available="true" height="100" width="100"><sourceURL>http://di102.shopping.com/images/di/35/47/74/614e324e6572794b7770732d5365326c2d3467-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=4</sourceURL></image><image available="true" height="200" width="200"><sourceURL>http://di102.shopping.com/images/di/35/47/74/614e324e6572794b7770732d5365326c2d3467-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=4</sourceURL></image><image available="false" height="300" width="300"><sourceURL>http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=4</sourceURL></image><image available="false" height="400" width="400"><sourceURL>http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=4</sourceURL></image><image available="true" height="220" width="220"><sourceURL>http://di102.shopping.com/images/di/35/47/74/614e324e6572794b7770732d5365326c2d3467-220x220-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=4</sourceURL></image></imageList><stockStatus>in-stock</stockStatus><basePrice currency="USD">119.99</basePrice><tax checkSite="true"></tax><shippingCost currency="USD">6.05</shippingCost><totalPrice checkSite="true"></totalPrice><originalPrice currency="USD">119.99</originalPrice><offerURL>http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=504&amp;BEFID=7185&amp;aon=%5E1&amp;MerchantID=332477&amp;crawler_id=332477&amp;dealId=5GtaN2NeryKwps-Se2l-4g%3D%3D&amp;url=http%3A%2F%2Ftracking.searchmarketing.com%2Fgsic.asp%3Faid%3D848064082%26&amp;linkin_id=7000610&amp;Issdt=111021183845&amp;searchID=p2.a121bc2aaf029435dce6&amp;DealName=Nikon%C3%AF%C2%BF%C2%BD+COOLPIX%C3%AF%C2%BF%C2%BD+S3100+14MP+Digital+Camera+%28Silver%29&amp;dlprc=119.99&amp;crn=&amp;istrsmrc=0&amp;isathrsl=0&amp;AR=37&amp;NG=20&amp;NDP=200&amp;PN=1&amp;ST=7&amp;DB=sdcprod&amp;MT=phx-pkadudc2&amp;FPT=DSP&amp;NDS=&amp;NMS=&amp;MRS=&amp;PD=106834268&amp;brnId=14804&amp;IsFtr=0&amp;IsSmart=0&amp;DMT=&amp;op=&amp;CM=&amp;DlLng=1&amp;RR=37&amp;cid=&amp;semid1=&amp;semid2=&amp;IsLps=0&amp;CC=0&amp;SL=0&amp;FS=0&amp;code=&amp;acode=509&amp;category=&amp;HasLink=&amp;frameId=&amp;ND=&amp;MN=&amp;PT=&amp;prjID=&amp;GR=&amp;lnkId=&amp;VK=</offerURL><store authorizedReseller="false" id="332477" trusted="false"><name>RadioShack</name><logo available="true" height="31" width="88"><sourceURL>http://img.shopping.com/cctool/merch_logos/332477.gif</sourceURL></logo><ratingInfo><reviewCount>24</reviewCount><rating>2.25</rating><ratingImage height="18" width="91"><sourceURL>http://img.shopping.com/sc/mr/sdc_checks_25.gif</sourceURL></ratingImage><reviewURL>http://www.shopping.com/xMR-store_radioshack_9689~MRD-332477~S-1~linkin_id-7000610</reviewURL></ratingInfo><countryFlag height="11" width="18"><sourceURL>http://img.shopping.com/sc/glb/flag/US.gif</sourceURL><countryCode>US</countryCode></countryFlag></store><sku>10101095</sku></offer><offer featured="false" id="a43m0RXulX38zCnQjU59jw==" smartBuy="false" used="false"><name>COOLPIX S3100 Yellow</name><description>Nikon Coolpix S3100 - Digital camera - compact - 14.0 Mpix - optical zoom: 5 x - supported memory: SD, SDXC, SDHC - yellow</description><categoryId>7185</categoryId><manufacturer>Nikon</manufacturer><imageList><image available="true" height="100" width="100"><sourceURL>http://di107.shopping.com/images/di/61/34/33/6d305258756c5833387a436e516a5535396a77-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=5</sourceURL></image><image available="true" height="200" width="200"><sourceURL>http://di107.shopping.com/images/di/61/34/33/6d305258756c5833387a436e516a5535396a77-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=5</sourceURL></image><image available="true" height="300" width="300"><sourceURL>http://di107.shopping.com/images/di/61/34/33/6d305258756c5833387a436e516a5535396a77-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=5</sourceURL></image><image available="true" height="400" width="400"><sourceURL>http://di107.shopping.com/images/di/61/34/33/6d305258756c5833387a436e516a5535396a77-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=5</sourceURL></image></imageList><stockStatus>in-stock</stockStatus><storeNotes>Get 30 days FREE SHIPPING w/ ShipVantage</storeNotes><basePrice currency="USD">119.95</basePrice><tax checkSite="true"></tax><shippingCost currency="USD">6.95</shippingCost><totalPrice checkSite="true"></totalPrice><originalPrice currency="USD">139.95</originalPrice><offerURL>http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=578&amp;BEFID=7185&amp;aon=%5E1&amp;MerchantID=485615&amp;crawler_id=485615&amp;dealId=a43m0RXulX38zCnQjU59jw%3D%3D&amp;url=http%3A%2F%2Fsears.rdr.channelintelligence.com%2Fgo.asp%3FfVhzOGNRAAQIASNiE1NbQBJpFHJwYx0CTAICI2BbH1lEFmgKP3QvUVpEREdlfUAUHAQPLVpFTVdtJzxAHUNYW3AhQBM0QhFvEXAbYh8EAAVmb2JcUFxDEGoPc3QDEkFZVQ0WFhdRW0MWbgYWDlxzdGMdAVQWRi0xDAwPFhw9TSobb05eWVVYKzsLTFVVQi5RICs3SA8MU1s2MQQKD1wf%26nAID%3D13736960%26&amp;linkin_id=7000610&amp;Issdt=111021183845&amp;searchID=p2.a121bc2aaf029435dce6&amp;DealName=COOLPIX+S3100+Yellow&amp;dlprc=119.95&amp;crn=&amp;istrsmrc=1&amp;isathrsl=0&amp;AR=38&amp;NG=20&amp;NDP=200&amp;PN=1&amp;ST=7&amp;DB=sdcprod&amp;MT=phx-pkadudc2&amp;FPT=DSP&amp;NDS=&amp;NMS=&amp;MRS=&amp;PD=106834268&amp;brnId=14804&amp;IsFtr=0&amp;IsSmart=0&amp;DMT=&amp;op=&amp;CM=&amp;DlLng=1&amp;RR=38&amp;cid=&amp;semid1=&amp;semid2=&amp;IsLps=0&amp;CC=0&amp;SL=1&amp;FS=0&amp;code=&amp;acode=583&amp;category=&amp;HasLink=&amp;frameId=&amp;ND=&amp;MN=&amp;PT=&amp;prjID=&amp;GR=&amp;lnkId=&amp;VK=</offerURL><store authorizedReseller="false" id="485615" trusted="true"><name>Sears</name><logo available="true" height="31" width="88"><sourceURL>http://img.shopping.com/cctool/merch_logos/485615.gif</sourceURL></logo><phoneNumber>1-800-349-4358</phoneNumber><ratingInfo><reviewCount>888</reviewCount><rating>2.85</rating><ratingImage height="18" width="91"><sourceURL>http://img.shopping.com/sc/mr/sdc_checks_3.gif</sourceURL></ratingImage><reviewURL>http://www.shopping.com/xMR-store_sears_4189479~MRD-485615~S-1~linkin_id-7000610</reviewURL></ratingInfo><countryFlag height="11" width="18"><sourceURL>http://img.shopping.com/sc/glb/flag/US.gif</sourceURL><countryCode>US</countryCode></countryFlag></store><sku>00337014000</sku></offer></offers></product><product id="99671132"><name>Nikon D90 Digital Camera</name><shortDescription>12.3 Megapixel, Point and Shoot Camera, 3 in. LCD Screen, With Video Capability, Weight: 1.36 lb.</shortDescription><fullDescription>Untitled Document Nikon D90 SLR Digital Camera With 28-80mm 75-300mm Lens Kit The Nikon D90 SLR Digital Camera, with its 12.3-megapixel DX-format CMOS, 3" High resolution LCD display, Scene Recognition System, Picture Control, Active D-Lighting, and one-button Live View, provides photo enthusiasts with the image quality and performance they need to pursue their own vision while still being intuitive enough for use as an everyday camera.</fullDescription><images><image available="true" height="100" width="100"><sourceURL>http://di1.shopping.com/images/pi/52/fb/d3/99671132-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=2&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=4</sourceURL></image><image available="true" height="200" width="200"><sourceURL>http://di1.shopping.com/images/pi/52/fb/d3/99671132-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=2&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=4</sourceURL></image><image available="true" height="300" width="300"><sourceURL>http://di1.shopping.com/images/pi/52/fb/d3/99671132-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=2&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=4</sourceURL></image><image available="true" height="400" width="400"><sourceURL>http://di1.shopping.com/images/pi/52/fb/d3/99671132-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=2&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=4</sourceURL></image><image available="true" height="255" width="499"><sourceURL>http://di1.shopping.com/images/pi/52/fb/d3/99671132-499x255-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=2&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=4</sourceURL></image></images><rating><reviewCount>7</reviewCount><rating>5.00</rating><ratingImage height="18" width="91"><sourceURL>http://img.shopping.com/sc/pr/sdc_stars_sm_5.gif</sourceURL></ratingImage><reviewURL>http://www.shopping.com/Nikon-D90-with-18-270mm-Lens/reviews~linkin_id-7000610</reviewURL></rating><minPrice>689.00</minPrice><maxPrice>2299.00</maxPrice><productOffersURL>http://www.shopping.com/Nikon-D90-with-18-270mm-Lens/prices~linkin_id-7000610</productOffersURL><productSpecsURL>http://www.shopping.com/Nikon-D90-with-18-270mm-Lens/info~linkin_id-7000610</productSpecsURL><offers matchedOfferCount="43" pageNumber="1" returnedOfferCount="5"><offer featured="false" id="GU5JJkpUAxe5HujB7fkwAA==" smartBuy="false" used="false"><name>Nikon® D90 12.3MP Digital SLR Camera (Body Only)</name><description>The Nikon D90 will make you rethink what a digital SLR camera can achieve.</description><categoryId>7185</categoryId><manufacturer>Nikon</manufacturer><imageList><image available="true" height="100" width="100"><sourceURL>http://di106.shopping.com/images/di/47/55/35/4a4a6b70554178653548756a4237666b774141-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=1</sourceURL></image><image available="true" height="200" width="200"><sourceURL>http://di106.shopping.com/images/di/47/55/35/4a4a6b70554178653548756a4237666b774141-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=1</sourceURL></image><image available="false" height="300" width="300"><sourceURL>http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=1</sourceURL></image><image available="false" height="400" width="400"><sourceURL>http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=1</sourceURL></image><image available="true" height="220" width="220"><sourceURL>http://di106.shopping.com/images/di/47/55/35/4a4a6b70554178653548756a4237666b774141-220x220-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=1</sourceURL></image></imageList><stockStatus>in-stock</stockStatus><basePrice currency="USD">1015.99</basePrice><tax checkSite="true"></tax><shippingCost currency="USD">6.05</shippingCost><totalPrice checkSite="true"></totalPrice><originalPrice currency="USD">1015.99</originalPrice><offerURL>http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=504&amp;BEFID=7185&amp;aon=%5E1&amp;MerchantID=332477&amp;crawler_id=332477&amp;dealId=GU5JJkpUAxe5HujB7fkwAA%3D%3D&amp;url=http%3A%2F%2Ftracking.searchmarketing.com%2Fgsic.asp%3Faid%3D851830266%26&amp;linkin_id=7000610&amp;Issdt=111021183845&amp;searchID=p2.a121bc2aaf029435dce6&amp;DealName=Nikon%C2%AE+D90+12.3MP+Digital+SLR+Camera+%28Body+Only%29&amp;dlprc=1015.99&amp;crn=&amp;istrsmrc=0&amp;isathrsl=0&amp;AR=14&amp;NG=20&amp;NDP=200&amp;PN=1&amp;ST=7&amp;DB=sdcprod&amp;MT=phx-pkadudc2&amp;FPT=DSP&amp;NDS=&amp;NMS=&amp;MRS=&amp;PD=99671132&amp;brnId=14804&amp;IsFtr=0&amp;IsSmart=0&amp;DMT=&amp;op=&amp;CM=&amp;DlLng=1&amp;RR=14&amp;cid=&amp;semid1=&amp;semid2=&amp;IsLps=0&amp;CC=0&amp;SL=0&amp;FS=0&amp;code=&amp;acode=496&amp;category=&amp;HasLink=&amp;frameId=&amp;ND=&amp;MN=&amp;PT=&amp;prjID=&amp;GR=&amp;lnkId=&amp;VK=</offerURL><store authorizedReseller="false" id="332477" trusted="false"><name>RadioShack</name><logo available="true" height="31" width="88"><sourceURL>http://img.shopping.com/cctool/merch_logos/332477.gif</sourceURL></logo><ratingInfo><reviewCount>24</reviewCount><rating>2.25</rating><ratingImage height="18" width="91"><sourceURL>http://img.shopping.com/sc/mr/sdc_checks_25.gif</sourceURL></ratingImage><reviewURL>http://www.shopping.com/xMR-store_radioshack_9689~MRD-332477~S-1~linkin_id-7000610</reviewURL></ratingInfo><countryFlag height="11" width="18"><sourceURL>http://img.shopping.com/sc/glb/flag/US.gif</sourceURL><countryCode>US</countryCode></countryFlag></store><sku>10148659</sku></offer><offer featured="false" id="XhURuSC-spBbTIDfo4qfzQ==" smartBuy="false" used="false"><name>Nikon D90 SLR Digital Camera (Camera Body)</name><description>The Nikon D90 SLR Digital Camera  with its 12.3-megapixel DX-format CCD  3" High resolution LCD display  Scene Recognition System  Picture Control  Active D-Lighting  and one-button Live View  provides photo enthusiasts with the image quality and performance they need to pursue their own vision while still being intuitive enough for use as an everyday camera. In addition  the D90 introduces the D-Movie mode  allowing for the first time  an interchangeable lens SLR camera that is capable of recording 720p HD movie clips.  Availabilty: In Stock</description><categoryId>7185</categoryId><manufacturer>Nikon</manufacturer><imageList><image available="true" height="100" width="100"><sourceURL>http://di109.shopping.com/images/di/58/68/55/527553432d73704262544944666f3471667a51-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=2</sourceURL></image><image available="true" height="200" width="200"><sourceURL>http://di109.shopping.com/images/di/58/68/55/527553432d73704262544944666f3471667a51-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=2</sourceURL></image><image available="true" height="300" width="300"><sourceURL>http://di109.shopping.com/images/di/58/68/55/527553432d73704262544944666f3471667a51-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=2</sourceURL></image><image available="false" height="400" width="400"><sourceURL>http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=2</sourceURL></image><image available="true" height="350" width="350"><sourceURL>http://di109.shopping.com/images/di/58/68/55/527553432d73704262544944666f3471667a51-350x350-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=2</sourceURL></image></imageList><stockStatus>in-stock</stockStatus><storeNotes>Free Shipping with Any Purchase!</storeNotes><basePrice currency="USD">689.00</basePrice><tax checkSite="true"></tax><shippingCost currency="USD">0.00</shippingCost><totalPrice checkSite="true"></totalPrice><originalPrice currency="USD">900.00</originalPrice><offerURL>http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=647&amp;BEFID=7185&amp;aon=%5E1&amp;MerchantID=475674&amp;crawler_id=475674&amp;dealId=XhURuSC-spBbTIDfo4qfzQ%3D%3D&amp;url=http%3A%2F%2Fwww.fumfie.com%2Fproduct%2F169.5%2Fshopping-com%3F&amp;linkin_id=7000610&amp;Issdt=111021183845&amp;searchID=p2.a121bc2aaf029435dce6&amp;DealName=Nikon+D90+SLR+Digital+Camera+%28Camera+Body%29&amp;dlprc=689.0&amp;crn=&amp;istrsmrc=1&amp;isathrsl=0&amp;AR=16&amp;NG=20&amp;NDP=200&amp;PN=1&amp;ST=7&amp;DB=sdcprod&amp;MT=phx-pkadudc2&amp;FPT=DSP&amp;NDS=&amp;NMS=&amp;MRS=&amp;PD=99671132&amp;brnId=14804&amp;IsFtr=0&amp;IsSmart=0&amp;DMT=&amp;op=&amp;CM=&amp;DlLng=1&amp;RR=16&amp;cid=&amp;semid1=&amp;semid2=&amp;IsLps=0&amp;CC=1&amp;SL=1&amp;FS=1&amp;code=&amp;acode=658&amp;category=&amp;HasLink=&amp;frameId=&amp;ND=&amp;MN=&amp;PT=&amp;prjID=&amp;GR=&amp;lnkId=&amp;VK=</offerURL><store authorizedReseller="false" id="475674" trusted="true"><name>FumFie</name><logo available="true" height="31" width="88"><sourceURL>http://img.shopping.com/cctool/merch_logos/475674.gif</sourceURL></logo><phoneNumber>866 666 9198</phoneNumber><ratingInfo><reviewCount>560</reviewCount><rating>4.27</rating><ratingImage height="18" width="91"><sourceURL>http://img.shopping.com/sc/mr/sdc_checks_45.gif</sourceURL></ratingImage><reviewURL>http://www.shopping.com/xMR-store_fumfie~MRD-475674~S-1~linkin_id-7000610</reviewURL></ratingInfo><countryFlag height="11" width="18"><sourceURL>http://img.shopping.com/sc/glb/flag/US.gif</sourceURL><countryCode>US</countryCode></countryFlag></store><sku>F169C5</sku></offer><offer featured="false" id="o0Px_XLWDbrxAYRy3rCmyQ==" smartBuy="false" used="false"><name>Nikon D90 SLR w/Nikon 18-105mm VR &amp; 55-200mm VR Lenses</name><description>12.3 MegapixelDX Format CMOS Sensor3" VGA LCD DisplayLive ViewSelf Cleaning SensorD-Movie ModeHigh Sensitivity (ISO 3200)4.5 fps BurstIn-Camera Image Editing</description><categoryId>7185</categoryId><manufacturer>Nikon</manufacturer><imageList><image available="true" height="100" width="100"><sourceURL>http://di101.shopping.com/images/di/6f/30/50/785f584c5744627278415952793372436d7951-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=3</sourceURL></image><image available="true" height="200" width="200"><sourceURL>http://di101.shopping.com/images/di/6f/30/50/785f584c5744627278415952793372436d7951-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=3</sourceURL></image><image available="true" height="300" width="300"><sourceURL>http://di101.shopping.com/images/di/6f/30/50/785f584c5744627278415952793372436d7951-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=3</sourceURL></image><image available="true" height="400" width="400"><sourceURL>http://di101.shopping.com/images/di/6f/30/50/785f584c5744627278415952793372436d7951-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=3</sourceURL></image><image available="true" height="500" width="500"><sourceURL>http://di101.shopping.com/images/di/6f/30/50/785f584c5744627278415952793372436d7951-500x500-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=3</sourceURL></image></imageList><stockStatus>in-stock</stockStatus><basePrice currency="USD">1189.00</basePrice><tax checkSite="true"></tax><shippingCost currency="USD">0.00</shippingCost><totalPrice checkSite="true"></totalPrice><originalPrice currency="USD">1189.00</originalPrice><offerURL>http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=371&amp;BEFID=7185&amp;aon=%5E1&amp;MerchantID=487342&amp;crawler_id=487342&amp;dealId=o0Px_XLWDbrxAYRy3rCmyQ%3D%3D&amp;url=http%3A%2F%2Fwww.rythercamera.com%2Fcatalog%2Fproduct_info.php%3Fcsv%3Dsh%26products_id%3D30619%26&amp;linkin_id=7000610&amp;Issdt=111021183845&amp;searchID=p2.a121bc2aaf029435dce6&amp;DealName=Nikon+D90+SLR+w%2FNikon+18-105mm+VR+%26+55-200mm+VR+Lenses&amp;dlprc=1189.0&amp;crn=&amp;istrsmrc=0&amp;isathrsl=0&amp;AR=20&amp;NG=20&amp;NDP=200&amp;PN=1&amp;ST=7&amp;DB=sdcprod&amp;MT=phx-pkadudc2&amp;FPT=DSP&amp;NDS=&amp;NMS=&amp;MRS=&amp;PD=99671132&amp;brnId=14804&amp;IsFtr=0&amp;IsSmart=0&amp;DMT=&amp;op=&amp;CM=&amp;DlLng=1&amp;RR=20&amp;cid=&amp;semid1=&amp;semid2=&amp;IsLps=0&amp;CC=0&amp;SL=0&amp;FS=1&amp;code=&amp;acode=379&amp;category=&amp;HasLink=&amp;frameId=&amp;ND=&amp;MN=&amp;PT=&amp;prjID=&amp;GR=&amp;lnkId=&amp;VK=</offerURL><store authorizedReseller="false" id="487342" trusted="false"><name>RytherCamera.com</name><logo available="true" height="31" width="88"><sourceURL>http://img.shopping.com/cctool/merch_logos/487342.gif</sourceURL></logo><phoneNumber>1-877-644-7593</phoneNumber><ratingInfo><reviewCount>0</reviewCount></ratingInfo><countryFlag height="11" width="18"><sourceURL>http://img.shopping.com/sc/glb/flag/US.gif</sourceURL><countryCode>US</countryCode></countryFlag></store><sku>30619</sku></offer><offer featured="false" id="4HgbWJSJ8ssgIf8B0MXIwA==" smartBuy="false" used="false"><name>Nikon D90 12.3 Megapixel Digital SLR Camera (Body Only)</name><description>Fusing 12.3 megapixel image quality and a cinematic 24fps D-Movie Mode, the Nikon D90 exceeds the demands of passionate photographers. Coupled with Nikon's EXPEED image processing technologies and NIKKOR optics, breathtaking image fidelity is assured. Combined with fast 0.15ms power-up and split-second 65ms shooting lag, dramatic action and decisive moments are captured easily. Effective 4-frequency, ultrasonic sensor cleaning frees image degrading dust particles from the sensor's optical low pass filter.</description><categoryId>7185</categoryId><manufacturer>Nikon</manufacturer><imageList><image available="true" height="100" width="100"><sourceURL>http://di110.shopping.com/images/di/34/48/67/62574a534a3873736749663842304d58497741-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=4</sourceURL></image><image available="true" height="200" width="200"><sourceURL>http://di110.shopping.com/images/di/34/48/67/62574a534a3873736749663842304d58497741-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=4</sourceURL></image><image available="true" height="300" width="300"><sourceURL>http://di110.shopping.com/images/di/34/48/67/62574a534a3873736749663842304d58497741-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=4</sourceURL></image></imageList><stockStatus>in-stock</stockStatus><storeNotes>FREE FEDEX 2-3 DAY DELIVERY</storeNotes><basePrice currency="USD">899.95</basePrice><tax checkSite="true"></tax><shippingCost currency="USD">0.00</shippingCost><totalPrice checkSite="true"></totalPrice><originalPrice currency="USD">899.95</originalPrice><offerURL>http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=269&amp;BEFID=7185&amp;aon=%5E&amp;MerchantID=9296&amp;crawler_id=811558&amp;dealId=4HgbWJSJ8ssgIf8B0MXIwA%3D%3D&amp;url=http%3A%2F%2Fwww.pcnation.com%2Foptics-gallery%2Fdetails.asp%3Faffid%3D305%26item%3D2N145P&amp;linkin_id=7000610&amp;Issdt=111021183845&amp;searchID=p2.a121bc2aaf029435dce6&amp;DealName=Nikon+D90+12.3+Megapixel+Digital+SLR+Camera+%28Body+Only%29&amp;dlprc=899.95&amp;crn=&amp;istrsmrc=1&amp;isathrsl=0&amp;AR=21&amp;NG=20&amp;NDP=200&amp;PN=1&amp;ST=7&amp;DB=sdcprod&amp;MT=phx-pkadudc2&amp;FPT=DSP&amp;NDS=&amp;NMS=&amp;MRS=&amp;PD=99671132&amp;brnId=14804&amp;IsFtr=0&amp;IsSmart=0&amp;DMT=&amp;op=&amp;CM=&amp;DlLng=1&amp;RR=21&amp;cid=&amp;semid1=&amp;semid2=&amp;IsLps=0&amp;CC=0&amp;SL=0&amp;FS=1&amp;code=&amp;acode=257&amp;category=&amp;HasLink=&amp;frameId=&amp;ND=&amp;MN=&amp;PT=&amp;prjID=&amp;GR=&amp;lnkId=&amp;VK=</offerURL><store authorizedReseller="false" id="9296" trusted="true"><name>PCNation</name><logo available="true" height="31" width="88"><sourceURL>http://img.shopping.com/cctool/merch_logos/9296.gif</sourceURL></logo><phoneNumber>800-470-7079</phoneNumber><ratingInfo><reviewCount>1622</reviewCount><rating>4.43</rating><ratingImage height="18" width="91"><sourceURL>http://img.shopping.com/sc/mr/sdc_checks_45.gif</sourceURL></ratingImage><reviewURL>http://www.shopping.com/xMR-store_pcnation_9689~MRD-9296~S-1~linkin_id-7000610</reviewURL></ratingInfo><countryFlag height="11" width="18"><sourceURL>http://img.shopping.com/sc/glb/flag/US.gif</sourceURL><countryCode>US</countryCode></countryFlag></store><sku>2N145P</sku></offer><offer featured="false" id="UNDa3uMDZXOnvD_7sTILYg==" smartBuy="false" used="false"><name>Nikon D90 12.3MP Digital SLR Camera (Body Only)</name><description>Fusing 12.3-megapixel image quality inherited from the award-winning D300 with groundbreaking features, the D90's breathtaking, low-noise image quality is further advanced with EXPEED image processing. Split-second shutter response and continuous shooting at up to 4.5 frames-per-second provide the power to capture fast action and precise moments perfectly, while Nikon's exclusive Scene Recognition System contributes to faster 11-area autofocus performance, finer white balance detection and more. The D90 delivers the control passionate photographers demand, utilizing comprehensive exposure functions and the intelligence of 3D Color Matrix Metering II. Stunning results come to life on a 3-inch 920,000-dot color LCD monitor, providing accurate image review, Live View composition and brilliant playback of the D90's cinematic-quality 24-fps HD D-Movie mode.</description><categoryId>7185</categoryId><manufacturer>Nikon</manufacturer><imageList><image available="true" height="100" width="100"><sourceURL>http://di102.shopping.com/images/di/55/4e/44/6133754d445a584f6e76445f377354494c5967-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=5</sourceURL></image><image available="true" height="200" width="200"><sourceURL>http://di102.shopping.com/images/di/55/4e/44/6133754d445a584f6e76445f377354494c5967-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=5</sourceURL></image><image available="true" height="300" width="300"><sourceURL>http://di102.shopping.com/images/di/55/4e/44/6133754d445a584f6e76445f377354494c5967-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=5</sourceURL></image><image available="true" height="400" width="400"><sourceURL>http://di102.shopping.com/images/di/55/4e/44/6133754d445a584f6e76445f377354494c5967-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=5</sourceURL></image><image available="true" height="500" width="500"><sourceURL>http://di102.shopping.com/images/di/55/4e/44/6133754d445a584f6e76445f377354494c5967-500x500-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=5</sourceURL></image></imageList><stockStatus>in-stock</stockStatus><storeNotes>Fantastic prices with ease &amp; comfort of Amazon.com!</storeNotes><basePrice currency="USD">780.00</basePrice><shippingCost currency="USD">0.00</shippingCost><totalPrice checkSite="true"></totalPrice><originalPrice currency="USD">780.00</originalPrice><offerURL>http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=566&amp;BEFID=7185&amp;aon=%5E1&amp;MerchantID=301531&amp;crawler_id=1903313&amp;dealId=UNDa3uMDZXOnvD_7sTILYg%3D%3D&amp;url=http%3A%2F%2Fwww.amazon.com%2Fdp%2FB001ET5U92%2Fref%3Dasc_df_B001ET5U921751618%3Fsmid%3DAHF4SYKP09WBH%26tag%3Ddealtime-ce-mp01feed-20%26linkCode%3Dasn%26creative%3D395105%26creativeASIN%3DB001ET5U92&amp;linkin_id=7000610&amp;Issdt=111021183845&amp;searchID=p2.a121bc2aaf029435dce6&amp;DealName=Nikon+D90+12.3MP+Digital+SLR+Camera+%28Body+Only%29&amp;dlprc=780.0&amp;crn=&amp;istrsmrc=0&amp;isathrsl=0&amp;AR=29&amp;NG=20&amp;NDP=200&amp;PN=1&amp;ST=7&amp;DB=sdcprod&amp;MT=phx-pkadudc2&amp;FPT=DSP&amp;NDS=&amp;NMS=&amp;MRS=&amp;PD=99671132&amp;brnId=14804&amp;IsFtr=0&amp;IsSmart=0&amp;DMT=&amp;op=&amp;CM=&amp;DlLng=1&amp;RR=29&amp;cid=&amp;semid1=&amp;semid2=&amp;IsLps=0&amp;CC=0&amp;SL=0&amp;FS=1&amp;code=&amp;acode=520&amp;category=&amp;HasLink=&amp;frameId=&amp;ND=&amp;MN=&amp;PT=&amp;prjID=&amp;GR=&amp;lnkId=&amp;VK=</offerURL><store authorizedReseller="false" id="301531" trusted="false"><name>Amazon Marketplace</name><logo available="true" height="31" width="88"><sourceURL>http://img.shopping.com/cctool/merch_logos/301531.gif</sourceURL></logo><ratingInfo><reviewCount>213</reviewCount><rating>2.73</rating><ratingImage height="18" width="91"><sourceURL>http://img.shopping.com/sc/mr/sdc_checks_25.gif</sourceURL></ratingImage><reviewURL>http://www.shopping.com/xMR-store_amazon_marketplace_9689~MRD-301531~S-1~linkin_id-7000610</reviewURL></ratingInfo><countryFlag height="11" width="18"><sourceURL>http://img.shopping.com/sc/glb/flag/US.gif</sourceURL><countryCode>US</countryCode></countryFlag></store><sku>B001ET5U92</sku></offer></offers></product><product id="70621646"><name>Nikon D90 Digital Camera with 18-105mm lens</name><shortDescription>12.9 Megapixel, SLR Camera, 3 in. LCD Screen, 5.8x Optical Zoom, With Video Capability, Weight: 2.3 lb.</shortDescription><fullDescription>Its 12.3 megapixel DX-format CMOS image sensor and EXPEED image processing system offer outstanding image quality across a wide ISO light sensitivity range. Live View mode lets you compose and shoot via the high-resolution 3-inch LCD monitor, and an advanced Scene Recognition System and autofocus performance help capture images with astounding accuracy. Movies can be shot in Motion JPEG format using the D-Movie function. The camera’s large image sensor ensures exceptional movie image quality and you can create dramatic effects by shooting with a wide range of interchangeable NIKKOR lenses, from wide-angle to macro to fisheye, or by adjusting the lens aperture and experimenting with depth-of-field. The D90 – designed to fuel your passion for photography.</fullDescription><images><image available="true" height="100" width="100"><sourceURL>http://di1.shopping.com/images/pi/57/6a/4f/70621646-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=2&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=5</sourceURL></image><image available="true" height="200" width="200"><sourceURL>http://di1.shopping.com/images/pi/57/6a/4f/70621646-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=2&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=5</sourceURL></image><image available="true" height="300" width="300"><sourceURL>http://di1.shopping.com/images/pi/57/6a/4f/70621646-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=2&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=5</sourceURL></image><image available="true" height="400" width="400"><sourceURL>http://di1.shopping.com/images/pi/57/6a/4f/70621646-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=2&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=5</sourceURL></image><image available="true" height="489" width="490"><sourceURL>http://di1.shopping.com/images/pi/57/6a/4f/70621646-490x489-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=2&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=5</sourceURL></image></images><rating><reviewCount>32</reviewCount><rating>4.81</rating><ratingImage height="18" width="91"><sourceURL>http://img.shopping.com/sc/pr/sdc_stars_sm_5.gif</sourceURL></ratingImage><reviewURL>http://www.shopping.com/Nikon-D90-with-18-105mm-lens/reviews~linkin_id-7000610</reviewURL></rating><minPrice>849.95</minPrice><maxPrice>1599.95</maxPrice><productOffersURL>http://www.shopping.com/Nikon-D90-with-18-105mm-lens/prices~linkin_id-7000610</productOffersURL><productSpecsURL>http://www.shopping.com/Nikon-D90-with-18-105mm-lens/info~linkin_id-7000610</productSpecsURL><offers matchedOfferCount="25" pageNumber="1" returnedOfferCount="5"><offer featured="false" id="3o5e1VghgJPfhLvT1JFKTA==" smartBuy="false" used="false"><name>Nikon D90 18-105mm VR Lens</name><description>The Nikon D90 SLR Digital Camera  with its 12.3-megapixel DX-format CMOS  3" High resolution LCD display  Scene Recognition System  Picture Control  Active D-Lighting  and one-button Live View  prov</description><categoryId>7185</categoryId><manufacturer>Nikon</manufacturer><imageList><image available="true" height="100" width="100"><sourceURL>http://di111.shopping.com/images/di/33/6f/35/6531566768674a5066684c7654314a464b5441-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=1</sourceURL></image><image available="true" height="200" width="200"><sourceURL>http://di111.shopping.com/images/di/33/6f/35/6531566768674a5066684c7654314a464b5441-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=1</sourceURL></image><image available="false" height="300" width="300"><sourceURL>http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=1</sourceURL></image><image available="false" height="400" width="400"><sourceURL>http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=1</sourceURL></image><image available="true" height="260" width="260"><sourceURL>http://di111.shopping.com/images/di/33/6f/35/6531566768674a5066684c7654314a464b5441-260x260-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=1</sourceURL></image></imageList><stockStatus>in-stock</stockStatus><basePrice currency="USD">849.95</basePrice><tax checkSite="true"></tax><shippingCost currency="USD">0.00</shippingCost><totalPrice checkSite="true"></totalPrice><originalPrice currency="USD">849.95</originalPrice><offerURL>http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=419&amp;BEFID=7185&amp;aon=%5E1&amp;MerchantID=9390&amp;crawler_id=1905054&amp;dealId=3o5e1VghgJPfhLvT1JFKTA%3D%3D&amp;url=http%3A%2F%2Fwww.ajrichard.com%2FNikon-D90-18-105mm-VR-Lens%2Fp-292%3Frefid%3DShopping%26&amp;linkin_id=7000610&amp;Issdt=111021183845&amp;searchID=p2.a121bc2aaf029435dce6&amp;DealName=Nikon+D90+18-105mm+VR+Lens&amp;dlprc=849.95&amp;crn=&amp;istrsmrc=0&amp;isathrsl=0&amp;AR=2&amp;NG=20&amp;NDP=200&amp;PN=1&amp;ST=7&amp;DB=sdcprod&amp;MT=phx-pkadudc2&amp;FPT=DSP&amp;NDS=&amp;NMS=&amp;MRS=&amp;PD=70621646&amp;brnId=14804&amp;IsFtr=0&amp;IsSmart=0&amp;DMT=&amp;op=&amp;CM=&amp;DlLng=1&amp;RR=2&amp;cid=&amp;semid1=&amp;semid2=&amp;IsLps=0&amp;CC=0&amp;SL=0&amp;FS=1&amp;code=&amp;acode=425&amp;category=&amp;HasLink=&amp;frameId=&amp;ND=&amp;MN=&amp;PT=&amp;prjID=&amp;GR=&amp;lnkId=&amp;VK=</offerURL><store authorizedReseller="false" id="9390" trusted="false"><name>AJRichard</name><logo available="true" height="31" width="88"><sourceURL>http://img.shopping.com/cctool/merch_logos/9390.gif</sourceURL></logo><phoneNumber>1-888-871-1256</phoneNumber><ratingInfo><reviewCount>3124</reviewCount><rating>4.48</rating><ratingImage height="18" width="91"><sourceURL>http://img.shopping.com/sc/mr/sdc_checks_45.gif</sourceURL></ratingImage><reviewURL>http://www.shopping.com/xMR-store_ajrichard~MRD-9390~S-1~linkin_id-7000610</reviewURL></ratingInfo><countryFlag height="11" width="18"><sourceURL>http://img.shopping.com/sc/glb/flag/US.gif</sourceURL><countryCode>US</countryCode></countryFlag></store><sku>292</sku></offer><offer featured="false" id="_lYWj_jbwfsSkfcwUcDuww==" smartBuy="false" used="false"><name>Nikon D90 SLR w/Nikon 18-105mm VR Lens</name><description>12.3 MegapixelDX Format CMOS Sensor3" VGA LCD DisplayLive ViewSelf Cleaning SensorD-Movie ModeHigh Sensitivity (ISO 3200)4.5 fps BurstIn-Camera Image Editing</description><categoryId>7185</categoryId><manufacturer>Nikon</manufacturer><imageList><image available="true" height="100" width="100"><sourceURL>http://di108.shopping.com/images/di/5f/6c/59/576a5f6a62776673536b666377556344757777-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=2</sourceURL></image><image available="true" height="200" width="200"><sourceURL>http://di108.shopping.com/images/di/5f/6c/59/576a5f6a62776673536b666377556344757777-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=2</sourceURL></image><image available="true" height="300" width="300"><sourceURL>http://di108.shopping.com/images/di/5f/6c/59/576a5f6a62776673536b666377556344757777-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=2</sourceURL></image><image available="true" height="400" width="400"><sourceURL>http://di108.shopping.com/images/di/5f/6c/59/576a5f6a62776673536b666377556344757777-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=2</sourceURL></image><image available="true" height="500" width="500"><sourceURL>http://di108.shopping.com/images/di/5f/6c/59/576a5f6a62776673536b666377556344757777-500x500-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=2</sourceURL></image></imageList><stockStatus>in-stock</stockStatus><basePrice currency="USD">909.00</basePrice><tax checkSite="true"></tax><shippingCost currency="USD">0.00</shippingCost><totalPrice checkSite="true"></totalPrice><originalPrice currency="USD">909.00</originalPrice><offerURL>http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=371&amp;BEFID=7185&amp;aon=%5E1&amp;MerchantID=487342&amp;crawler_id=487342&amp;dealId=_lYWj_jbwfsSkfcwUcDuww%3D%3D&amp;url=http%3A%2F%2Fwww.rythercamera.com%2Fcatalog%2Fproduct_info.php%3Fcsv%3Dsh%26products_id%3D30971%26&amp;linkin_id=7000610&amp;Issdt=111021183845&amp;searchID=p2.a121bc2aaf029435dce6&amp;DealName=Nikon+D90+SLR+w%2FNikon+18-105mm+VR+Lens&amp;dlprc=909.0&amp;crn=&amp;istrsmrc=0&amp;isathrsl=0&amp;AR=3&amp;NG=20&amp;NDP=200&amp;PN=1&amp;ST=7&amp;DB=sdcprod&amp;MT=phx-pkadudc2&amp;FPT=DSP&amp;NDS=&amp;NMS=&amp;MRS=&amp;PD=70621646&amp;brnId=14804&amp;IsFtr=0&amp;IsSmart=0&amp;DMT=&amp;op=&amp;CM=&amp;DlLng=1&amp;RR=3&amp;cid=&amp;semid1=&amp;semid2=&amp;IsLps=0&amp;CC=0&amp;SL=0&amp;FS=1&amp;code=&amp;acode=379&amp;category=&amp;HasLink=&amp;frameId=&amp;ND=&amp;MN=&amp;PT=&amp;prjID=&amp;GR=&amp;lnkId=&amp;VK=</offerURL><store authorizedReseller="false" id="487342" trusted="false"><name>RytherCamera.com</name><logo available="true" height="31" width="88"><sourceURL>http://img.shopping.com/cctool/merch_logos/487342.gif</sourceURL></logo><phoneNumber>1-877-644-7593</phoneNumber><ratingInfo><reviewCount>0</reviewCount></ratingInfo><countryFlag height="11" width="18"><sourceURL>http://img.shopping.com/sc/glb/flag/US.gif</sourceURL><countryCode>US</countryCode></countryFlag></store><sku>30971</sku></offer><offer featured="false" id="1KCclCGuWvty2XKU9skadg==" smartBuy="false" used="false"><name>25448/D90 12.3 Megapixel Digital Camera 18-105mm Zoom Lens w/ 3" Screen - Black</name><description>Nikon D90 - Digital camera - SLR - 12.3 Mpix - Nikon AF-S DX 18-105mm lens - optical zoom: 5.8 x - supported memory: SD, SDHC</description><categoryId>7185</categoryId><manufacturer>Nikon</manufacturer><imageList><image available="true" height="100" width="100"><sourceURL>http://di110.shopping.com/images/di/31/4b/43/636c4347755776747932584b5539736b616467-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=3</sourceURL></image><image available="true" height="200" width="200"><sourceURL>http://di110.shopping.com/images/di/31/4b/43/636c4347755776747932584b5539736b616467-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=3</sourceURL></image><image available="true" height="300" width="300"><sourceURL>http://di110.shopping.com/images/di/31/4b/43/636c4347755776747932584b5539736b616467-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=3</sourceURL></image><image available="true" height="400" width="400"><sourceURL>http://di110.shopping.com/images/di/31/4b/43/636c4347755776747932584b5539736b616467-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=3</sourceURL></image></imageList><stockStatus>in-stock</stockStatus><storeNotes>Get 30 days FREE SHIPPING w/ ShipVantage</storeNotes><basePrice currency="USD">1199.00</basePrice><tax checkSite="true"></tax><shippingCost currency="USD">8.20</shippingCost><totalPrice checkSite="true"></totalPrice><originalPrice currency="USD">1199.00</originalPrice><offerURL>http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=578&amp;BEFID=7185&amp;aon=%5E1&amp;MerchantID=485615&amp;crawler_id=485615&amp;dealId=1KCclCGuWvty2XKU9skadg%3D%3D&amp;url=http%3A%2F%2Fsears.rdr.channelintelligence.com%2Fgo.asp%3FfVhzOGNRAAQIASNiE1NbQBRtFXpzYx0CTAICI2BbH1lEFmgKP3QvUVpEREdlfUAUHAQPLVpFTVdtJzxAHUNYW3AhQBM0QhFvEXAbYh8EAAVmb2JcVlhCGGkPc3QDEkFZVQ0WFhdRW0MWbgYWDlxzdGMdAVQWRi0xDAwPFhw9TSobb05eWVVYKzsLTFVVQi5RICs3SA8MU1s2MQQKD1wf%26nAID%3D13736960%26&amp;linkin_id=7000610&amp;Issdt=111021183845&amp;searchID=p2.a121bc2aaf029435dce6&amp;DealName=25448%2FD90+12.3+Megapixel+Digital+Camera+18-105mm+Zoom+Lens+w%2F+3%22+Screen+-+Black&amp;dlprc=1199.0&amp;crn=&amp;istrsmrc=1&amp;isathrsl=0&amp;AR=4&amp;NG=20&amp;NDP=200&amp;PN=1&amp;ST=7&amp;DB=sdcprod&amp;MT=phx-pkadudc2&amp;FPT=DSP&amp;NDS=&amp;NMS=&amp;MRS=&amp;PD=70621646&amp;brnId=14804&amp;IsFtr=0&amp;IsSmart=0&amp;DMT=&amp;op=&amp;CM=&amp;DlLng=1&amp;RR=4&amp;cid=&amp;semid1=&amp;semid2=&amp;IsLps=0&amp;CC=0&amp;SL=0&amp;FS=0&amp;code=&amp;acode=586&amp;category=&amp;HasLink=&amp;frameId=&amp;ND=&amp;MN=&amp;PT=&amp;prjID=&amp;GR=&amp;lnkId=&amp;VK=</offerURL><store authorizedReseller="false" id="485615" trusted="true"><name>Sears</name><logo available="true" height="31" width="88"><sourceURL>http://img.shopping.com/cctool/merch_logos/485615.gif</sourceURL></logo><phoneNumber>1-800-349-4358</phoneNumber><ratingInfo><reviewCount>888</reviewCount><rating>2.85</rating><ratingImage height="18" width="91"><sourceURL>http://img.shopping.com/sc/mr/sdc_checks_3.gif</sourceURL></ratingImage><reviewURL>http://www.shopping.com/xMR-store_sears_4189479~MRD-485615~S-1~linkin_id-7000610</reviewURL></ratingInfo><countryFlag height="11" width="18"><sourceURL>http://img.shopping.com/sc/glb/flag/US.gif</sourceURL><countryCode>US</countryCode></countryFlag></store><sku>00353197000</sku></offer><offer featured="false" id="3-VOSfVV5Jo7HlA4kJtanA==" smartBuy="false" used="false"><name>Nikon® D90 12.3MP Digital SLR with 18-105mm Lens</name><description>The Nikon D90 will make you rethink what a digital SLR camera can achieve.</description><categoryId>7185</categoryId><manufacturer>Nikon</manufacturer><imageList><image available="true" height="100" width="100"><sourceURL>http://di101.shopping.com/images/di/33/2d/56/4f53665656354a6f37486c41346b4a74616e41-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=4</sourceURL></image><image available="true" height="200" width="200"><sourceURL>http://di101.shopping.com/images/di/33/2d/56/4f53665656354a6f37486c41346b4a74616e41-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=4</sourceURL></image><image available="false" height="300" width="300"><sourceURL>http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=4</sourceURL></image><image available="false" height="400" width="400"><sourceURL>http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=4</sourceURL></image><image available="true" height="220" width="220"><sourceURL>http://di101.shopping.com/images/di/33/2d/56/4f53665656354a6f37486c41346b4a74616e41-220x220-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=4</sourceURL></image></imageList><stockStatus>in-stock</stockStatus><basePrice currency="USD">1350.99</basePrice><tax checkSite="true"></tax><shippingCost currency="USD">6.05</shippingCost><totalPrice checkSite="true"></totalPrice><originalPrice currency="USD">1350.99</originalPrice><offerURL>http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=504&amp;BEFID=7185&amp;aon=%5E1&amp;MerchantID=332477&amp;crawler_id=332477&amp;dealId=3-VOSfVV5Jo7HlA4kJtanA%3D%3D&amp;url=http%3A%2F%2Ftracking.searchmarketing.com%2Fgsic.asp%3Faid%3D982673361%26&amp;linkin_id=7000610&amp;Issdt=111021183845&amp;searchID=p2.a121bc2aaf029435dce6&amp;DealName=Nikon%C2%AE+D90+12.3MP+Digital+SLR+with+18-105mm+Lens&amp;dlprc=1350.99&amp;crn=&amp;istrsmrc=0&amp;isathrsl=0&amp;AR=5&amp;NG=20&amp;NDP=200&amp;PN=1&amp;ST=7&amp;DB=sdcprod&amp;MT=phx-pkadudc2&amp;FPT=DSP&amp;NDS=&amp;NMS=&amp;MRS=&amp;PD=70621646&amp;brnId=14804&amp;IsFtr=0&amp;IsSmart=0&amp;DMT=&amp;op=&amp;CM=&amp;DlLng=1&amp;RR=5&amp;cid=&amp;semid1=&amp;semid2=&amp;IsLps=0&amp;CC=0&amp;SL=0&amp;FS=0&amp;code=&amp;acode=496&amp;category=&amp;HasLink=&amp;frameId=&amp;ND=&amp;MN=&amp;PT=&amp;prjID=&amp;GR=&amp;lnkId=&amp;VK=</offerURL><store authorizedReseller="false" id="332477" trusted="false"><name>RadioShack</name><logo available="true" height="31" width="88"><sourceURL>http://img.shopping.com/cctool/merch_logos/332477.gif</sourceURL></logo><ratingInfo><reviewCount>24</reviewCount><rating>2.25</rating><ratingImage height="18" width="91"><sourceURL>http://img.shopping.com/sc/mr/sdc_checks_25.gif</sourceURL></ratingImage><reviewURL>http://www.shopping.com/xMR-store_radioshack_9689~MRD-332477~S-1~linkin_id-7000610</reviewURL></ratingInfo><countryFlag height="11" width="18"><sourceURL>http://img.shopping.com/sc/glb/flag/US.gif</sourceURL><countryCode>US</countryCode></countryFlag></store><sku>11148905</sku></offer><offer featured="false" id="kQnB6rS4AjN5dx5h2_631g==" smartBuy="false" used="false"><name>Nikon D90 Kit 12.3-megapixel Digital SLR with 18-105mm VR Lens</name><description>Photographers, take your passion further!Now is the time for new creativity, and to rethink what a digital SLR camera can achieve. It's time for the D90, a camera with everything you would expect from Nikon's next-generation D-SLRs, and some unexpected surprises, as well. The stunning image quality is inherited from the D300, Nikon's DX-format flagship. The D90 also has Nikon's unmatched ergonomics and high performance, and now takes high-quality movies with beautifully cinematic results. The world of photography has changed, and with the D90 in your hands, it's time to make your own rules.AF-S DX NIKKOR 18-105mm f/3.5-5.6G ED VR LensWide-ratio 5.8x zoom Compact, versatile and ideal for a broad range of shooting situations, ranging from interiors and landscapes to beautiful portraits� a perfect everyday zoom. Nikon VR (Vibration Reduction) image stabilization Vibration Reduction is engineered specifically for each VR NIKKOR lens and enables handheld shooting at up to 3 shutter speeds slower than would</description><categoryId>7185</categoryId><manufacturer>Nikon</manufacturer><imageList><image available="true" height="100" width="100"><sourceURL>http://di110.shopping.com/images/di/6b/51/6e/4236725334416a4e3564783568325f36333167-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=5</sourceURL></image><image available="true" height="200" width="200"><sourceURL>http://di110.shopping.com/images/di/6b/51/6e/4236725334416a4e3564783568325f36333167-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=5</sourceURL></image><image available="true" height="300" width="300"><sourceURL>http://di110.shopping.com/images/di/6b/51/6e/4236725334416a4e3564783568325f36333167-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=5</sourceURL></image><image available="false" height="400" width="400"><sourceURL>http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=5</sourceURL></image><image available="true" height="232" width="300"><sourceURL>http://di110.shopping.com/images/di/6b/51/6e/4236725334416a4e3564783568325f36333167-300x232-0-0.jpg?p=p2.a121bc2aaf029435dce6&amp;a=1&amp;c=1&amp;l=7000610&amp;t=111021183845&amp;r=5</sourceURL></image></imageList><stockStatus>in-stock</stockStatus><storeNotes>Shipping Included!</storeNotes><basePrice currency="USD">1050.00</basePrice><tax checkSite="true"></tax><shippingCost currency="USD">0.00</shippingCost><totalPrice checkSite="true"></totalPrice><originalPrice currency="USD">1199.00</originalPrice><offerURL>http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=135&amp;BEFID=7185&amp;aon=%5E1&amp;MerchantID=313162&amp;crawler_id=313162&amp;dealId=kQnB6rS4AjN5dx5h2_631g%3D%3D&amp;url=http%3A%2F%2Fonecall.rdr.channelintelligence.com%2Fgo.asp%3FfVhzOGNRAAQIASNiE1pZSxNoWHFwLx8GTAICa2ZeH1sPXTZLNzRpAh1HR0BxPQEGCBJNMhFHUElsFCFCVkVTTHAcBggEHQ4aHXNpGERGH3RQODsbAgdechJtbBt8fx8JAwhtZFAzJj1oGgIWCxRlNyFOUV9UUGIxBgo0T0IyTSYqJ0RWHw4QPCIBAAQXRGMDICg6TllZVBhh%26nAID%3D13736960&amp;linkin_id=7000610&amp;Issdt=111021183845&amp;searchID=p2.a121bc2aaf029435dce6&amp;DealName=Nikon+D90+Kit+12.3-megapixel+Digital+SLR+with+18-105mm+VR+Lens&amp;dlprc=1050.0&amp;crn=&amp;istrsmrc=1&amp;isathrsl=0&amp;AR=6&amp;NG=20&amp;NDP=200&amp;PN=1&amp;ST=7&amp;DB=sdcprod&amp;MT=phx-pkadudc2&amp;FPT=DSP&amp;NDS=&amp;NMS=&amp;MRS=&amp;PD=70621646&amp;brnId=14804&amp;IsFtr=0&amp;IsSmart=0&amp;DMT=&amp;op=&amp;CM=&amp;DlLng=1&amp;RR=6&amp;cid=&amp;semid1=&amp;semid2=&amp;IsLps=0&amp;CC=0&amp;SL=1&amp;FS=1&amp;code=&amp;acode=143&amp;category=&amp;HasLink=&amp;frameId=&amp;ND=&amp;MN=&amp;PT=&amp;prjID=&amp;GR=&amp;lnkId=&amp;VK=</offerURL><store authorizedReseller="false" id="313162" trusted="true"><name>OneCall</name><logo available="true" height="31" width="88"><sourceURL>http://img.shopping.com/cctool/merch_logos/313162.gif</sourceURL></logo><phoneNumber>1.800.398.0766</phoneNumber><ratingInfo><reviewCount>180</reviewCount><rating>4.44</rating><ratingImage height="18" width="91"><sourceURL>http://img.shopping.com/sc/mr/sdc_checks_45.gif</sourceURL></ratingImage><reviewURL>http://www.shopping.com/xMR-store_onecall_9689~MRD-313162~S-1~linkin_id-7000610</reviewURL></ratingInfo><countryFlag height="11" width="18"><sourceURL>http://img.shopping.com/sc/glb/flag/US.gif</sourceURL><countryCode>US</countryCode></countryFlag></store><sku>92826</sku></offer></offers></product></items><attributes matchedAttributeCount="5" returnedAttributeCount="5"><attribute id="Dynamic_Price_Range"><name>Price range</name><attributeURL>http://www.shopping.com/digital-cameras/nikon/products?oq=nikon&amp;linkin_id=7000610</attributeURL><attributeValues matchedValueCount="2" returnedValueCount="2"><attributeValue id="price_range_24_4012" matchingItemsCount="1"><name>$24 - $4012</name><attributeValueURL>http://www.shopping.com/digital-cameras/nikon/products?minPrice=24&amp;maxPrice=4012&amp;linkin_id=7000610</attributeValueURL></attributeValue><attributeValue id="price_range_4012_7999" matchingItemsCount="1"><name>$4012 - $7999</name><attributeValueURL>http://www.shopping.com/digital-cameras/nikon/products?minPrice=4012&amp;maxPrice=7999&amp;linkin_id=7000610</attributeValueURL></attributeValue></attributeValues></attribute><attribute id="9688_brand"><name>Brand</name><attributeURL>http://www.shopping.com/digital-cameras/nikon/products~all-9688-brand~MS-1?oq=nikon&amp;linkin_id=7000610</attributeURL><attributeValues matchedValueCount="7" returnedValueCount="5"><attributeValue id="brand_nikon" matchingItemsCount="2261"><name>Nikon</name><attributeValueURL>http://www.shopping.com/digital-cameras/nikon+brand-nikon/products~linkin_id-7000610</attributeValueURL></attributeValue><attributeValue id="9688_brand_crane" matchingItemsCount="17"><name>Crane</name><attributeValueURL>http://www.shopping.com/digital-cameras/nikon+9688-brand-crane/products~linkin_id-7000610</attributeValueURL></attributeValue><attributeValue id="ikelite" matchingItemsCount="2"><name>Ikelite</name><attributeValueURL>http://www.shopping.com/digital-cameras/nikon+ikelite/products~linkin_id-7000610</attributeValueURL></attributeValue><attributeValue id="bower" matchingItemsCount="1"><name>Bower</name><attributeValueURL>http://www.shopping.com/digital-cameras/nikon+bower/products~linkin_id-7000610</attributeValueURL></attributeValue><attributeValue id="brand_fuji" matchingItemsCount="2"><name>FUJIFILM</name><attributeValueURL>http://www.shopping.com/digital-cameras/nikon+brand-fuji/products~linkin_id-7000610</attributeValueURL></attributeValue></attributeValues></attribute><attribute id="store"><name>Store</name><attributeURL>http://www.shopping.com/digital-cameras/nikon/products~all-store~MS-1?oq=nikon&amp;linkin_id=7000610</attributeURL><attributeValues matchedValueCount="35" returnedValueCount="5"><attributeValue id="store_amazon_marketplace_9689" matchingItemsCount="808"><name>Amazon Marketplace</name><attributeValueURL>http://www.shopping.com/digital-cameras/nikon+store-amazon-marketplace-9689/products~linkin_id-7000610</attributeValueURL></attributeValue><attributeValue id="store_amazon" matchingItemsCount="83"><name>Amazon</name><attributeValueURL>http://www.shopping.com/digital-cameras/nikon+store-amazon/products~linkin_id-7000610</attributeValueURL></attributeValue><attributeValue id="store_adorama" matchingItemsCount="81"><name>Adorama</name><attributeValueURL>http://www.shopping.com/digital-cameras/nikon+store-adorama/products~linkin_id-7000610</attributeValueURL></attributeValue><attributeValue id="store_j_r_music_and_computer_world" matchingItemsCount="78"><name>J&amp;R Music and Computer World</name><attributeValueURL>http://www.shopping.com/digital-cameras/nikon+store-j-r-music-and-computer-world/products~linkin_id-7000610</attributeValueURL></attributeValue><attributeValue id="store_rythercamera_com" matchingItemsCount="78"><name>RytherCamera.com</name><attributeValueURL>http://www.shopping.com/digital-cameras/nikon+store-rythercamera-com/products~linkin_id-7000610</attributeValueURL></attributeValue></attributeValues></attribute><attribute id="21885_resolution"><name>Resolution</name><attributeURL>http://www.shopping.com/digital-cameras/nikon/products~all-21885-resolution~MS-1?oq=nikon&amp;linkin_id=7000610</attributeURL><attributeValues matchedValueCount="13" returnedValueCount="5"><attributeValue id="under_4_megapixel" matchingItemsCount="3"><name>Under 4 Megapixel</name><attributeValueURL>http://www.shopping.com/digital-cameras/nikon+under-4-megapixel/products~linkin_id-7000610</attributeValueURL></attributeValue><attributeValue id="5_megapixel_digital_cameras" matchingItemsCount="1085"><name>At least 5 Megapixel</name><attributeValueURL>http://www.shopping.com/digital-cameras/nikon+5-megapixel-digital-cameras/products~linkin_id-7000610</attributeValueURL></attributeValue><attributeValue id="6_megapixel_digital_cameras" matchingItemsCount="1080"><name>At least 6 Megapixel</name><attributeValueURL>http://www.shopping.com/digital-cameras/nikon+6-megapixel-digital-cameras/products~linkin_id-7000610</attributeValueURL></attributeValue><attributeValue id="7_megapixel_digital_cameras" matchingItemsCount="1066"><name>At least 7 Megapixel</name><attributeValueURL>http://www.shopping.com/digital-cameras/nikon+7-megapixel-digital-cameras/products~linkin_id-7000610</attributeValueURL></attributeValue><attributeValue id="8_megapixel_digital_cameras" matchingItemsCount="1056"><name>At least 8 Megapixel</name><attributeValueURL>http://www.shopping.com/digital-cameras/nikon+8-megapixel-digital-cameras/products~linkin_id-7000610</attributeValueURL></attributeValue></attributeValues></attribute><attribute id="32804-features"><name>Features</name><attributeURL>http://www.shopping.com/digital-cameras/nikon/products~all-32804-features~MS-1?oq=nikon&amp;linkin_id=7000610</attributeURL><attributeValues matchedValueCount="12" returnedValueCount="5"><attributeValue id="32804_features_shockproof" matchingItemsCount="7"><name>Shockproof</name><attributeValueURL>http://www.shopping.com/digital-cameras/nikon+32804-features-shockproof/products~linkin_id-7000610</attributeValueURL></attributeValue><attributeValue id="32804_features_waterproof" matchingItemsCount="32"><name>Waterproof</name><attributeValueURL>http://www.shopping.com/digital-cameras/nikon+32804-features-waterproof/products~linkin_id-7000610</attributeValueURL></attributeValue><attributeValue id="32804_features_freezeproof" matchingItemsCount="7"><name>Freezeproof</name><attributeValueURL>http://www.shopping.com/digital-cameras/nikon+32804-features-freezeproof/products~linkin_id-7000610</attributeValueURL></attributeValue><attributeValue id="32804_features_dust_proof" matchingItemsCount="23"><name>Dust proof</name><attributeValueURL>http://www.shopping.com/digital-cameras/nikon+32804-features-dust-proof/products~linkin_id-7000610</attributeValueURL></attributeValue><attributeValue id="32804_features_image_stabilization" matchingItemsCount="797"><name>Image Stabilization</name><attributeValueURL>http://www.shopping.com/digital-cameras/nikon+32804-features-image-stabilization/products~linkin_id-7000610</attributeValueURL></attributeValue></attributeValues></attribute></attributes><contentType>hybrid</contentType></category></categories><relatedTerms><term>digital camera</term><term>g1</term><term>sony</term><term>camera</term><term>canon</term><term>nikon</term><term>kodak digital camera</term><term>kodak</term><term>sony cybershot</term><term>kodak easyshare digital camera</term><term>nikon coolpix</term><term>olympus</term><term>pink digital camera</term><term>canon powershot</term></relatedTerms></GeneralSearchResponse>
\ No newline at end of file
diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/examples/strict.dtd b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/examples/strict.dtd
deleted file mode 100644
index b274559..0000000
--- a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/examples/strict.dtd
+++ /dev/null
@@ -1,870 +0,0 @@
-<!--
-    This is HTML 4.01 Strict DTD, which excludes the presentation 
-    attributes and elements that W3C expects to phase out as 
-    support for style sheets matures. Authors should use the Strict
-    DTD when possible, but may use the Transitional DTD when support
-    for presentation attribute and elements is required.
-    
-    HTML 4 includes mechanisms for style sheets, scripting,
-    embedding objects, improved support for right to left and mixed
-    direction text, and enhancements to forms for improved
-    accessibility for people with disabilities.
-
-          Draft: $Date: 1999/12/24 23:37:48 $
-
-          Authors:
-              Dave Raggett <dsr@w3.org>
-              Arnaud Le Hors <lehors@w3.org>
-              Ian Jacobs <ij@w3.org>
-
-    Further information about HTML 4.01 is available at:
-
-        http://www.w3.org/TR/1999/REC-html401-19991224
-
-
-    The HTML 4.01 specification includes additional
-    syntactic constraints that cannot be expressed within
-    the DTDs.
-
--->
-<!--
-    Typical usage:
-
-    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
-            "http://www.w3.org/TR/html4/strict.dtd">
-    <html>
-    <head>
-    ...
-    </head>
-    <body>
-    ...
-    </body>
-    </html>
-
-    The URI used as a system identifier with the public identifier allows
-    the user agent to download the DTD and entity sets as needed.
-
-    The FPI for the Transitional HTML 4.01 DTD is:
-
-        "-//W3C//DTD HTML 4.01 Transitional//EN"
-
-    This version of the transitional DTD is:
-
-        http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd
-
-    If you are writing a document that includes frames, use 
-    the following FPI:
-
-        "-//W3C//DTD HTML 4.01 Frameset//EN"
-
-    This version of the frameset DTD is:
-
-        http://www.w3.org/TR/1999/REC-html401-19991224/frameset.dtd
-
-    Use the following (relative) URIs to refer to 
-    the DTDs and entity definitions of this specification:
-
-    "strict.dtd"
-    "loose.dtd"
-    "frameset.dtd"
-    "HTMLlat1.ent"
-    "HTMLsymbol.ent"
-    "HTMLspecial.ent"
-
--->
-
-<!--================== Imported Names ====================================-->
-<!-- Feature Switch for frameset documents -->
-<!ENTITY % HTML.Frameset "IGNORE">
-
-<!ENTITY % ContentType "CDATA"
-    -- media type, as per [RFC2045]
-    -->
-
-<!ENTITY % ContentTypes "CDATA"
-    -- comma-separated list of media types, as per [RFC2045]
-    -->
-
-<!ENTITY % Charset "CDATA"
-    -- a character encoding, as per [RFC2045]
-    -->
-
-<!ENTITY % Charsets "CDATA"
-    -- a space-separated list of character encodings, as per [RFC2045]
-    -->
-
-<!ENTITY % LanguageCode "NAME"
-    -- a language code, as per [RFC1766]
-    -->
-
-<!ENTITY % Character "CDATA"
-    -- a single character from [ISO10646] 
-    -->
-
-<!ENTITY % LinkTypes "CDATA"
-    -- space-separated list of link types
-    -->
-
-<!ENTITY % MediaDesc "CDATA"
-    -- single or comma-separated list of media descriptors
-    -->
-
-<!ENTITY % URI "CDATA"
-    -- a Uniform Resource Identifier,
-       see [URI]
-    -->
-
-<!ENTITY % Datetime "CDATA" -- date and time information. ISO date format -->
-
-
-<!ENTITY % Script "CDATA" -- script expression -->
-
-<!ENTITY % StyleSheet "CDATA" -- style sheet data -->
-
-
-
-<!ENTITY % Text "CDATA">
-
-
-<!-- Parameter Entities -->
-
-<!ENTITY % head.misc "SCRIPT|STYLE|META|LINK|OBJECT" -- repeatable head elements -->
-
-<!ENTITY % heading "H1|H2|H3|H4|H5|H6">
-
-<!ENTITY % list "UL | OL">
-
-<!ENTITY % preformatted "PRE">
-
-
-<!--================ Character mnemonic entities =========================-->
-
-<!ENTITY % HTMLlat1 PUBLIC
-   "-//W3C//ENTITIES Latin1//EN//HTML"
-   "HTMLlat1.ent">
-%HTMLlat1;
-
-<!ENTITY % HTMLsymbol PUBLIC
-   "-//W3C//ENTITIES Symbols//EN//HTML"
-   "HTMLsymbol.ent">
-%HTMLsymbol;
-
-<!ENTITY % HTMLspecial PUBLIC
-   "-//W3C//ENTITIES Special//EN//HTML"
-   "HTMLspecial.ent">
-%HTMLspecial;
-<!--=================== Generic Attributes ===============================-->
-
-<!ENTITY % coreattrs
- "id          ID             #IMPLIED  -- document-wide unique id --
-  class       CDATA          #IMPLIED  -- space-separated list of classes --
-  style       %StyleSheet;   #IMPLIED  -- associated style info --
-  title       %Text;         #IMPLIED  -- advisory title --"
-  >
-
-<!ENTITY % i18n
- "lang        %LanguageCode; #IMPLIED  -- language code --
-  dir         (ltr|rtl)      #IMPLIED  -- direction for weak/neutral text --"
-  >
-
-<!ENTITY % events
- "onclick     %Script;       #IMPLIED  -- a pointer button was clicked --
-  ondblclick  %Script;       #IMPLIED  -- a pointer button was double clicked--
-  onmousedown %Script;       #IMPLIED  -- a pointer button was pressed down --
-  onmouseup   %Script;       #IMPLIED  -- a pointer button was released --
-  onmouseover %Script;       #IMPLIED  -- a pointer was moved onto --
-  onmousemove %Script;       #IMPLIED  -- a pointer was moved within --
-  onmouseout  %Script;       #IMPLIED  -- a pointer was moved away --
-  onkeypress  %Script;       #IMPLIED  -- a key was pressed and released --
-  onkeydown   %Script;       #IMPLIED  -- a key was pressed down --
-  onkeyup     %Script;       #IMPLIED  -- a key was released --"
-  >
-
-<!-- Reserved Feature Switch -->
-<!ENTITY % HTML.Reserved "IGNORE">
-
-<!-- The following attributes are reserved for possible future use -->
-<![ %HTML.Reserved; [
-<!ENTITY % reserved
- "datasrc     %URI;          #IMPLIED  -- a single or tabular Data Source --
-  datafld     CDATA          #IMPLIED  -- the property or column name --
-  dataformatas (plaintext|html) plaintext -- text or html --"
-  >
-]]>
-
-<!ENTITY % reserved "">
-
-<!ENTITY % attrs "%coreattrs; %i18n; %events;">
-
-
-<!--=================== Text Markup ======================================-->
-
-<!ENTITY % fontstyle
- "TT | I | B | BIG | SMALL">
-
-<!ENTITY % phrase "EM | STRONG | DFN | CODE |
-                   SAMP | KBD | VAR | CITE | ABBR | ACRONYM" >
-
-<!ENTITY % special
-   "A | IMG | OBJECT | BR | SCRIPT | MAP | Q | SUB | SUP | SPAN | BDO">
-
-<!ENTITY % formctrl "INPUT | SELECT | TEXTAREA | LABEL | BUTTON">
-
-<!-- %inline; covers inline or "text-level" elements -->
-<!ENTITY % inline "#PCDATA | %fontstyle; | %phrase; | %special; | %formctrl;">
-
-<!ELEMENT (%fontstyle;|%phrase;) - - (%inline;)*>
-<!ATTLIST (%fontstyle;|%phrase;)
-  %attrs;                              -- %coreattrs, %i18n, %events --
-  >
-
-<!ELEMENT (SUB|SUP) - - (%inline;)*    -- subscript, superscript -->
-<!ATTLIST (SUB|SUP)
-  %attrs;                              -- %coreattrs, %i18n, %events --
-  >
-
-<!ELEMENT SPAN - - (%inline;)*         -- generic language/style container -->
-<!ATTLIST SPAN
-  %attrs;                              -- %coreattrs, %i18n, %events --
-  %reserved;			       -- reserved for possible future use --
-  >
-
-<!ELEMENT BDO - - (%inline;)*          -- I18N BiDi over-ride -->
-<!ATTLIST BDO
-  %coreattrs;                          -- id, class, style, title --
-  lang        %LanguageCode; #IMPLIED  -- language code --
-  dir         (ltr|rtl)      #REQUIRED -- directionality --
-  >
-
-
-<!ELEMENT BR - O EMPTY                 -- forced line break -->
-<!ATTLIST BR
-  %coreattrs;                          -- id, class, style, title --
-  >
-
-<!--================== HTML content models ===============================-->
-
-<!--
-    HTML has two basic content models:
-
-        %inline;     character level elements and text strings
-        %block;      block-like elements e.g. paragraphs and lists
--->
-
-<!ENTITY % block
-     "P | %heading; | %list; | %preformatted; | DL | DIV | NOSCRIPT |
-      BLOCKQUOTE | FORM | HR | TABLE | FIELDSET | ADDRESS">
-
-<!ENTITY % flow "%block; | %inline;">
-
-<!--=================== Document Body ====================================-->
-
-<!ELEMENT BODY O O (%block;|SCRIPT)+ +(INS|DEL) -- document body -->
-<!ATTLIST BODY
-  %attrs;                              -- %coreattrs, %i18n, %events --
-  onload          %Script;   #IMPLIED  -- the document has been loaded --
-  onunload        %Script;   #IMPLIED  -- the document has been removed --
-  >
-
-<!ELEMENT ADDRESS - - (%inline;)* -- information on author -->
-<!ATTLIST ADDRESS
-  %attrs;                              -- %coreattrs, %i18n, %events --
-  >
-
-<!ELEMENT DIV - - (%flow;)*            -- generic language/style container -->
-<!ATTLIST DIV
-  %attrs;                              -- %coreattrs, %i18n, %events --
-  %reserved;                           -- reserved for possible future use --
-  >
-
-
-<!--================== The Anchor Element ================================-->
-
-<!ENTITY % Shape "(rect|circle|poly|default)">
-<!ENTITY % Coords "CDATA" -- comma-separated list of lengths -->
-
-<!ELEMENT A - - (%inline;)* -(A)       -- anchor -->
-<!ATTLIST A
-  %attrs;                              -- %coreattrs, %i18n, %events --
-  charset     %Charset;      #IMPLIED  -- char encoding of linked resource --
-  type        %ContentType;  #IMPLIED  -- advisory content type --
-  name        CDATA          #IMPLIED  -- named link end --
-  href        %URI;          #IMPLIED  -- URI for linked resource --
-  hreflang    %LanguageCode; #IMPLIED  -- language code --
-  rel         %LinkTypes;    #IMPLIED  -- forward link types --
-  rev         %LinkTypes;    #IMPLIED  -- reverse link types --
-  accesskey   %Character;    #IMPLIED  -- accessibility key character --
-  shape       %Shape;        rect      -- for use with client-side image maps --
-  coords      %Coords;       #IMPLIED  -- for use with client-side image maps --
-  tabindex    NUMBER         #IMPLIED  -- position in tabbing order --
-  onfocus     %Script;       #IMPLIED  -- the element got the focus --
-  onblur      %Script;       #IMPLIED  -- the element lost the focus --
-  >
-
-<!--================== Client-side image maps ============================-->
-
-<!-- These can be placed in the same document or grouped in a
-     separate document although this isn't yet widely supported -->
-
-<!ELEMENT MAP - - ((%block;) | AREA)+ -- client-side image map -->
-<!ATTLIST MAP
-  %attrs;                              -- %coreattrs, %i18n, %events --
-  name        CDATA          #REQUIRED -- for reference by usemap --
-  >
-
-<!ELEMENT AREA - O EMPTY               -- client-side image map area -->
-<!ATTLIST AREA
-  %attrs;                              -- %coreattrs, %i18n, %events --
-  shape       %Shape;        rect      -- controls interpretation of coords --
-  coords      %Coords;       #IMPLIED  -- comma-separated list of lengths --
-  href        %URI;          #IMPLIED  -- URI for linked resource --
-  nohref      (nohref)       #IMPLIED  -- this region has no action --
-  alt         %Text;         #REQUIRED -- short description --
-  tabindex    NUMBER         #IMPLIED  -- position in tabbing order --
-  accesskey   %Character;    #IMPLIED  -- accessibility key character --
-  onfocus     %Script;       #IMPLIED  -- the element got the focus --
-  onblur      %Script;       #IMPLIED  -- the element lost the focus --
-  >
-
-<!--================== The LINK Element ==================================-->
-
-<!--
-  Relationship values can be used in principle:
-
-   a) for document specific toolbars/menus when used
-      with the LINK element in document head e.g.
-        start, contents, previous, next, index, end, help
-   b) to link to a separate style sheet (rel=stylesheet)
-   c) to make a link to a script (rel=script)
-   d) by stylesheets to control how collections of
-      html nodes are rendered into printed documents
-   e) to make a link to a printable version of this document
-      e.g. a postscript or pdf version (rel=alternate media=print)
--->
-
-<!ELEMENT LINK - O EMPTY               -- a media-independent link -->
-<!ATTLIST LINK
-  %attrs;                              -- %coreattrs, %i18n, %events --
-  charset     %Charset;      #IMPLIED  -- char encoding of linked resource --
-  href        %URI;          #IMPLIED  -- URI for linked resource --
-  hreflang    %LanguageCode; #IMPLIED  -- language code --
-  type        %ContentType;  #IMPLIED  -- advisory content type --
-  rel         %LinkTypes;    #IMPLIED  -- forward link types --
-  rev         %LinkTypes;    #IMPLIED  -- reverse link types --
-  media       %MediaDesc;    #IMPLIED  -- for rendering on these media --
-  >
-
-<!--=================== Images ===========================================-->
-
-<!-- Length defined in strict DTD for cellpadding/cellspacing -->
-<!ENTITY % Length "CDATA" -- nn for pixels or nn% for percentage length -->
-<!ENTITY % MultiLength "CDATA" -- pixel, percentage, or relative -->
-
-<![ %HTML.Frameset; [
-<!ENTITY % MultiLengths "CDATA" -- comma-separated list of MultiLength -->
-]]>
-
-<!ENTITY % Pixels "CDATA" -- integer representing length in pixels -->
-
-
-<!-- To avoid problems with text-only UAs as well as 
-   to make image content understandable and navigable 
-   to users of non-visual UAs, you need to provide
-   a description with ALT, and avoid server-side image maps -->
-<!ELEMENT IMG - O EMPTY                -- Embedded image -->
-<!ATTLIST IMG
-  %attrs;                              -- %coreattrs, %i18n, %events --
-  src         %URI;          #REQUIRED -- URI of image to embed --
-  alt         %Text;         #REQUIRED -- short description --
-  longdesc    %URI;          #IMPLIED  -- link to long description
-                                          (complements alt) --
-  name        CDATA          #IMPLIED  -- name of image for scripting --
-  height      %Length;       #IMPLIED  -- override height --
-  width       %Length;       #IMPLIED  -- override width --
-  usemap      %URI;          #IMPLIED  -- use client-side image map --
-  ismap       (ismap)        #IMPLIED  -- use server-side image map --
-  >
-
-<!-- USEMAP points to a MAP element which may be in this document
-  or an external document, although the latter is not widely supported -->
-
-<!--==================== OBJECT ======================================-->
-<!--
-  OBJECT is used to embed objects as part of HTML pages 
-  PARAM elements should precede other content. SGML mixed content
-  model technicality precludes specifying this formally ...
--->
-
-<!ELEMENT OBJECT - - (PARAM | %flow;)*
- -- generic embedded object -->
-<!ATTLIST OBJECT
-  %attrs;                              -- %coreattrs, %i18n, %events --
-  declare     (declare)      #IMPLIED  -- declare but don't instantiate flag --
-  classid     %URI;          #IMPLIED  -- identifies an implementation --
-  codebase    %URI;          #IMPLIED  -- base URI for classid, data, archive--
-  data        %URI;          #IMPLIED  -- reference to object's data --
-  type        %ContentType;  #IMPLIED  -- content type for data --
-  codetype    %ContentType;  #IMPLIED  -- content type for code --
-  archive     CDATA          #IMPLIED  -- space-separated list of URIs --
-  standby     %Text;         #IMPLIED  -- message to show while loading --
-  height      %Length;       #IMPLIED  -- override height --
-  width       %Length;       #IMPLIED  -- override width --
-  usemap      %URI;          #IMPLIED  -- use client-side image map --
-  name        CDATA          #IMPLIED  -- submit as part of form --
-  tabindex    NUMBER         #IMPLIED  -- position in tabbing order --
-  %reserved;                           -- reserved for possible future use --
-  >
-
-<!ELEMENT PARAM - O EMPTY              -- named property value -->
-<!ATTLIST PARAM
-  id          ID             #IMPLIED  -- document-wide unique id --
-  name        CDATA          #REQUIRED -- property name --
-  value       CDATA          #IMPLIED  -- property value --
-  valuetype   (DATA|REF|OBJECT) DATA   -- How to interpret value --
-  type        %ContentType;  #IMPLIED  -- content type for value
-                                          when valuetype=ref --
-  >
-
-
-<!--=================== Horizontal Rule ==================================-->
-
-<!ELEMENT HR - O EMPTY -- horizontal rule -->
-<!ATTLIST HR
-  %attrs;                              -- %coreattrs, %i18n, %events --
-  >
-
-<!--=================== Paragraphs =======================================-->
-
-<!ELEMENT P - O (%inline;)*            -- paragraph -->
-<!ATTLIST P
-  %attrs;                              -- %coreattrs, %i18n, %events --
-  >
-
-<!--=================== Headings =========================================-->
-
-<!--
-  There are six levels of headings from H1 (the most important)
-  to H6 (the least important).
--->
-
-<!ELEMENT (%heading;)  - - (%inline;)* -- heading -->
-<!ATTLIST (%heading;)
-  %attrs;                              -- %coreattrs, %i18n, %events --
-  >
-
-<!--=================== Preformatted Text ================================-->
-
-<!-- excludes markup for images and changes in font size -->
-<!ENTITY % pre.exclusion "IMG|OBJECT|BIG|SMALL|SUB|SUP">
-
-<!ELEMENT PRE - - (%inline;)* -(%pre.exclusion;) -- preformatted text -->
-<!ATTLIST PRE
-  %attrs;                              -- %coreattrs, %i18n, %events --
-  >
-
-<!--===================== Inline Quotes ==================================-->
-
-<!ELEMENT Q - - (%inline;)*            -- short inline quotation -->
-<!ATTLIST Q
-  %attrs;                              -- %coreattrs, %i18n, %events --
-  cite        %URI;          #IMPLIED  -- URI for source document or msg --
-  >
-
-<!--=================== Block-like Quotes ================================-->
-
-<!ELEMENT BLOCKQUOTE - - (%block;|SCRIPT)+ -- long quotation -->
-<!ATTLIST BLOCKQUOTE
-  %attrs;                              -- %coreattrs, %i18n, %events --
-  cite        %URI;          #IMPLIED  -- URI for source document or msg --
-  >
-
-<!--=================== Inserted/Deleted Text ============================-->
-
-
-<!-- INS/DEL are handled by inclusion on BODY -->
-<!ELEMENT (INS|DEL) - - (%flow;)*      -- inserted text, deleted text -->
-<!ATTLIST (INS|DEL)
-  %attrs;                              -- %coreattrs, %i18n, %events --
-  cite        %URI;          #IMPLIED  -- info on reason for change --
-  datetime    %Datetime;     #IMPLIED  -- date and time of change --
-  >
-
-<!--=================== Lists ============================================-->
-
-<!-- definition lists - DT for term, DD for its definition -->
-
-<!ELEMENT DL - - (DT|DD)+              -- definition list -->
-<!ATTLIST DL
-  %attrs;                              -- %coreattrs, %i18n, %events --
-  >
-
-<!ELEMENT DT - O (%inline;)*           -- definition term -->
-<!ELEMENT DD - O (%flow;)*             -- definition description -->
-<!ATTLIST (DT|DD)
-  %attrs;                              -- %coreattrs, %i18n, %events --
-  >
-
-
-<!ELEMENT OL - - (LI)+                 -- ordered list -->
-<!ATTLIST OL
-  %attrs;                              -- %coreattrs, %i18n, %events --
-  >
-
-<!-- Unordered Lists (UL) bullet styles -->
-<!ELEMENT UL - - (LI)+                 -- unordered list -->
-<!ATTLIST UL
-  %attrs;                              -- %coreattrs, %i18n, %events --
-  >
-
-
-
-<!ELEMENT LI - O (%flow;)*             -- list item -->
-<!ATTLIST LI
-  %attrs;                              -- %coreattrs, %i18n, %events --
-  >
-
-<!--================ Forms ===============================================-->
-<!ELEMENT FORM - - (%block;|SCRIPT)+ -(FORM) -- interactive form -->
-<!ATTLIST FORM
-  %attrs;                              -- %coreattrs, %i18n, %events --
-  action      %URI;          #REQUIRED -- server-side form handler --
-  method      (GET|POST)     GET       -- HTTP method used to submit the form--
-  enctype     %ContentType;  "application/x-www-form-urlencoded"
-  accept      %ContentTypes; #IMPLIED  -- list of MIME types for file upload --
-  name        CDATA          #IMPLIED  -- name of form for scripting --
-  onsubmit    %Script;       #IMPLIED  -- the form was submitted --
-  onreset     %Script;       #IMPLIED  -- the form was reset --
-  accept-charset %Charsets;  #IMPLIED  -- list of supported charsets --
-  >
-
-<!-- Each label must not contain more than ONE field -->
-<!ELEMENT LABEL - - (%inline;)* -(LABEL) -- form field label text -->
-<!ATTLIST LABEL
-  %attrs;                              -- %coreattrs, %i18n, %events --
-  for         IDREF          #IMPLIED  -- matches field ID value --
-  accesskey   %Character;    #IMPLIED  -- accessibility key character --
-  onfocus     %Script;       #IMPLIED  -- the element got the focus --
-  onblur      %Script;       #IMPLIED  -- the element lost the focus --
-  >
-
-<!ENTITY % InputType
-  "(TEXT | PASSWORD | CHECKBOX |
-    RADIO | SUBMIT | RESET |
-    FILE | HIDDEN | IMAGE | BUTTON)"
-   >
-
-<!-- attribute name required for all but submit and reset -->
-<!ELEMENT INPUT - O EMPTY              -- form control -->
-<!ATTLIST INPUT
-  %attrs;                              -- %coreattrs, %i18n, %events --
-  type        %InputType;    TEXT      -- what kind of widget is needed --
-  name        CDATA          #IMPLIED  -- submit as part of form --
-  value       CDATA          #IMPLIED  -- Specify for radio buttons and checkboxes --
-  checked     (checked)      #IMPLIED  -- for radio buttons and check boxes --
-  disabled    (disabled)     #IMPLIED  -- unavailable in this context --
-  readonly    (readonly)     #IMPLIED  -- for text and passwd --
-  size        CDATA          #IMPLIED  -- specific to each type of field --
-  maxlength   NUMBER         #IMPLIED  -- max chars for text fields --
-  src         %URI;          #IMPLIED  -- for fields with images --
-  alt         CDATA          #IMPLIED  -- short description --
-  usemap      %URI;          #IMPLIED  -- use client-side image map --
-  ismap       (ismap)        #IMPLIED  -- use server-side image map --
-  tabindex    NUMBER         #IMPLIED  -- position in tabbing order --
-  accesskey   %Character;    #IMPLIED  -- accessibility key character --
-  onfocus     %Script;       #IMPLIED  -- the element got the focus --
-  onblur      %Script;       #IMPLIED  -- the element lost the focus --
-  onselect    %Script;       #IMPLIED  -- some text was selected --
-  onchange    %Script;       #IMPLIED  -- the element value was changed --
-  accept      %ContentTypes; #IMPLIED  -- list of MIME types for file upload --
-  %reserved;                           -- reserved for possible future use --
-  >
-
-<!ELEMENT SELECT - - (OPTGROUP|OPTION)+ -- option selector -->
-<!ATTLIST SELECT
-  %attrs;                              -- %coreattrs, %i18n, %events --
-  name        CDATA          #IMPLIED  -- field name --
-  size        NUMBER         #IMPLIED  -- rows visible --
-  multiple    (multiple)     #IMPLIED  -- default is single selection --
-  disabled    (disabled)     #IMPLIED  -- unavailable in this context --
-  tabindex    NUMBER         #IMPLIED  -- position in tabbing order --
-  onfocus     %Script;       #IMPLIED  -- the element got the focus --
-  onblur      %Script;       #IMPLIED  -- the element lost the focus --
-  onchange    %Script;       #IMPLIED  -- the element value was changed --
-  %reserved;                           -- reserved for possible future use --
-  >
-
-<!ELEMENT OPTGROUP - - (OPTION)+ -- option group -->
-<!ATTLIST OPTGROUP
-  %attrs;                              -- %coreattrs, %i18n, %events --
-  disabled    (disabled)     #IMPLIED  -- unavailable in this context --
-  label       %Text;         #REQUIRED -- for use in hierarchical menus --
-  >
-
-<!ELEMENT OPTION - O (#PCDATA)         -- selectable choice -->
-<!ATTLIST OPTION
-  %attrs;                              -- %coreattrs, %i18n, %events --
-  selected    (selected)     #IMPLIED
-  disabled    (disabled)     #IMPLIED  -- unavailable in this context --
-  label       %Text;         #IMPLIED  -- for use in hierarchical menus --
-  value       CDATA          #IMPLIED  -- defaults to element content --
-  >
-
-<!ELEMENT TEXTAREA - - (#PCDATA)       -- multi-line text field -->
-<!ATTLIST TEXTAREA
-  %attrs;                              -- %coreattrs, %i18n, %events --
-  name        CDATA          #IMPLIED
-  rows        NUMBER         #REQUIRED
-  cols        NUMBER         #REQUIRED
-  disabled    (disabled)     #IMPLIED  -- unavailable in this context --
-  readonly    (readonly)     #IMPLIED
-  tabindex    NUMBER         #IMPLIED  -- position in tabbing order --
-  accesskey   %Character;    #IMPLIED  -- accessibility key character --
-  onfocus     %Script;       #IMPLIED  -- the element got the focus --
-  onblur      %Script;       #IMPLIED  -- the element lost the focus --
-  onselect    %Script;       #IMPLIED  -- some text was selected --
-  onchange    %Script;       #IMPLIED  -- the element value was changed --
-  %reserved;                           -- reserved for possible future use --
-  >
-
-<!--
-  #PCDATA is to solve the mixed content problem,
-  per specification only whitespace is allowed there!
- -->
-<!ELEMENT FIELDSET - - (#PCDATA,LEGEND,(%flow;)*) -- form control group -->
-<!ATTLIST FIELDSET
-  %attrs;                              -- %coreattrs, %i18n, %events --
-  >
-
-<!ELEMENT LEGEND - - (%inline;)*       -- fieldset legend -->
-
-<!ATTLIST LEGEND
-  %attrs;                              -- %coreattrs, %i18n, %events --
-  accesskey   %Character;    #IMPLIED  -- accessibility key character --
-  >
-
-<!ELEMENT BUTTON - -
-     (%flow;)* -(A|%formctrl;|FORM|FIELDSET)
-     -- push button -->
-<!ATTLIST BUTTON
-  %attrs;                              -- %coreattrs, %i18n, %events --
-  name        CDATA          #IMPLIED
-  value       CDATA          #IMPLIED  -- sent to server when submitted --
-  type        (button|submit|reset) submit -- for use as form button --
-  disabled    (disabled)     #IMPLIED  -- unavailable in this context --
-  tabindex    NUMBER         #IMPLIED  -- position in tabbing order --
-  accesskey   %Character;    #IMPLIED  -- accessibility key character --
-  onfocus     %Script;       #IMPLIED  -- the element got the focus --
-  onblur      %Script;       #IMPLIED  -- the element lost the focus --
-  %reserved;                           -- reserved for possible future use --
-  >
-
-<!--======================= Tables =======================================-->
-
-<!-- IETF HTML table standard, see [RFC1942] -->
-
-<!--
- The BORDER attribute sets the thickness of the frame around the
- table. The default units are screen pixels.
-
- The FRAME attribute specifies which parts of the frame around
- the table should be rendered. The values are not the same as
- CALS to avoid a name clash with the VALIGN attribute.
-
- The value "border" is included for backwards compatibility with
- <TABLE BORDER> which yields frame=border and border=implied
- For <TABLE BORDER=1> you get border=1 and frame=implied. In this
- case, it is appropriate to treat this as frame=border for backwards
- compatibility with deployed browsers.
--->
-<!ENTITY % TFrame "(void|above|below|hsides|lhs|rhs|vsides|box|border)">
-
-<!--
- The RULES attribute defines which rules to draw between cells:
-
- If RULES is absent then assume:
-     "none" if BORDER is absent or BORDER=0 otherwise "all"
--->
-
-<!ENTITY % TRules "(none | groups | rows | cols | all)">
-  
-<!-- horizontal placement of table relative to document -->
-<!ENTITY % TAlign "(left|center|right)">
-
-<!-- horizontal alignment attributes for cell contents -->
-<!ENTITY % cellhalign
-  "align      (left|center|right|justify|char) #IMPLIED
-   char       %Character;    #IMPLIED  -- alignment char, e.g. char=':' --
-   charoff    %Length;       #IMPLIED  -- offset for alignment char --"
-  >
-
-<!-- vertical alignment attributes for cell contents -->
-<!ENTITY % cellvalign
-  "valign     (top|middle|bottom|baseline) #IMPLIED"
-  >
-
-<!ELEMENT TABLE - -
-     (CAPTION?, (COL*|COLGROUP*), THEAD?, TFOOT?, TBODY+)>
-<!ELEMENT CAPTION  - - (%inline;)*     -- table caption -->
-<!ELEMENT THEAD    - O (TR)+           -- table header -->
-<!ELEMENT TFOOT    - O (TR)+           -- table footer -->
-<!ELEMENT TBODY    O O (TR)+           -- table body -->
-<!ELEMENT COLGROUP - O (COL)*          -- table column group -->
-<!ELEMENT COL      - O EMPTY           -- table column -->
-<!ELEMENT TR       - O (TH|TD)+        -- table row -->
-<!ELEMENT (TH|TD)  - O (%flow;)*       -- table header cell, table data cell-->
-
-<!ATTLIST TABLE                        -- table element --
-  %attrs;                              -- %coreattrs, %i18n, %events --
-  summary     %Text;         #IMPLIED  -- purpose/structure for speech output--
-  width       %Length;       #IMPLIED  -- table width --
-  border      %Pixels;       #IMPLIED  -- controls frame width around table --
-  frame       %TFrame;       #IMPLIED  -- which parts of frame to render --
-  rules       %TRules;       #IMPLIED  -- rulings between rows and cols --
-  cellspacing %Length;       #IMPLIED  -- spacing between cells --
-  cellpadding %Length;       #IMPLIED  -- spacing within cells --
-  %reserved;                           -- reserved for possible future use --
-  datapagesize CDATA         #IMPLIED  -- reserved for possible future use --
-  >
-
-
-<!ATTLIST CAPTION
-  %attrs;                              -- %coreattrs, %i18n, %events --
-  >
-
-<!--
-COLGROUP groups a set of COL elements. It allows you to group
-several semantically related columns together.
--->
-<!ATTLIST COLGROUP
-  %attrs;                              -- %coreattrs, %i18n, %events --
-  span        NUMBER         1         -- default number of columns in group --
-  width       %MultiLength;  #IMPLIED  -- default width for enclosed COLs --
-  %cellhalign;                         -- horizontal alignment in cells --
-  %cellvalign;                         -- vertical alignment in cells --
-  >
-
-<!--
- COL elements define the alignment properties for cells in
- one or more columns.
-
- The WIDTH attribute specifies the width of the columns, e.g.
-
-     width=64        width in screen pixels
-     width=0.5*      relative width of 0.5
-
- The SPAN attribute causes the attributes of one
- COL element to apply to more than one column.
--->
-<!ATTLIST COL                          -- column groups and properties --
-  %attrs;                              -- %coreattrs, %i18n, %events --
-  span        NUMBER         1         -- COL attributes affect N columns --
-  width       %MultiLength;  #IMPLIED  -- column width specification --
-  %cellhalign;                         -- horizontal alignment in cells --
-  %cellvalign;                         -- vertical alignment in cells --
-  >
-
-<!--
-    Use THEAD to duplicate headers when breaking table
-    across page boundaries, or for static headers when
-    TBODY sections are rendered in scrolling panel.
-
-    Use TFOOT to duplicate footers when breaking table
-    across page boundaries, or for static footers when
-    TBODY sections are rendered in scrolling panel.
-
-    Use multiple TBODY sections when rules are needed
-    between groups of table rows.
--->
-<!ATTLIST (THEAD|TBODY|TFOOT)          -- table section --
-  %attrs;                              -- %coreattrs, %i18n, %events --
-  %cellhalign;                         -- horizontal alignment in cells --
-  %cellvalign;                         -- vertical alignment in cells --
-  >
-
-<!ATTLIST TR                           -- table row --
-  %attrs;                              -- %coreattrs, %i18n, %events --
-  %cellhalign;                         -- horizontal alignment in cells --
-  %cellvalign;                         -- vertical alignment in cells --
-  >
-
-
-<!-- Scope is simpler than headers attribute for common tables -->
-<!ENTITY % Scope "(row|col|rowgroup|colgroup)">
-
-<!-- TH is for headers, TD for data, but for cells acting as both use TD -->
-<!ATTLIST (TH|TD)                      -- header or data cell --
-  %attrs;                              -- %coreattrs, %i18n, %events --
-  abbr        %Text;         #IMPLIED  -- abbreviation for header cell --
-  axis        CDATA          #IMPLIED  -- comma-separated list of related headers--
-  headers     IDREFS         #IMPLIED  -- list of id's for header cells --
-  scope       %Scope;        #IMPLIED  -- scope covered by header cells --
-  rowspan     NUMBER         1         -- number of rows spanned by cell --
-  colspan     NUMBER         1         -- number of cols spanned by cell --
-  %cellhalign;                         -- horizontal alignment in cells --
-  %cellvalign;                         -- vertical alignment in cells --
-  >
-
-
-<!--================ Document Head =======================================-->
-<!-- %head.misc; defined earlier on as "SCRIPT|STYLE|META|LINK|OBJECT" -->
-<!ENTITY % head.content "TITLE & BASE?">
-
-<!ELEMENT HEAD O O (%head.content;) +(%head.misc;) -- document head -->
-<!ATTLIST HEAD
-  %i18n;                               -- lang, dir --
-  profile     %URI;          #IMPLIED  -- named dictionary of meta info --
-  >
-
-<!-- The TITLE element is not considered part of the flow of text.
-       It should be displayed, for example as the page header or
-       window title. Exactly one title is required per document.
-    -->
-<!ELEMENT TITLE - - (#PCDATA) -(%head.misc;) -- document title -->
-<!ATTLIST TITLE %i18n>
-
-
-<!ELEMENT BASE - O EMPTY               -- document base URI -->
-<!ATTLIST BASE
-  href        %URI;          #REQUIRED -- URI that acts as base URI --
-  >
-
-<!ELEMENT META - O EMPTY               -- generic metainformation -->
-<!ATTLIST META
-  %i18n;                               -- lang, dir, for use with content --
-  http-equiv  NAME           #IMPLIED  -- HTTP response header name  --
-  name        NAME           #IMPLIED  -- metainformation name --
-  content     CDATA          #REQUIRED -- associated information --
-  scheme      CDATA          #IMPLIED  -- select form of content --
-  >
-
-<!ELEMENT STYLE - - %StyleSheet        -- style info -->
-<!ATTLIST STYLE
-  %i18n;                               -- lang, dir, for use with title --
-  type        %ContentType;  #REQUIRED -- content type of style language --
-  media       %MediaDesc;    #IMPLIED  -- designed for use with these media --
-  title       %Text;         #IMPLIED  -- advisory title --
-  >
-
-<!ELEMENT SCRIPT - - %Script;          -- script statements -->
-<!ATTLIST SCRIPT
-  charset     %Charset;      #IMPLIED  -- char encoding of linked resource --
-  type        %ContentType;  #REQUIRED -- content type of script language --
-  src         %URI;          #IMPLIED  -- URI for an external script --
-  defer       (defer)        #IMPLIED  -- UA may defer execution of script --
-  event       CDATA          #IMPLIED  -- reserved for possible future use --
-  for         %URI;          #IMPLIED  -- reserved for possible future use --
-  >
-
-<!ELEMENT NOSCRIPT - - (%block;)+
-  -- alternate content container for non script-based rendering -->
-<!ATTLIST NOSCRIPT
-  %attrs;                              -- %coreattrs, %i18n, %events --
-  >
-
-<!--================ Document Structure ==================================-->
-<!ENTITY % html.content "HEAD, BODY">
-
-<!ELEMENT HTML O O (%html.content;)    -- document root element -->
-<!ATTLIST HTML
-  %i18n;                               -- lang, dir --
-  >
diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/examples/switch-bench.js b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/examples/switch-bench.js
deleted file mode 100644
index 4d3cf14..0000000
--- a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/examples/switch-bench.js
+++ /dev/null
@@ -1,45 +0,0 @@
-#!/usr/local/bin/node-bench
-
-var Promise = require("events").Promise;
-
-var xml = require("posix").cat("test.xml").wait(),
-  path = require("path"),
-  sax = require("../lib/sax"),
-  saxT = require("../lib/sax-trampoline"),
-  
-  parser = sax.parser(false, {trim:true}),
-  parserT = saxT.parser(false, {trim:true}),
-  
-  sys = require("sys");
-
-
-var count = exports.stepsPerLap = 500,
-  l = xml.length,
-  runs = 0;
-exports.countPerLap = 1000;
-exports.compare = {
-  "switch" : function () {
-    // sys.debug("switch runs: "+runs++);
-    // for (var x = 0; x < l; x += 1000) {
-    //   parser.write(xml.substr(x, 1000))
-    // }
-    // for (var i = 0; i < count; i ++) {
-      parser.write(xml);
-      parser.close();
-    // }
-    // done();
-  },
-  trampoline : function () {
-    // sys.debug("trampoline runs: "+runs++);
-    // for (var x = 0; x < l; x += 1000) {
-    //   parserT.write(xml.substr(x, 1000))
-    // }
-    // for (var i = 0; i < count; i ++) {
-      parserT.write(xml);
-      parserT.close();
-    // }
-    // done();
-  },
-};
-
-sys.debug("rock and roll...");
\ No newline at end of file
diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/examples/test.html b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/examples/test.html
deleted file mode 100644
index 61f8f1a..0000000
--- a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/examples/test.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<!doctype html>
-
-<html lang="en">
-<head>
-	<title>testing the parser</title>
-</head>
-<body>
-
-<p>hello
-
-<script>
-
-</script>
-</body>
-</html>
diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/examples/test.xml b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/examples/test.xml
deleted file mode 100644
index 801292d..0000000
--- a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/examples/test.xml
+++ /dev/null
@@ -1,1254 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE RootElement [
-	<!ENTITY e SYSTEM "001.ent">
-]>
-<RootElement param="value">
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-    <FirstElement>
-        Some Text
-    </FirstElement>
-    <?some_pi some_attr="some_value"?>
-    <!-- this is a comment -- but this isnt part of the comment -->
-    <!-- this is a comment == and this is a part of the comment -->
-    <!-- this is a comment > and this is also part of the thing -->
-    <!invalid comment>
-    <![CDATA[ this is random stuff. & and < and > are ok in here. ]]>
-    <SecondElement param2="something">
-        Pre-Text &amp; <Inline>Inlined text</Inline> Post-text.
-        &#xF8FF;
-    </SecondElement>
-</RootElement>
\ No newline at end of file
diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/lib/sax.js b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/lib/sax.js
deleted file mode 100644
index 17fb08e..0000000
--- a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/lib/sax.js
+++ /dev/null
@@ -1,1006 +0,0 @@
-// wrapper for non-node envs
-;(function (sax) {
-
-sax.parser = function (strict, opt) { return new SAXParser(strict, opt) }
-sax.SAXParser = SAXParser
-sax.SAXStream = SAXStream
-sax.createStream = createStream
-
-// When we pass the MAX_BUFFER_LENGTH position, start checking for buffer overruns.
-// When we check, schedule the next check for MAX_BUFFER_LENGTH - (max(buffer lengths)),
-// since that's the earliest that a buffer overrun could occur.  This way, checks are
-// as rare as required, but as often as necessary to ensure never crossing this bound.
-// Furthermore, buffers are only tested at most once per write(), so passing a very
-// large string into write() might have undesirable effects, but this is manageable by
-// the caller, so it is assumed to be safe.  Thus, a call to write() may, in the extreme
-// edge case, result in creating at most one complete copy of the string passed in.
-// Set to Infinity to have unlimited buffers.
-sax.MAX_BUFFER_LENGTH = 64 * 1024
-
-var buffers = [
-  "comment", "sgmlDecl", "textNode", "tagName", "doctype",
-  "procInstName", "procInstBody", "entity", "attribName",
-  "attribValue", "cdata", "script"
-]
-
-sax.EVENTS = // for discoverability.
-  [ "text"
-  , "processinginstruction"
-  , "sgmldeclaration"
-  , "doctype"
-  , "comment"
-  , "attribute"
-  , "opentag"
-  , "closetag"
-  , "opencdata"
-  , "cdata"
-  , "closecdata"
-  , "error"
-  , "end"
-  , "ready"
-  , "script"
-  , "opennamespace"
-  , "closenamespace"
-  ]
-
-function SAXParser (strict, opt) {
-  if (!(this instanceof SAXParser)) return new SAXParser(strict, opt)
-
-  var parser = this
-  clearBuffers(parser)
-  parser.q = parser.c = ""
-  parser.bufferCheckPosition = sax.MAX_BUFFER_LENGTH
-  parser.opt = opt || {}
-  parser.tagCase = parser.opt.lowercasetags ? "toLowerCase" : "toUpperCase"
-  parser.tags = []
-  parser.closed = parser.closedRoot = parser.sawRoot = false
-  parser.tag = parser.error = null
-  parser.strict = !!strict
-  parser.noscript = !!(strict || parser.opt.noscript)
-  parser.state = S.BEGIN
-  parser.ENTITIES = Object.create(sax.ENTITIES)
-  parser.attribList = []
-
-  // namespaces form a prototype chain.
-  // it always points at the current tag,
-  // which protos to its parent tag.
-  if (parser.opt.xmlns) parser.ns = Object.create(rootNS)
-
-  // mostly just for error reporting
-  parser.position = parser.line = parser.column = 0
-  emit(parser, "onready")
-}
-
-if (!Object.create) Object.create = function (o) {
-  function f () { this.__proto__ = o }
-  f.prototype = o
-  return new f
-}
-
-if (!Object.getPrototypeOf) Object.getPrototypeOf = function (o) {
-  return o.__proto__
-}
-
-if (!Object.keys) Object.keys = function (o) {
-  var a = []
-  for (var i in o) if (o.hasOwnProperty(i)) a.push(i)
-  return a
-}
-
-function checkBufferLength (parser) {
-  var maxAllowed = Math.max(sax.MAX_BUFFER_LENGTH, 10)
-    , maxActual = 0
-  for (var i = 0, l = buffers.length; i < l; i ++) {
-    var len = parser[buffers[i]].length
-    if (len > maxAllowed) {
-      // Text/cdata nodes can get big, and since they're buffered,
-      // we can get here under normal conditions.
-      // Avoid issues by emitting the text node now,
-      // so at least it won't get any bigger.
-      switch (buffers[i]) {
-        case "textNode":
-          closeText(parser)
-        break
-
-        case "cdata":
-          emitNode(parser, "oncdata", parser.cdata)
-          parser.cdata = ""
-        break
-
-        case "script":
-          emitNode(parser, "onscript", parser.script)
-          parser.script = ""
-        break
-
-        default:
-          error(parser, "Max buffer length exceeded: "+buffers[i])
-      }
-    }
-    maxActual = Math.max(maxActual, len)
-  }
-  // schedule the next check for the earliest possible buffer overrun.
-  parser.bufferCheckPosition = (sax.MAX_BUFFER_LENGTH - maxActual)
-                             + parser.position
-}
-
-function clearBuffers (parser) {
-  for (var i = 0, l = buffers.length; i < l; i ++) {
-    parser[buffers[i]] = ""
-  }
-}
-
-SAXParser.prototype =
-  { end: function () { end(this) }
-  , write: write
-  , resume: function () { this.error = null; return this }
-  , close: function () { return this.write(null) }
-  , end: function () { return this.write(null) }
-  }
-
-try {
-  var Stream = require("stream").Stream
-} catch (ex) {
-  var Stream = function () {}
-}
-
-
-var streamWraps = sax.EVENTS.filter(function (ev) {
-  return ev !== "error" && ev !== "end"
-})
-
-function createStream (strict, opt) {
-  return new SAXStream(strict, opt)
-}
-
-function SAXStream (strict, opt) {
-  if (!(this instanceof SAXStream)) return new SAXStream(strict, opt)
-
-  Stream.apply(me)
-
-  this._parser = new SAXParser(strict, opt)
-  this.writable = true
-  this.readable = true
-
-
-  var me = this
-
-  this._parser.onend = function () {
-    me.emit("end")
-  }
-
-  this._parser.onerror = function (er) {
-    me.emit("error", er)
-
-    // if didn't throw, then means error was handled.
-    // go ahead and clear error, so we can write again.
-    me._parser.error = null
-  }
-
-  streamWraps.forEach(function (ev) {
-    Object.defineProperty(me, "on" + ev, {
-      get: function () { return me._parser["on" + ev] },
-      set: function (h) {
-        if (!h) {
-          me.removeAllListeners(ev)
-          return me._parser["on"+ev] = h
-        }
-        me.on(ev, h)
-      },
-      enumerable: true,
-      configurable: false
-    })
-  })
-}
-
-SAXStream.prototype = Object.create(Stream.prototype,
-  { constructor: { value: SAXStream } })
-
-SAXStream.prototype.write = function (data) {
-  this._parser.write(data.toString())
-  this.emit("data", data)
-  return true
-}
-
-SAXStream.prototype.end = function (chunk) {
-  if (chunk && chunk.length) this._parser.write(chunk.toString())
-  this._parser.end()
-  return true
-}
-
-SAXStream.prototype.on = function (ev, handler) {
-  var me = this
-  if (!me._parser["on"+ev] && streamWraps.indexOf(ev) !== -1) {
-    me._parser["on"+ev] = function () {
-      var args = arguments.length === 1 ? [arguments[0]]
-               : Array.apply(null, arguments)
-      args.splice(0, 0, ev)
-      me.emit.apply(me, args)
-    }
-  }
-
-  return Stream.prototype.on.call(me, ev, handler)
-}
-
-
-
-// character classes and tokens
-var whitespace = "\r\n\t "
-  // this really needs to be replaced with character classes.
-  // XML allows all manner of ridiculous numbers and digits.
-  , number = "0124356789"
-  , letter = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
-  // (Letter | "_" | ":")
-  , nameStart = letter+"_:"
-  , nameBody = nameStart+number+"-."
-  , quote = "'\""
-  , entity = number+letter+"#"
-  , attribEnd = whitespace + ">"
-  , CDATA = "[CDATA["
-  , DOCTYPE = "DOCTYPE"
-  , XML_NAMESPACE = "http://www.w3.org/XML/1998/namespace"
-  , XMLNS_NAMESPACE = "http://www.w3.org/2000/xmlns/"
-  , rootNS = { xml: XML_NAMESPACE, xmlns: XMLNS_NAMESPACE }
-
-// turn all the string character sets into character class objects.
-whitespace = charClass(whitespace)
-number = charClass(number)
-letter = charClass(letter)
-nameStart = charClass(nameStart)
-nameBody = charClass(nameBody)
-quote = charClass(quote)
-entity = charClass(entity)
-attribEnd = charClass(attribEnd)
-
-function charClass (str) {
-  return str.split("").reduce(function (s, c) {
-    s[c] = true
-    return s
-  }, {})
-}
-
-function is (charclass, c) {
-  return charclass[c]
-}
-
-function not (charclass, c) {
-  return !charclass[c]
-}
-
-var S = 0
-sax.STATE =
-{ BEGIN                     : S++
-, TEXT                      : S++ // general stuff
-, TEXT_ENTITY               : S++ // &amp and such.
-, OPEN_WAKA                 : S++ // <
-, SGML_DECL                 : S++ // <!BLARG
-, SGML_DECL_QUOTED          : S++ // <!BLARG foo "bar
-, DOCTYPE                   : S++ // <!DOCTYPE
-, DOCTYPE_QUOTED            : S++ // <!DOCTYPE "//blah
-, DOCTYPE_DTD               : S++ // <!DOCTYPE "//blah" [ ...
-, DOCTYPE_DTD_QUOTED        : S++ // <!DOCTYPE "//blah" [ "foo
-, COMMENT_STARTING          : S++ // <!-
-, COMMENT                   : S++ // <!--
-, COMMENT_ENDING            : S++ // <!-- blah -
-, COMMENT_ENDED             : S++ // <!-- blah --
-, CDATA                     : S++ // <![CDATA[ something
-, CDATA_ENDING              : S++ // ]
-, CDATA_ENDING_2            : S++ // ]]
-, PROC_INST                 : S++ // <?hi
-, PROC_INST_BODY            : S++ // <?hi there
-, PROC_INST_QUOTED          : S++ // <?hi "there
-, PROC_INST_ENDING          : S++ // <?hi "there" ?
-, OPEN_TAG                  : S++ // <strong
-, OPEN_TAG_SLASH            : S++ // <strong /
-, ATTRIB                    : S++ // <a
-, ATTRIB_NAME               : S++ // <a foo
-, ATTRIB_NAME_SAW_WHITE     : S++ // <a foo _
-, ATTRIB_VALUE              : S++ // <a foo=
-, ATTRIB_VALUE_QUOTED       : S++ // <a foo="bar
-, ATTRIB_VALUE_UNQUOTED     : S++ // <a foo=bar
-, ATTRIB_VALUE_ENTITY_Q     : S++ // <foo bar="&quot;"
-, ATTRIB_VALUE_ENTITY_U     : S++ // <foo bar=&quot;
-, CLOSE_TAG                 : S++ // </a
-, CLOSE_TAG_SAW_WHITE       : S++ // </a   >
-, SCRIPT                    : S++ // <script> ...
-, SCRIPT_ENDING             : S++ // <script> ... <
-}
-
-sax.ENTITIES =
-{ "apos" : "'"
-, "quot" : "\""
-, "amp"  : "&"
-, "gt"   : ">"
-, "lt"   : "<"
-}
-
-for (var S in sax.STATE) sax.STATE[sax.STATE[S]] = S
-
-// shorthand
-S = sax.STATE
-
-function emit (parser, event, data) {
-  parser[event] && parser[event](data)
-}
-
-function emitNode (parser, nodeType, data) {
-  if (parser.textNode) closeText(parser)
-  emit(parser, nodeType, data)
-}
-
-function closeText (parser) {
-  parser.textNode = textopts(parser.opt, parser.textNode)
-  if (parser.textNode) emit(parser, "ontext", parser.textNode)
-  parser.textNode = ""
-}
-
-function textopts (opt, text) {
-  if (opt.trim) text = text.trim()
-  if (opt.normalize) text = text.replace(/\s+/g, " ")
-  return text
-}
-
-function error (parser, er) {
-  closeText(parser)
-  er += "\nLine: "+parser.line+
-        "\nColumn: "+parser.column+
-        "\nChar: "+parser.c
-  er = new Error(er)
-  parser.error = er
-  emit(parser, "onerror", er)
-  return parser
-}
-
-function end (parser) {
-  if (parser.state !== S.TEXT) error(parser, "Unexpected end")
-  closeText(parser)
-  parser.c = ""
-  parser.closed = true
-  emit(parser, "onend")
-  SAXParser.call(parser, parser.strict, parser.opt)
-  return parser
-}
-
-function strictFail (parser, message) {
-  if (parser.strict) error(parser, message)
-}
-
-function newTag (parser) {
-  if (!parser.strict) parser.tagName = parser.tagName[parser.tagCase]()
-  var parent = parser.tags[parser.tags.length - 1] || parser
-    , tag = parser.tag = { name : parser.tagName, attributes : {} }
-
-  // will be overridden if tag contails an xmlns="foo" or xmlns:foo="bar"
-  if (parser.opt.xmlns) tag.ns = parent.ns
-  parser.attribList.length = 0
-}
-
-function qname (name) {
-  var i = name.indexOf(":")
-    , qualName = i < 0 ? [ "", name ] : name.split(":")
-    , prefix = qualName[0]
-    , local = qualName[1]
-
-  // <x "xmlns"="http://foo">
-  if (name === "xmlns") {
-    prefix = "xmlns"
-    local = ""
-  }
-
-  return { prefix: prefix, local: local }
-}
-
-function attrib (parser) {
-  if (parser.opt.xmlns) {
-    var qn = qname(parser.attribName)
-      , prefix = qn.prefix
-      , local = qn.local
-
-    if (prefix === "xmlns") {
-      // namespace binding attribute; push the binding into scope
-      if (local === "xml" && parser.attribValue !== XML_NAMESPACE) {
-        strictFail( parser
-                  , "xml: prefix must be bound to " + XML_NAMESPACE + "\n"
-                  + "Actual: " + parser.attribValue )
-      } else if (local === "xmlns" && parser.attribValue !== XMLNS_NAMESPACE) {
-        strictFail( parser
-                  , "xmlns: prefix must be bound to " + XMLNS_NAMESPACE + "\n"
-                  + "Actual: " + parser.attribValue )
-      } else {
-        var tag = parser.tag
-          , parent = parser.tags[parser.tags.length - 1] || parser
-        if (tag.ns === parent.ns) {
-          tag.ns = Object.create(parent.ns)
-        }
-        tag.ns[local] = parser.attribValue
-      }
-    }
-
-    // defer onattribute events until all attributes have been seen
-    // so any new bindings can take effect; preserve attribute order
-    // so deferred events can be emitted in document order
-    parser.attribList.push([parser.attribName, parser.attribValue])
-  } else {
-    // in non-xmlns mode, we can emit the event right away
-    parser.tag.attributes[parser.attribName] = parser.attribValue
-    emitNode( parser
-            , "onattribute"
-            , { name: parser.attribName
-              , value: parser.attribValue } )
-  }
-
-  parser.attribName = parser.attribValue = ""
-}
-
-function openTag (parser, selfClosing) {
-  if (parser.opt.xmlns) {
-    // emit namespace binding events
-    var tag = parser.tag
-
-    // add namespace info to tag
-    var qn = qname(parser.tagName)
-    tag.prefix = qn.prefix
-    tag.local = qn.local
-    tag.uri = tag.ns[qn.prefix] || qn.prefix
-
-    if (tag.prefix && !tag.uri) {
-      strictFail(parser, "Unbound namespace prefix: "
-                       + JSON.stringify(parser.tagName))
-    }
-
-    var parent = parser.tags[parser.tags.length - 1] || parser
-    if (tag.ns && parent.ns !== tag.ns) {
-      Object.keys(tag.ns).forEach(function (p) {
-        emitNode( parser
-                , "onopennamespace"
-                , { prefix: p , uri: tag.ns[p] } )
-      })
-    }
-
-    // handle deferred onattribute events
-    for (var i = 0, l = parser.attribList.length; i < l; i ++) {
-      var nv = parser.attribList[i]
-      var name = nv[0]
-        , value = nv[1]
-        , qualName = qname(name)
-        , prefix = qualName.prefix
-        , local = qualName.local
-        , uri = tag.ns[prefix] || ""
-        , a = { name: name
-              , value: value
-              , prefix: prefix
-              , local: local
-              , uri: uri
-              }
-
-      // if there's any attributes with an undefined namespace,
-      // then fail on them now.
-      if (prefix && prefix != "xmlns" && !uri) {
-        strictFail(parser, "Unbound namespace prefix: "
-                         + JSON.stringify(prefix))
-        a.uri = prefix
-      }
-      parser.tag.attributes[name] = a
-      emitNode(parser, "onattribute", a)
-    }
-    parser.attribList.length = 0
-  }
-
-  // process the tag
-  parser.sawRoot = true
-  parser.tags.push(parser.tag)
-  emitNode(parser, "onopentag", parser.tag)
-  if (!selfClosing) {
-    // special case for <script> in non-strict mode.
-    if (!parser.noscript && parser.tagName.toLowerCase() === "script") {
-      parser.state = S.SCRIPT
-    } else {
-      parser.state = S.TEXT
-    }
-    parser.tag = null
-    parser.tagName = ""
-  }
-  parser.attribName = parser.attribValue = ""
-  parser.attribList.length = 0
-}
-
-function closeTag (parser) {
-  if (!parser.tagName) {
-    strictFail(parser, "Weird empty close tag.")
-    parser.textNode += "</>"
-    parser.state = S.TEXT
-    return
-  }
-  // first make sure that the closing tag actually exists.
-  // <a><b></c></b></a> will close everything, otherwise.
-  var t = parser.tags.length
-  var tagName = parser.tagName
-  if (!parser.strict) tagName = tagName[parser.tagCase]()
-  var closeTo = tagName
-  while (t --) {
-    var close = parser.tags[t]
-    if (close.name !== closeTo) {
-      // fail the first time in strict mode
-      strictFail(parser, "Unexpected close tag")
-    } else break
-  }
-
-  // didn't find it.  we already failed for strict, so just abort.
-  if (t < 0) {
-    strictFail(parser, "Unmatched closing tag: "+parser.tagName)
-    parser.textNode += "</" + parser.tagName + ">"
-    parser.state = S.TEXT
-    return
-  }
-  parser.tagName = tagName
-  var s = parser.tags.length
-  while (s --> t) {
-    var tag = parser.tag = parser.tags.pop()
-    parser.tagName = parser.tag.name
-    emitNode(parser, "onclosetag", parser.tagName)
-
-    var x = {}
-    for (var i in tag.ns) x[i] = tag.ns[i]
-
-    var parent = parser.tags[parser.tags.length - 1] || parser
-    if (parser.opt.xmlns && tag.ns !== parent.ns) {
-      // remove namespace bindings introduced by tag
-      Object.keys(tag.ns).forEach(function (p) {
-        var n = tag.ns[p]
-        emitNode(parser, "onclosenamespace", { prefix: p, uri: n })
-      })
-    }
-  }
-  if (t === 0) parser.closedRoot = true
-  parser.tagName = parser.attribValue = parser.attribName = ""
-  parser.attribList.length = 0
-  parser.state = S.TEXT
-}
-
-function parseEntity (parser) {
-  var entity = parser.entity.toLowerCase()
-    , num
-    , numStr = ""
-  if (parser.ENTITIES[entity]) return parser.ENTITIES[entity]
-  if (entity.charAt(0) === "#") {
-    if (entity.charAt(1) === "x") {
-      entity = entity.slice(2)
-      num = parseInt(entity, 16)
-      numStr = num.toString(16)
-    } else {
-      entity = entity.slice(1)
-      num = parseInt(entity, 10)
-      numStr = num.toString(10)
-    }
-  }
-  entity = entity.replace(/^0+/, "")
-  if (numStr.toLowerCase() !== entity) {
-    strictFail(parser, "Invalid character entity")
-    return "&"+parser.entity + ";"
-  }
-  return String.fromCharCode(num)
-}
-
-function write (chunk) {
-  var parser = this
-  if (this.error) throw this.error
-  if (parser.closed) return error(parser,
-    "Cannot write after close. Assign an onready handler.")
-  if (chunk === null) return end(parser)
-  var i = 0, c = ""
-  while (parser.c = c = chunk.charAt(i++)) {
-    parser.position ++
-    if (c === "\n") {
-      parser.line ++
-      parser.column = 0
-    } else parser.column ++
-    switch (parser.state) {
-
-      case S.BEGIN:
-        if (c === "<") parser.state = S.OPEN_WAKA
-        else if (not(whitespace,c)) {
-          // have to process this as a text node.
-          // weird, but happens.
-          strictFail(parser, "Non-whitespace before first tag.")
-          parser.textNode = c
-          parser.state = S.TEXT
-        }
-      continue
-
-      case S.TEXT:
-        if (parser.sawRoot && !parser.closedRoot) {
-          var starti = i-1
-          while (c && c!=="<" && c!=="&") {
-            c = chunk.charAt(i++)
-            if (c) {
-              parser.position ++
-              if (c === "\n") {
-                parser.line ++
-                parser.column = 0
-              } else parser.column ++
-            }
-          }
-          parser.textNode += chunk.substring(starti, i-1)
-        }
-        if (c === "<") parser.state = S.OPEN_WAKA
-        else {
-          if (not(whitespace, c) && (!parser.sawRoot || parser.closedRoot))
-            strictFail("Text data outside of root node.")
-          if (c === "&") parser.state = S.TEXT_ENTITY
-          else parser.textNode += c
-        }
-      continue
-
-      case S.SCRIPT:
-        // only non-strict
-        if (c === "<") {
-          parser.state = S.SCRIPT_ENDING
-        } else parser.script += c
-      continue
-
-      case S.SCRIPT_ENDING:
-        if (c === "/") {
-          emitNode(parser, "onscript", parser.script)
-          parser.state = S.CLOSE_TAG
-          parser.script = ""
-          parser.tagName = ""
-        } else {
-          parser.script += "<" + c
-          parser.state = S.SCRIPT
-        }
-      continue
-
-      case S.OPEN_WAKA:
-        // either a /, ?, !, or text is coming next.
-        if (c === "!") {
-          parser.state = S.SGML_DECL
-          parser.sgmlDecl = ""
-        } else if (is(whitespace, c)) {
-          // wait for it...
-        } else if (is(nameStart,c)) {
-          parser.startTagPosition = parser.position - 1
-          parser.state = S.OPEN_TAG
-          parser.tagName = c
-        } else if (c === "/") {
-          parser.startTagPosition = parser.position - 1
-          parser.state = S.CLOSE_TAG
-          parser.tagName = ""
-        } else if (c === "?") {
-          parser.state = S.PROC_INST
-          parser.procInstName = parser.procInstBody = ""
-        } else {
-          strictFail(parser, "Unencoded <")
-          parser.textNode += "<" + c
-          parser.state = S.TEXT
-        }
-      continue
-
-      case S.SGML_DECL:
-        if ((parser.sgmlDecl+c).toUpperCase() === CDATA) {
-          emitNode(parser, "onopencdata")
-          parser.state = S.CDATA
-          parser.sgmlDecl = ""
-          parser.cdata = ""
-        } else if (parser.sgmlDecl+c === "--") {
-          parser.state = S.COMMENT
-          parser.comment = ""
-          parser.sgmlDecl = ""
-        } else if ((parser.sgmlDecl+c).toUpperCase() === DOCTYPE) {
-          parser.state = S.DOCTYPE
-          if (parser.doctype || parser.sawRoot) strictFail(parser,
-            "Inappropriately located doctype declaration")
-          parser.doctype = ""
-          parser.sgmlDecl = ""
-        } else if (c === ">") {
-          emitNode(parser, "onsgmldeclaration", parser.sgmlDecl)
-          parser.sgmlDecl = ""
-          parser.state = S.TEXT
-        } else if (is(quote, c)) {
-          parser.state = S.SGML_DECL_QUOTED
-          parser.sgmlDecl += c
-        } else parser.sgmlDecl += c
-      continue
-
-      case S.SGML_DECL_QUOTED:
-        if (c === parser.q) {
-          parser.state = S.SGML_DECL
-          parser.q = ""
-        }
-        parser.sgmlDecl += c
-      continue
-
-      case S.DOCTYPE:
-        if (c === ">") {
-          parser.state = S.TEXT
-          emitNode(parser, "ondoctype", parser.doctype)
-          parser.doctype = true // just remember that we saw it.
-        } else {
-          parser.doctype += c
-          if (c === "[") parser.state = S.DOCTYPE_DTD
-          else if (is(quote, c)) {
-            parser.state = S.DOCTYPE_QUOTED
-            parser.q = c
-          }
-        }
-      continue
-
-      case S.DOCTYPE_QUOTED:
-        parser.doctype += c
-        if (c === parser.q) {
-          parser.q = ""
-          parser.state = S.DOCTYPE
-        }
-      continue
-
-      case S.DOCTYPE_DTD:
-        parser.doctype += c
-        if (c === "]") parser.state = S.DOCTYPE
-        else if (is(quote,c)) {
-          parser.state = S.DOCTYPE_DTD_QUOTED
-          parser.q = c
-        }
-      continue
-
-      case S.DOCTYPE_DTD_QUOTED:
-        parser.doctype += c
-        if (c === parser.q) {
-          parser.state = S.DOCTYPE_DTD
-          parser.q = ""
-        }
-      continue
-
-      case S.COMMENT:
-        if (c === "-") parser.state = S.COMMENT_ENDING
-        else parser.comment += c
-      continue
-
-      case S.COMMENT_ENDING:
-        if (c === "-") {
-          parser.state = S.COMMENT_ENDED
-          parser.comment = textopts(parser.opt, parser.comment)
-          if (parser.comment) emitNode(parser, "oncomment", parser.comment)
-          parser.comment = ""
-        } else {
-          parser.comment += "-" + c
-          parser.state = S.COMMENT
-        }
-      continue
-
-      case S.COMMENT_ENDED:
-        if (c !== ">") {
-          strictFail(parser, "Malformed comment")
-          // allow <!-- blah -- bloo --> in non-strict mode,
-          // which is a comment of " blah -- bloo "
-          parser.comment += "--" + c
-          parser.state = S.COMMENT
-        } else parser.state = S.TEXT
-      continue
-
-      case S.CDATA:
-        if (c === "]") parser.state = S.CDATA_ENDING
-        else parser.cdata += c
-      continue
-
-      case S.CDATA_ENDING:
-        if (c === "]") parser.state = S.CDATA_ENDING_2
-        else {
-          parser.cdata += "]" + c
-          parser.state = S.CDATA
-        }
-      continue
-
-      case S.CDATA_ENDING_2:
-        if (c === ">") {
-          if (parser.cdata) emitNode(parser, "oncdata", parser.cdata)
-          emitNode(parser, "onclosecdata")
-          parser.cdata = ""
-          parser.state = S.TEXT
-        } else if (c === "]") {
-          parser.cdata += "]"
-        } else {
-          parser.cdata += "]]" + c
-          parser.state = S.CDATA
-        }
-      continue
-
-      case S.PROC_INST:
-        if (c === "?") parser.state = S.PROC_INST_ENDING
-        else if (is(whitespace, c)) parser.state = S.PROC_INST_BODY
-        else parser.procInstName += c
-      continue
-
-      case S.PROC_INST_BODY:
-        if (!parser.procInstBody && is(whitespace, c)) continue
-        else if (c === "?") parser.state = S.PROC_INST_ENDING
-        else if (is(quote, c)) {
-          parser.state = S.PROC_INST_QUOTED
-          parser.q = c
-          parser.procInstBody += c
-        } else parser.procInstBody += c
-      continue
-
-      case S.PROC_INST_ENDING:
-        if (c === ">") {
-          emitNode(parser, "onprocessinginstruction", {
-            name : parser.procInstName,
-            body : parser.procInstBody
-          })
-          parser.procInstName = parser.procInstBody = ""
-          parser.state = S.TEXT
-        } else {
-          parser.procInstBody += "?" + c
-          parser.state = S.PROC_INST_BODY
-        }
-      continue
-
-      case S.PROC_INST_QUOTED:
-        parser.procInstBody += c
-        if (c === parser.q) {
-          parser.state = S.PROC_INST_BODY
-          parser.q = ""
-        }
-      continue
-
-      case S.OPEN_TAG:
-        if (is(nameBody, c)) parser.tagName += c
-        else {
-          newTag(parser)
-          if (c === ">") openTag(parser)
-          else if (c === "/") parser.state = S.OPEN_TAG_SLASH
-          else {
-            if (not(whitespace, c)) strictFail(
-              parser, "Invalid character in tag name")
-            parser.state = S.ATTRIB
-          }
-        }
-      continue
-
-      case S.OPEN_TAG_SLASH:
-        if (c === ">") {
-          openTag(parser, true)
-          closeTag(parser)
-        } else {
-          strictFail(parser, "Forward-slash in opening tag not followed by >")
-          parser.state = S.ATTRIB
-        }
-      continue
-
-      case S.ATTRIB:
-        // haven't read the attribute name yet.
-        if (is(whitespace, c)) continue
-        else if (c === ">") openTag(parser)
-        else if (c === "/") parser.state = S.OPEN_TAG_SLASH
-        else if (is(nameStart, c)) {
-          parser.attribName = c
-          parser.attribValue = ""
-          parser.state = S.ATTRIB_NAME
-        } else strictFail(parser, "Invalid attribute name")
-      continue
-
-      case S.ATTRIB_NAME:
-        if (c === "=") parser.state = S.ATTRIB_VALUE
-        else if (is(whitespace, c)) parser.state = S.ATTRIB_NAME_SAW_WHITE
-        else if (is(nameBody, c)) parser.attribName += c
-        else strictFail(parser, "Invalid attribute name")
-      continue
-
-      case S.ATTRIB_NAME_SAW_WHITE:
-        if (c === "=") parser.state = S.ATTRIB_VALUE
-        else if (is(whitespace, c)) continue
-        else {
-          strictFail(parser, "Attribute without value")
-          parser.tag.attributes[parser.attribName] = ""
-          parser.attribValue = ""
-          emitNode(parser, "onattribute",
-                   { name : parser.attribName, value : "" })
-          parser.attribName = ""
-          if (c === ">") openTag(parser)
-          else if (is(nameStart, c)) {
-            parser.attribName = c
-            parser.state = S.ATTRIB_NAME
-          } else {
-            strictFail(parser, "Invalid attribute name")
-            parser.state = S.ATTRIB
-          }
-        }
-      continue
-
-      case S.ATTRIB_VALUE:
-        if (is(whitespace, c)) continue
-        else if (is(quote, c)) {
-          parser.q = c
-          parser.state = S.ATTRIB_VALUE_QUOTED
-        } else {
-          strictFail(parser, "Unquoted attribute value")
-          parser.state = S.ATTRIB_VALUE_UNQUOTED
-          parser.attribValue = c
-        }
-      continue
-
-      case S.ATTRIB_VALUE_QUOTED:
-        if (c !== parser.q) {
-          if (c === "&") parser.state = S.ATTRIB_VALUE_ENTITY_Q
-          else parser.attribValue += c
-          continue
-        }
-        attrib(parser)
-        parser.q = ""
-        parser.state = S.ATTRIB
-      continue
-
-      case S.ATTRIB_VALUE_UNQUOTED:
-        if (not(attribEnd,c)) {
-          if (c === "&") parser.state = S.ATTRIB_VALUE_ENTITY_U
-          else parser.attribValue += c
-          continue
-        }
-        attrib(parser)
-        if (c === ">") openTag(parser)
-        else parser.state = S.ATTRIB
-      continue
-
-      case S.CLOSE_TAG:
-        if (!parser.tagName) {
-          if (is(whitespace, c)) continue
-          else if (not(nameStart, c)) strictFail(parser,
-            "Invalid tagname in closing tag.")
-          else parser.tagName = c
-        }
-        else if (c === ">") closeTag(parser)
-        else if (is(nameBody, c)) parser.tagName += c
-        else {
-          if (not(whitespace, c)) strictFail(parser,
-            "Invalid tagname in closing tag")
-          parser.state = S.CLOSE_TAG_SAW_WHITE
-        }
-      continue
-
-      case S.CLOSE_TAG_SAW_WHITE:
-        if (is(whitespace, c)) continue
-        if (c === ">") closeTag(parser)
-        else strictFail("Invalid characters in closing tag")
-      continue
-
-      case S.TEXT_ENTITY:
-      case S.ATTRIB_VALUE_ENTITY_Q:
-      case S.ATTRIB_VALUE_ENTITY_U:
-        switch(parser.state) {
-          case S.TEXT_ENTITY:
-            var returnState = S.TEXT, buffer = "textNode"
-          break
-
-          case S.ATTRIB_VALUE_ENTITY_Q:
-            var returnState = S.ATTRIB_VALUE_QUOTED, buffer = "attribValue"
-          break
-
-          case S.ATTRIB_VALUE_ENTITY_U:
-            var returnState = S.ATTRIB_VALUE_UNQUOTED, buffer = "attribValue"
-          break
-        }
-        if (c === ";") {
-          parser[buffer] += parseEntity(parser)
-          parser.entity = ""
-          parser.state = returnState
-        }
-        else if (is(entity, c)) parser.entity += c
-        else {
-          strictFail("Invalid character entity")
-          parser[buffer] += "&" + parser.entity + c
-          parser.entity = ""
-          parser.state = returnState
-        }
-      continue
-
-      default:
-        throw new Error(parser, "Unknown state: " + parser.state)
-    }
-  } // while
-  // cdata blocks can get very big under normal conditions. emit and move on.
-  // if (parser.state === S.CDATA && parser.cdata) {
-  //   emitNode(parser, "oncdata", parser.cdata)
-  //   parser.cdata = ""
-  // }
-  if (parser.position >= parser.bufferCheckPosition) checkBufferLength(parser)
-  return parser
-}
-
-})(typeof exports === "undefined" ? sax = {} : exports)
diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/package.json b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/package.json
deleted file mode 100644
index c3ab32c..0000000
--- a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/package.json
+++ /dev/null
@@ -1,89 +0,0 @@
-{
-  "name": "sax",
-  "description": "An evented streaming XML parser in JavaScript",
-  "author": {
-    "name": "Isaac Z. Schlueter",
-    "email": "i@izs.me",
-    "url": "http://blog.izs.me/"
-  },
-  "version": "0.3.5",
-  "main": "lib/sax.js",
-  "license": {
-    "type": "MIT",
-    "url": "https://raw.github.com/isaacs/sax-js/master/LICENSE"
-  },
-  "scripts": {
-    "test": "node test/index.js"
-  },
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/isaacs/sax-js.git"
-  },
-  "_npmUser": {
-    "name": "isaacs",
-    "email": "i@izs.me"
-  },
-  "_id": "sax@0.3.5",
-  "contributors": [
-    {
-      "name": "Isaac Z. Schlueter",
-      "email": "i@izs.me"
-    },
-    {
-      "name": "Stein Martin Hustad",
-      "email": "stein@hustad.com"
-    },
-    {
-      "name": "Mikeal Rogers",
-      "email": "mikeal.rogers@gmail.com"
-    },
-    {
-      "name": "Laurie Harper",
-      "email": "laurie@holoweb.net"
-    },
-    {
-      "name": "Jann Horn",
-      "email": "jann@Jann-PC.fritz.box"
-    },
-    {
-      "name": "Elijah Insua",
-      "email": "tmpvar@gmail.com"
-    },
-    {
-      "name": "Henry Rawas",
-      "email": "henryr@schakra.com"
-    },
-    {
-      "name": "Justin Makeig",
-      "email": "jmpublic@makeig.com"
-    }
-  ],
-  "dependencies": {},
-  "devDependencies": {},
-  "engines": {
-    "node": "*"
-  },
-  "_engineSupported": true,
-  "_npmVersion": "1.1.0-beta-7",
-  "_nodeVersion": "v0.6.7-pre",
-  "_defaultsLoaded": true,
-  "dist": {
-    "shasum": "88fcfc1f73c0c8bbd5b7c776b6d3f3501eed073d",
-    "tarball": "http://registry.npmjs.org/sax/-/sax-0.3.5.tgz"
-  },
-  "maintainers": [
-    {
-      "name": "isaacs",
-      "email": "i@izs.me"
-    }
-  ],
-  "directories": {},
-  "_shasum": "88fcfc1f73c0c8bbd5b7c776b6d3f3501eed073d",
-  "_from": "sax@0.3.5",
-  "_resolved": "https://registry.npmjs.org/sax/-/sax-0.3.5.tgz",
-  "bugs": {
-    "url": "https://github.com/isaacs/sax-js/issues"
-  },
-  "readme": "ERROR: No README data found!",
-  "homepage": "https://github.com/isaacs/sax-js"
-}
diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/buffer-overrun.js b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/buffer-overrun.js
deleted file mode 100644
index 8d12fac..0000000
--- a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/buffer-overrun.js
+++ /dev/null
@@ -1,25 +0,0 @@
-// set this really low so that I don't have to put 64 MB of xml in here.
-var sax = require("../lib/sax")
-var bl = sax.MAX_BUFFER_LENGTH
-sax.MAX_BUFFER_LENGTH = 5;
-
-require(__dirname).test({
-  expect : [
-    ["error", "Max buffer length exceeded: tagName\nLine: 0\nColumn: 15\nChar: "],
-    ["error", "Max buffer length exceeded: tagName\nLine: 0\nColumn: 30\nChar: "],
-    ["error", "Max buffer length exceeded: tagName\nLine: 0\nColumn: 45\nChar: "],
-    ["opentag", {
-     "name": "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ",
-     "attributes": {}
-    }],
-    ["text", "yo"],
-    ["closetag", "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ"]
-  ]
-}).write("<abcdefghijklmn")
-  .write("opqrstuvwxyzABC")
-  .write("DEFGHIJKLMNOPQR")
-  .write("STUVWXYZ>")
-  .write("yo")
-  .write("</abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ>")
-  .close();
-sax.MAX_BUFFER_LENGTH = bl
diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/cdata-chunked.js b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/cdata-chunked.js
deleted file mode 100644
index ccd5ee6..0000000
--- a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/cdata-chunked.js
+++ /dev/null
@@ -1,11 +0,0 @@
-
-require(__dirname).test({
-  expect : [
-    ["opentag", {"name": "R","attributes": {}}],
-    ["opencdata", undefined],
-    ["cdata", " this is character data  "],
-    ["closecdata", undefined],
-    ["closetag", "R"]
-  ]
-}).write("<r><![CDATA[ this is ").write("character data  ").write("]]></r>").close();
-
diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/cdata-end-split.js b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/cdata-end-split.js
deleted file mode 100644
index b41bd00..0000000
--- a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/cdata-end-split.js
+++ /dev/null
@@ -1,15 +0,0 @@
-
-require(__dirname).test({
-  expect : [
-    ["opentag", {"name": "R","attributes": {}}],
-    ["opencdata", undefined],
-    ["cdata", " this is "],
-    ["closecdata", undefined],
-    ["closetag", "R"]
-  ]
-})
-  .write("<r><![CDATA[ this is ]")
-  .write("]>")
-  .write("</r>")
-  .close();
-
diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/cdata-fake-end.js b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/cdata-fake-end.js
deleted file mode 100644
index 07aeac4..0000000
--- a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/cdata-fake-end.js
+++ /dev/null
@@ -1,28 +0,0 @@
-
-var p = require(__dirname).test({
-  expect : [
-    ["opentag", {"name": "R","attributes": {}}],
-    ["opencdata", undefined],
-    ["cdata", "[[[[[[[[]]]]]]]]"],
-    ["closecdata", undefined],
-    ["closetag", "R"]
-  ]
-})
-var x = "<r><![CDATA[[[[[[[[[]]]]]]]]]]></r>"
-for (var i = 0; i < x.length ; i ++) {
-  p.write(x.charAt(i))
-}
-p.close();
-
-
-var p2 = require(__dirname).test({
-  expect : [
-    ["opentag", {"name": "R","attributes": {}}],
-    ["opencdata", undefined],
-    ["cdata", "[[[[[[[[]]]]]]]]"],
-    ["closecdata", undefined],
-    ["closetag", "R"]
-  ]
-})
-var x = "<r><![CDATA[[[[[[[[[]]]]]]]]]]></r>"
-p2.write(x).close();
diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/cdata-multiple.js b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/cdata-multiple.js
deleted file mode 100644
index dab2015..0000000
--- a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/cdata-multiple.js
+++ /dev/null
@@ -1,15 +0,0 @@
-
-require(__dirname).test({
-  expect : [
-    ["opentag", {"name": "R","attributes": {}}],
-    ["opencdata", undefined],
-    ["cdata", " this is "],
-    ["closecdata", undefined],
-    ["opencdata", undefined],
-    ["cdata", "character data  "],
-    ["closecdata", undefined],
-    ["closetag", "R"]
-  ]
-}).write("<r><![CDATA[ this is ]]>").write("<![CDA").write("T").write("A[")
-  .write("character data  ").write("]]></r>").close();
-
diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/cdata.js b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/cdata.js
deleted file mode 100644
index 0f09cce..0000000
--- a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/cdata.js
+++ /dev/null
@@ -1,10 +0,0 @@
-require(__dirname).test({
-  xml : "<r><![CDATA[ this is character data  ]]></r>",
-  expect : [
-    ["opentag", {"name": "R","attributes": {}}],
-    ["opencdata", undefined],
-    ["cdata", " this is character data  "],
-    ["closecdata", undefined],
-    ["closetag", "R"]
-  ]
-});
diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/index.js b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/index.js
deleted file mode 100644
index d4e1ef4..0000000
--- a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/index.js
+++ /dev/null
@@ -1,86 +0,0 @@
-var globalsBefore = JSON.stringify(Object.keys(global))
-  , util = require("util")
-  , assert = require("assert")
-  , fs = require("fs")
-  , path = require("path")
-  , sax = require("../lib/sax")
-
-exports.sax = sax
-
-// handy way to do simple unit tests
-// if the options contains an xml string, it'll be written and the parser closed.
-// otherwise, it's assumed that the test will write and close.
-exports.test = function test (options) {
-  var xml = options.xml
-    , parser = sax.parser(options.strict, options.opt)
-    , expect = options.expect
-    , e = 0
-  sax.EVENTS.forEach(function (ev) {
-    parser["on" + ev] = function (n) {
-      if (process.env.DEBUG) {
-        console.error({ expect: expect[e]
-                      , actual: [ev, n] })
-      }
-      if (e >= expect.length && (ev === "end" || ev === "ready")) return
-      assert.ok( e < expect.length,
-        "expectation #"+e+" "+util.inspect(expect[e])+"\n"+
-        "Unexpected event: "+ev+" "+(n ? util.inspect(n) : ""))
-      var inspected = n instanceof Error ? "\n"+ n.message : util.inspect(n)
-      assert.equal(ev, expect[e][0],
-        "expectation #"+e+"\n"+
-        "Didn't get expected event\n"+
-        "expect: "+expect[e][0] + " " +util.inspect(expect[e][1])+"\n"+
-        "actual: "+ev+" "+inspected+"\n")
-      if (ev === "error") assert.equal(n.message, expect[e][1])
-      else assert.deepEqual(n, expect[e][1],
-        "expectation #"+e+"\n"+
-        "Didn't get expected argument\n"+
-        "expect: "+expect[e][0] + " " +util.inspect(expect[e][1])+"\n"+
-        "actual: "+ev+" "+inspected+"\n")
-      e++
-      if (ev === "error") parser.resume()
-    }
-  })
-  if (xml) parser.write(xml).close()
-  return parser
-}
-
-if (module === require.main) {
-  var running = true
-    , failures = 0
-
-  function fail (file, er) {
-    util.error("Failed: "+file)
-    util.error(er.stack || er.message)
-    failures ++
-  }
-
-  fs.readdir(__dirname, function (error, files) {
-    files = files.filter(function (file) {
-      return (/\.js$/.exec(file) && file !== 'index.js')
-    })
-    var n = files.length
-      , i = 0
-    console.log("0.." + n)
-    files.forEach(function (file) {
-      // run this test.
-      try {
-        require(path.resolve(__dirname, file))
-        var globalsAfter = JSON.stringify(Object.keys(global))
-        if (globalsAfter !== globalsBefore) {
-          var er = new Error("new globals introduced\n"+
-                             "expected: "+globalsBefore+"\n"+
-                             "actual:   "+globalsAfter)
-          globalsBefore = globalsAfter
-          throw er
-        }
-        console.log("ok " + (++i) + " - " + file)
-      } catch (er) {
-        console.log("not ok "+ (++i) + " - " + file)
-        fail(file, er)
-      }
-    })
-    if (!failures) return console.log("#all pass")
-    else return console.error(failures + " failure" + (failures > 1 ? "s" : ""))
-  })
-}
diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/issue-23.js b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/issue-23.js
deleted file mode 100644
index e7991b2..0000000
--- a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/issue-23.js
+++ /dev/null
@@ -1,43 +0,0 @@
-
-require(__dirname).test
-  ( { xml :
-      "<compileClassesResponse>"+
-        "<result>"+
-          "<bodyCrc>653724009</bodyCrc>"+
-          "<column>-1</column>"+
-          "<id>01pG0000002KoSUIA0</id>"+
-          "<line>-1</line>"+
-          "<name>CalendarController</name>"+
-          "<success>true</success>"+
-        "</result>"+
-      "</compileClassesResponse>"
-
-    , expect :
-      [ [ "opentag", { name: "COMPILECLASSESRESPONSE", attributes: {} } ]
-      , [ "opentag", { name : "RESULT", attributes: {} } ]
-      , [ "opentag", { name: "BODYCRC", attributes: {} } ]
-      , [ "text", "653724009" ]
-      , [ "closetag", "BODYCRC" ]
-      , [ "opentag", { name: "COLUMN", attributes: {} } ]
-      , [ "text", "-1" ]
-      , [ "closetag", "COLUMN" ]
-      , [ "opentag", { name: "ID", attributes: {} } ]
-      , [ "text", "01pG0000002KoSUIA0" ]
-      , [ "closetag", "ID" ]
-      , [ "opentag", {name: "LINE", attributes: {} } ]
-      , [ "text", "-1" ]
-      , [ "closetag", "LINE" ]
-      , [ "opentag", {name: "NAME", attributes: {} } ]
-      , [ "text", "CalendarController" ]
-      , [ "closetag", "NAME" ]
-      , [ "opentag", {name: "SUCCESS", attributes: {} } ]
-      , [ "text", "true" ]
-      , [ "closetag", "SUCCESS" ]
-      , [ "closetag", "RESULT" ]
-      , [ "closetag", "COMPILECLASSESRESPONSE" ]
-      ]
-    , strict : false
-    , opt : {}
-    }
-  )
-
diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/issue-30.js b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/issue-30.js
deleted file mode 100644
index c2cc809..0000000
--- a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/issue-30.js
+++ /dev/null
@@ -1,24 +0,0 @@
-// https://github.com/isaacs/sax-js/issues/33
-require(__dirname).test
-  ( { xml : "<xml>\n"+
-            "<!-- \n"+
-            "  comment with a single dash- in it\n"+
-            "-->\n"+
-            "<data/>\n"+
-            "</xml>"
-
-    , expect :
-      [ [ "opentag", { name: "xml", attributes: {} } ]
-      , [ "text", "\n" ]
-      , [ "comment", " \n  comment with a single dash- in it\n" ]
-      , [ "text", "\n" ]
-      , [ "opentag", { name: "data", attributes: {} } ]
-      , [ "closetag", "data" ]
-      , [ "text", "\n" ]
-      , [ "closetag", "xml" ]
-      ]
-    , strict : true
-    , opt : {}
-    }
-  )
-
diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/issue-35.js b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/issue-35.js
deleted file mode 100644
index 7c521c5..0000000
--- a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/issue-35.js
+++ /dev/null
@@ -1,15 +0,0 @@
-// https://github.com/isaacs/sax-js/issues/35
-require(__dirname).test
-  ( { xml : "<xml>&#Xd;&#X0d;\n"+
-            "</xml>"
-
-    , expect :
-      [ [ "opentag", { name: "xml", attributes: {} } ]
-      , [ "text", "\r\r\n" ]
-      , [ "closetag", "xml" ]
-      ]
-    , strict : true
-    , opt : {}
-    }
-  )
-
diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/issue-47.js b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/issue-47.js
deleted file mode 100644
index 911c7d0..0000000
--- a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/issue-47.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// https://github.com/isaacs/sax-js/issues/47
-require(__dirname).test
-  ( { xml : '<a href="query.svc?x=1&y=2&z=3"/>'
-    , expect : [ 
-        [ "attribute", { name:'href', value:"query.svc?x=1&y=2&z=3"} ],
-        [ "opentag", { name: "a", attributes: { href:"query.svc?x=1&y=2&z=3"} } ],
-        [ "closetag", "a" ]
-      ]
-    , strict : true
-    , opt : {}
-    }
-  )
-
diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/issue-49.js b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/issue-49.js
deleted file mode 100644
index 2964325..0000000
--- a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/issue-49.js
+++ /dev/null
@@ -1,31 +0,0 @@
-// https://github.com/isaacs/sax-js/issues/49
-require(__dirname).test
-  ( { xml : "<xml><script>hello world</script></xml>"
-    , expect :
-      [ [ "opentag", { name: "xml", attributes: {} } ]
-      , [ "opentag", { name: "script", attributes: {} } ]
-      , [ "text", "hello world" ]
-      , [ "closetag", "script" ]
-      , [ "closetag", "xml" ]
-      ]
-    , strict : false
-    , opt : { lowercasetags: true, noscript: true }
-    }
-  )
-
-require(__dirname).test
-  ( { xml : "<xml><script><![CDATA[hello world]]></script></xml>"
-    , expect :
-      [ [ "opentag", { name: "xml", attributes: {} } ]
-      , [ "opentag", { name: "script", attributes: {} } ]
-      , [ "opencdata", undefined ]
-      , [ "cdata", "hello world" ]
-      , [ "closecdata", undefined ]
-      , [ "closetag", "script" ]
-      , [ "closetag", "xml" ]
-      ]
-    , strict : false
-    , opt : { lowercasetags: true, noscript: true }
-    }
-  )
-
diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/parser-position.js b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/parser-position.js
deleted file mode 100644
index e4a68b1..0000000
--- a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/parser-position.js
+++ /dev/null
@@ -1,28 +0,0 @@
-var sax = require("../lib/sax"),
-    assert = require("assert")
-
-function testPosition(chunks, expectedEvents) {
-  var parser = sax.parser();
-  expectedEvents.forEach(function(expectation) {
-    parser['on' + expectation[0]] = function() {
-      for (var prop in expectation[1]) {
-        assert.equal(parser[prop], expectation[1][prop]);
-      }
-    }
-  });
-  chunks.forEach(function(chunk) {
-    parser.write(chunk);
-  });
-};
-
-testPosition(['<div>abcdefgh</div>'],
-             [ ['opentag',  { position:  5, startTagPosition:  1 }]
-             , ['text',     { position: 19, startTagPosition: 14 }]
-             , ['closetag', { position: 19, startTagPosition: 14 }]
-             ]);
-
-testPosition(['<div>abcde','fgh</div>'],
-             [ ['opentag',  { position:  5, startTagPosition:  1 }]
-             , ['text',     { position: 19, startTagPosition: 14 }]
-             , ['closetag', { position: 19, startTagPosition: 14 }]
-             ]);
diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/script.js b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/script.js
deleted file mode 100644
index 464c051..0000000
--- a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/script.js
+++ /dev/null
@@ -1,12 +0,0 @@
-require(__dirname).test({
-  xml : "<html><head><script>if (1 < 0) { console.log('elo there'); }</script></head></html>",
-  expect : [
-    ["opentag", {"name": "HTML","attributes": {}}],
-    ["opentag", {"name": "HEAD","attributes": {}}],
-    ["opentag", {"name": "SCRIPT","attributes": {}}],
-    ["script", "if (1 < 0) { console.log('elo there'); }"],
-    ["closetag", "SCRIPT"],
-    ["closetag", "HEAD"],
-    ["closetag", "HTML"]
-  ]
-});
diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/self-closing-child-strict.js b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/self-closing-child-strict.js
deleted file mode 100644
index ce9c045..0000000
--- a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/self-closing-child-strict.js
+++ /dev/null
@@ -1,40 +0,0 @@
-
-require(__dirname).test({
-  xml :
-  "<root>"+
-    "<child>" +
-      "<haha />" +
-    "</child>" +
-    "<monkey>" +
-      "=(|)" +
-    "</monkey>" +
-  "</root>",
-  expect : [
-    ["opentag", {
-     "name": "root",
-     "attributes": {}
-    }],
-    ["opentag", {
-     "name": "child",
-     "attributes": {}
-    }],
-    ["opentag", {
-     "name": "haha",
-     "attributes": {}
-    }],
-    ["closetag", "haha"],
-    ["closetag", "child"],
-    ["opentag", {
-     "name": "monkey",
-     "attributes": {}
-    }],
-    ["text", "=(|)"],
-    ["closetag", "monkey"],
-    ["closetag", "root"],
-    ["end"],
-    ["ready"]
-  ],
-  strict : true,
-  opt : {}
-});
-
diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/self-closing-child.js b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/self-closing-child.js
deleted file mode 100644
index bc6b52b..0000000
--- a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/self-closing-child.js
+++ /dev/null
@@ -1,40 +0,0 @@
-
-require(__dirname).test({
-  xml :
-  "<root>"+
-    "<child>" +
-      "<haha />" +
-    "</child>" +
-    "<monkey>" +
-      "=(|)" +
-    "</monkey>" +
-  "</root>",
-  expect : [
-    ["opentag", {
-     "name": "ROOT",
-     "attributes": {}
-    }],
-    ["opentag", {
-     "name": "CHILD",
-     "attributes": {}
-    }],
-    ["opentag", {
-     "name": "HAHA",
-     "attributes": {}
-    }],
-    ["closetag", "HAHA"],
-    ["closetag", "CHILD"],
-    ["opentag", {
-     "name": "MONKEY",
-     "attributes": {}
-    }],
-    ["text", "=(|)"],
-    ["closetag", "MONKEY"],
-    ["closetag", "ROOT"],
-    ["end"],
-    ["ready"]
-  ],
-  strict : false,
-  opt : {}
-});
-
diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/self-closing-tag.js b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/self-closing-tag.js
deleted file mode 100644
index b2c5736..0000000
--- a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/self-closing-tag.js
+++ /dev/null
@@ -1,25 +0,0 @@
-
-require(__dirname).test({
-  xml :
-  "<root>   "+
-    "<haha /> "+
-    "<haha/>  "+
-    "<monkey> "+
-      "=(|)     "+
-    "</monkey>"+
-  "</root>  ",
-  expect : [
-    ["opentag", {name:"ROOT", attributes:{}}],
-    ["opentag", {name:"HAHA", attributes:{}}],
-    ["closetag", "HAHA"],
-    ["opentag", {name:"HAHA", attributes:{}}],
-    ["closetag", "HAHA"],
-    // ["opentag", {name:"HAHA", attributes:{}}],
-    // ["closetag", "HAHA"],
-    ["opentag", {name:"MONKEY", attributes:{}}],
-    ["text", "=(|)"],
-    ["closetag", "MONKEY"],
-    ["closetag", "ROOT"]
-  ],
-  opt : { trim : true }
-});
\ No newline at end of file
diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/stray-ending.js b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/stray-ending.js
deleted file mode 100644
index 6b0aa7f..0000000
--- a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/stray-ending.js
+++ /dev/null
@@ -1,17 +0,0 @@
-// stray ending tags should just be ignored in non-strict mode.
-// https://github.com/isaacs/sax-js/issues/32
-require(__dirname).test
-  ( { xml :
-      "<a><b></c></b></a>"
-    , expect :
-      [ [ "opentag", { name: "A", attributes: {} } ]
-      , [ "opentag", { name: "B", attributes: {} } ]
-      , [ "text", "</c>" ]
-      , [ "closetag", "B" ]
-      , [ "closetag", "A" ]
-      ]
-    , strict : false
-    , opt : {}
-    }
-  )
-
diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/trailing-non-whitespace.js b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/trailing-non-whitespace.js
deleted file mode 100644
index 3e1fb2e..0000000
--- a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/trailing-non-whitespace.js
+++ /dev/null
@@ -1,17 +0,0 @@
-
-require(__dirname).test({
-  xml : "<span>Welcome,</span> to monkey land",
-  expect : [
-    ["opentag", {
-     "name": "SPAN",
-     "attributes": {}
-    }],
-    ["text", "Welcome,"],
-    ["closetag", "SPAN"],
-    ["text", " to monkey land"],
-    ["end"],
-    ["ready"]
-  ],
-  strict : false,
-  opt : {}
-});
diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/unquoted.js b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/unquoted.js
deleted file mode 100644
index 79f1d0b..0000000
--- a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/unquoted.js
+++ /dev/null
@@ -1,17 +0,0 @@
-// unquoted attributes should be ok in non-strict mode
-// https://github.com/isaacs/sax-js/issues/31
-require(__dirname).test
-  ( { xml :
-      "<span class=test hello=world></span>"
-    , expect :
-      [ [ "attribute", { name: "class", value: "test" } ]
-      , [ "attribute", { name: "hello", value: "world" } ]
-      , [ "opentag", { name: "SPAN",
-                       attributes: { class: "test", hello: "world" } } ]
-      , [ "closetag", "SPAN" ]
-      ]
-    , strict : false
-    , opt : {}
-    }
-  )
-
diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/xmlns-issue-41.js b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/xmlns-issue-41.js
deleted file mode 100644
index 596d82b..0000000
--- a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/xmlns-issue-41.js
+++ /dev/null
@@ -1,67 +0,0 @@
-var t = require(__dirname)
-
-  , xmls = // should be the same both ways.
-    [ "<parent xmlns:a='http://ATTRIBUTE' a:attr='value' />"
-    , "<parent a:attr='value' xmlns:a='http://ATTRIBUTE' />" ]
-
-  , ex1 =
-    [ [ "opennamespace"
-      , { prefix: "a"
-        , uri: "http://ATTRIBUTE"
-        }
-      ]
-    , [ "attribute"
-      , { name: "xmlns:a"
-        , value: "http://ATTRIBUTE"
-        , prefix: "xmlns"
-        , local: "a"
-        , uri: "http://www.w3.org/2000/xmlns/"
-        }
-      ]
-    , [ "attribute"
-      , { name: "a:attr"
-        , local: "attr"
-        , prefix: "a"
-        , uri: "http://ATTRIBUTE"
-        , value: "value"
-        }
-      ]
-    , [ "opentag"
-      , { name: "parent"
-        , uri: ""
-        , prefix: ""
-        , local: "parent"
-        , attributes:
-          { "a:attr":
-            { name: "a:attr"
-            , local: "attr"
-            , prefix: "a"
-            , uri: "http://ATTRIBUTE"
-            , value: "value"
-            }
-          , "xmlns:a":
-            { name: "xmlns:a"
-            , local: "a"
-            , prefix: "xmlns"
-            , uri: "http://www.w3.org/2000/xmlns/"
-            , value: "http://ATTRIBUTE"
-            }
-          }
-        , ns: {"a": "http://ATTRIBUTE"}
-        }
-      ]
-    , ["closetag", "parent"]
-    , ["closenamespace", { prefix: "a", uri: "http://ATTRIBUTE" }]
-    ]
-
-  // swap the order of elements 2 and 1
-  , ex2 = [ex1[0], ex1[2], ex1[1]].concat(ex1.slice(3))
-  , expected = [ex1, ex2]
-
-xmls.forEach(function (x, i) {
-  t.test({ xml: x
-         , expect: expected[i]
-         , strict: true
-         , opt: { xmlns: true }
-         })
-})
diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/xmlns-rebinding.js b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/xmlns-rebinding.js
deleted file mode 100644
index f464876..0000000
--- a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/xmlns-rebinding.js
+++ /dev/null
@@ -1,59 +0,0 @@
-
-require(__dirname).test
-  ( { xml :
-      "<root xmlns:x='x1' xmlns:y='y1' x:a='x1' y:a='y1'>"+
-        "<rebind xmlns:x='x2'>"+
-          "<check x:a='x2' y:a='y1'/>"+
-        "</rebind>"+
-        "<check x:a='x1' y:a='y1'/>"+
-      "</root>"
-
-    , expect :
-      [ [ "opennamespace", { prefix: "x", uri: "x1" } ]
-      , [ "opennamespace", { prefix: "y", uri: "y1" } ]
-      , [ "attribute", { name: "xmlns:x", value: "x1", uri: "http://www.w3.org/2000/xmlns/", prefix: "xmlns", local: "x" } ]
-      , [ "attribute", { name: "xmlns:y", value: "y1", uri: "http://www.w3.org/2000/xmlns/", prefix: "xmlns", local: "y" } ]
-      , [ "attribute", { name: "x:a", value: "x1", uri: "x1", prefix: "x", local: "a" } ]
-      , [ "attribute", { name: "y:a", value: "y1", uri: "y1", prefix: "y", local: "a" } ]
-      , [ "opentag", { name: "root", uri: "", prefix: "", local: "root",
-            attributes: { "xmlns:x": { name: "xmlns:x", value: "x1", uri: "http://www.w3.org/2000/xmlns/", prefix: "xmlns", local: "x" }
-                        , "xmlns:y": { name: "xmlns:y", value: "y1", uri: "http://www.w3.org/2000/xmlns/", prefix: "xmlns", local: "y" }
-                        , "x:a": { name: "x:a", value: "x1", uri: "x1", prefix: "x", local: "a" }
-                        , "y:a": { name: "y:a", value: "y1", uri: "y1", prefix: "y", local: "a" } },
-            ns: { x: 'x1', y: 'y1' } } ]
-
-      , [ "opennamespace", { prefix: "x", uri: "x2" } ]
-      , [ "attribute", { name: "xmlns:x", value: "x2", uri: "http://www.w3.org/2000/xmlns/", prefix: "xmlns", local: "x" } ]
-      , [ "opentag", { name: "rebind", uri: "", prefix: "", local: "rebind",
-            attributes: { "xmlns:x": { name: "xmlns:x", value: "x2", uri: "http://www.w3.org/2000/xmlns/", prefix: "xmlns", local: "x" } },
-            ns: { x: 'x2' } } ]
-
-      , [ "attribute", { name: "x:a", value: "x2", uri: "x2", prefix: "x", local: "a" } ]
-      , [ "attribute", { name: "y:a", value: "y1", uri: "y1", prefix: "y", local: "a" } ]
-      , [ "opentag", { name: "check", uri: "", prefix: "", local: "check",
-            attributes: { "x:a": { name: "x:a", value: "x2", uri: "x2", prefix: "x", local: "a" }
-                        , "y:a": { name: "y:a", value: "y1", uri: "y1", prefix: "y", local: "a" } },
-            ns: { x: 'x2' } } ]
-
-      , [ "closetag", "check" ]
-
-      , [ "closetag", "rebind" ]
-      , [ "closenamespace", { prefix: "x", uri: "x2" } ]
-
-      , [ "attribute", { name: "x:a", value: "x1", uri: "x1", prefix: "x", local: "a" } ]
-      , [ "attribute", { name: "y:a", value: "y1", uri: "y1", prefix: "y", local: "a" } ]
-      , [ "opentag", { name: "check", uri: "", prefix: "", local: "check",
-            attributes: { "x:a": { name: "x:a", value: "x1", uri: "x1", prefix: "x", local: "a" }
-                        , "y:a": { name: "y:a", value: "y1", uri: "y1", prefix: "y", local: "a" } },
-            ns: { x: 'x1', y: 'y1' } } ]
-      , [ "closetag", "check" ]
-
-      , [ "closetag", "root" ]
-      , [ "closenamespace", { prefix: "x", uri: "x1" } ]
-      , [ "closenamespace", { prefix: "y", uri: "y1" } ]
-      ]
-    , strict : true
-    , opt : { xmlns: true }
-    }
-  )
-
diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/xmlns-strict.js b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/xmlns-strict.js
deleted file mode 100644
index 4ad615b..0000000
--- a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/xmlns-strict.js
+++ /dev/null
@@ -1,71 +0,0 @@
-
-require(__dirname).test
-  ( { xml :
-      "<root>"+
-        "<plain attr='normal'/>"+
-        "<ns1 xmlns='uri:default'>"+
-          "<plain attr='normal'/>"+
-        "</ns1>"+
-        "<ns2 xmlns:a='uri:nsa'>"+
-          "<plain attr='normal'/>"+
-          "<a:ns a:attr='namespaced'/>"+
-        "</ns2>"+
-      "</root>"
-
-    , expect :
-      [ [ "opentag", { name: "root", prefix: "", local: "root", uri: "",
-            attributes: {}, ns: {} } ]
-
-      , [ "attribute", { name: "attr", value: "normal", prefix: "", local: "attr", uri: "" } ]
-      , [ "opentag", { name: "plain", prefix: "", local: "plain", uri: "",
-            attributes: { "attr": { name: "attr", value: "normal", uri: "", prefix: "", local: "attr", uri: "" } },
-            ns: {} } ]
-      , [ "closetag", "plain" ]
-
-      , [ "opennamespace", { prefix: "", uri: "uri:default" } ]
-
-      , [ "attribute", { name: "xmlns", value: "uri:default", prefix: "xmlns", local: "", uri: "http://www.w3.org/2000/xmlns/" } ]
-      , [ "opentag", { name: "ns1", prefix: "", local: "ns1", uri: "uri:default",
-            attributes: { "xmlns": { name: "xmlns", value: "uri:default", prefix: "xmlns", local: "", uri: "http://www.w3.org/2000/xmlns/" } },
-            ns: { "": "uri:default" } } ]
-
-      , [ "attribute", { name: "attr", value: "normal", prefix: "", local: "attr", uri: "uri:default" } ]
-      , [ "opentag", { name: "plain", prefix: "", local: "plain", uri: "uri:default", ns: { '': 'uri:default' },
-            attributes: { "attr": { name: "attr", value: "normal", prefix: "", local: "attr", uri: "uri:default" } } } ]
-      , [ "closetag", "plain" ]
-
-      , [ "closetag", "ns1" ]
-
-      , [ "closenamespace", { prefix: "", uri: "uri:default" } ]
-
-      , [ "opennamespace", { prefix: "a", uri: "uri:nsa" } ]
-
-      , [ "attribute", { name: "xmlns:a", value: "uri:nsa", prefix: "xmlns", local: "a", uri: "http://www.w3.org/2000/xmlns/" } ]
-
-      , [ "opentag", { name: "ns2", prefix: "", local: "ns2", uri: "",
-            attributes: { "xmlns:a": { name: "xmlns:a", value: "uri:nsa", prefix: "xmlns", local: "a", uri: "http://www.w3.org/2000/xmlns/" } },
-            ns: { a: "uri:nsa" } } ]
-
-      , [ "attribute", { name: "attr", value: "normal", prefix: "", local: "attr", uri: "" } ]
-      , [ "opentag", { name: "plain", prefix: "", local: "plain", uri: "",
-            attributes: { "attr": { name: "attr", value: "normal", prefix: "", local: "attr", uri: "" } },
-            ns: { a: 'uri:nsa' } } ]
-      , [ "closetag", "plain" ]
-
-      , [ "attribute", { name: "a:attr", value: "namespaced", prefix: "a", local: "attr", uri: "uri:nsa" } ]
-      , [ "opentag", { name: "a:ns", prefix: "a", local: "ns", uri: "uri:nsa",
-            attributes: { "a:attr": { name: "a:attr", value: "namespaced", prefix: "a", local: "attr", uri: "uri:nsa" } },
-            ns: { a: 'uri:nsa' } } ]
-      , [ "closetag", "a:ns" ]
-
-      , [ "closetag", "ns2" ]
-
-      , [ "closenamespace", { prefix: "a", uri: "uri:nsa" } ]
-
-      , [ "closetag", "root" ]
-      ]
-    , strict : true
-    , opt : { xmlns: true }
-    }
-  )
-
diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/xmlns-unbound.js b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/xmlns-unbound.js
deleted file mode 100644
index 2944b87..0000000
--- a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/xmlns-unbound.js
+++ /dev/null
@@ -1,15 +0,0 @@
-
-require(__dirname).test(
-  { strict : true
-  , opt : { xmlns: true }
-  , expect :
-    [ ["error", "Unbound namespace prefix: \"unbound\"\nLine: 0\nColumn: 28\nChar: >"]
-
-    , [ "attribute", { name: "unbound:attr", value: "value", uri: "unbound", prefix: "unbound", local: "attr" } ]
-    , [ "opentag", { name: "root", uri: "", prefix: "", local: "root",
-          attributes: { "unbound:attr": { name: "unbound:attr", value: "value", uri: "unbound", prefix: "unbound", local: "attr" } },
-          ns: {} } ]
-    , [ "closetag", "root" ]
-    ]
-  }
-).write("<root unbound:attr='value'/>")
diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/xmlns-xml-default-prefix-attribute.js b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/xmlns-xml-default-prefix-attribute.js
deleted file mode 100644
index 16da771..0000000
--- a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/xmlns-xml-default-prefix-attribute.js
+++ /dev/null
@@ -1,35 +0,0 @@
-require(__dirname).test(
-  { xml : "<root xml:lang='en'/>"
-  , expect :
-    [ [ "attribute"
-      , { name: "xml:lang"
-        , local: "lang"
-        , prefix: "xml"
-        , uri: "http://www.w3.org/XML/1998/namespace"
-        , value: "en"
-        }
-      ]
-    , [ "opentag"
-      , { name: "root"
-        , uri: ""
-        , prefix: ""
-        , local: "root"
-        , attributes:
-          { "xml:lang":
-            { name: "xml:lang"
-            , local: "lang"
-            , prefix: "xml"
-            , uri: "http://www.w3.org/XML/1998/namespace"
-            , value: "en"
-            }
-          }
-        , ns: {}
-        }
-      ]
-    , ["closetag", "root"]
-    ]
-  , strict : true
-  , opt : { xmlns: true }
-  }
-)
-
diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/xmlns-xml-default-prefix.js b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/xmlns-xml-default-prefix.js
deleted file mode 100644
index 9a1ce1b..0000000
--- a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/xmlns-xml-default-prefix.js
+++ /dev/null
@@ -1,20 +0,0 @@
-require(__dirname).test(
-  { xml : "<xml:root/>"
-  , expect :
-    [
-      [ "opentag"
-      , { name: "xml:root"
-        , uri: "http://www.w3.org/XML/1998/namespace"
-        , prefix: "xml"
-        , local: "root"
-        , attributes: {}
-        , ns: {}
-        }
-      ]
-    , ["closetag", "xml:root"]
-    ]
-  , strict : true
-  , opt : { xmlns: true }
-  }
-)
-
diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/xmlns-xml-default-redefine.js b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/xmlns-xml-default-redefine.js
deleted file mode 100644
index 1eba9c7..0000000
--- a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/xmlns-xml-default-redefine.js
+++ /dev/null
@@ -1,40 +0,0 @@
-require(__dirname).test(
-  { xml : "<xml:root xmlns:xml='ERROR'/>"
-  , expect :
-    [ ["error"
-      , "xml: prefix must be bound to http://www.w3.org/XML/1998/namespace\n"
-                        + "Actual: ERROR\n"
-      + "Line: 0\nColumn: 27\nChar: '"
-      ]
-    , [ "attribute"
-      , { name: "xmlns:xml"
-        , local: "xml"
-        , prefix: "xmlns"
-        , uri: "http://www.w3.org/2000/xmlns/"
-        , value: "ERROR"
-        }
-      ]
-    , [ "opentag"
-      , { name: "xml:root"
-        , uri: "http://www.w3.org/XML/1998/namespace"
-        , prefix: "xml"
-        , local: "root"
-        , attributes:
-          { "xmlns:xml":
-            { name: "xmlns:xml"
-            , local: "xml"
-            , prefix: "xmlns"
-            , uri: "http://www.w3.org/2000/xmlns/"
-            , value: "ERROR"
-            }
-          }
-        , ns: {}
-        }
-      ]
-    , ["closetag", "xml:root"]
-    ]
-  , strict : true
-  , opt : { xmlns: true }
-  }
-)
-
diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/package.json b/bin/node_modules/cordova-common/node_modules/elementtree/package.json
deleted file mode 100644
index cbeffca..0000000
--- a/bin/node_modules/cordova-common/node_modules/elementtree/package.json
+++ /dev/null
@@ -1,75 +0,0 @@
-{
-  "author": {
-    "name": "Rackspace US, Inc."
-  },
-  "contributors": [
-    {
-      "name": "Paul Querna",
-      "email": "paul.querna@rackspace.com"
-    },
-    {
-      "name": "Tomaz Muraus",
-      "email": "tomaz.muraus@rackspace.com"
-    }
-  ],
-  "name": "elementtree",
-  "description": "XML Serialization and Parsing module based on Python's ElementTree.",
-  "version": "0.1.6",
-  "keywords": [
-    "xml",
-    "sax",
-    "parser",
-    "seralization",
-    "elementtree"
-  ],
-  "homepage": "https://github.com/racker/node-elementtree",
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/racker/node-elementtree.git"
-  },
-  "main": "lib/elementtree.js",
-  "directories": {
-    "lib": "lib"
-  },
-  "scripts": {
-    "test": "make test"
-  },
-  "engines": {
-    "node": ">= 0.4.0"
-  },
-  "dependencies": {
-    "sax": "0.3.5"
-  },
-  "devDependencies": {
-    "whiskey": "0.8.x"
-  },
-  "licenses": [
-    {
-      "type": "Apache",
-      "url": "http://www.apache.org/licenses/LICENSE-2.0.html"
-    }
-  ],
-  "bugs": {
-    "url": "https://github.com/racker/node-elementtree/issues"
-  },
-  "_id": "elementtree@0.1.6",
-  "dist": {
-    "shasum": "2ac4c46ea30516c8c4cbdb5e3ac7418e592de20c",
-    "tarball": "http://registry.npmjs.org/elementtree/-/elementtree-0.1.6.tgz"
-  },
-  "_from": "elementtree@^0.1.6",
-  "_npmVersion": "1.3.24",
-  "_npmUser": {
-    "name": "rphillips",
-    "email": "ryan@trolocsis.com"
-  },
-  "maintainers": [
-    {
-      "name": "rphillips",
-      "email": "ryan@trolocsis.com"
-    }
-  ],
-  "_shasum": "2ac4c46ea30516c8c4cbdb5e3ac7418e592de20c",
-  "_resolved": "https://registry.npmjs.org/elementtree/-/elementtree-0.1.6.tgz",
-  "readme": "ERROR: No README data found!"
-}
diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/tests/data/xml1.xml b/bin/node_modules/cordova-common/node_modules/elementtree/tests/data/xml1.xml
deleted file mode 100644
index 72c33ae..0000000
--- a/bin/node_modules/cordova-common/node_modules/elementtree/tests/data/xml1.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0"?>
-<container name="test_container_1" xmlns:android="http://schemas.android.com/apk/res/android">
-  <object>dd
-    <name>test_object_1</name>
-    <hash>4281c348eaf83e70ddce0e07221c3d28</hash>
-    <bytes android:type="cool">14</bytes>
-    <content_type>application/octetstream</content_type>
-    <last_modified>2009-02-03T05:26:32.612278</last_modified>
-  </object>
-  <object>
-    <name>test_object_2</name>
-    <hash>b039efe731ad111bc1b0ef221c3849d0</hash>
-    <bytes android:type="lame">64</bytes>
-    <content_type>application/octetstream</content_type>
-    <last_modified>2009-02-03T05:26:32.612278</last_modified>
-  </object>
-</container>
diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/tests/data/xml2.xml b/bin/node_modules/cordova-common/node_modules/elementtree/tests/data/xml2.xml
deleted file mode 100644
index 5f94bbd..0000000
--- a/bin/node_modules/cordova-common/node_modules/elementtree/tests/data/xml2.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0"?>
-<object>
-    <title>
-        Hello World
-    </title>
-    <children>
-        <object id="obj1" />
-        <object id="obj2" />
-        <object id="obj3" />
-    </children>
-    <text><![CDATA[
-        Test & Test & Test
-    ]]></text>
-</object>
diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/tests/test-simple.js b/bin/node_modules/cordova-common/node_modules/elementtree/tests/test-simple.js
deleted file mode 100644
index 1fc04b8..0000000
--- a/bin/node_modules/cordova-common/node_modules/elementtree/tests/test-simple.js
+++ /dev/null
@@ -1,339 +0,0 @@
-/**
- *  Copyright 2011 Rackspace
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- */
-
-var fs = require('fs');
-var path = require('path');
-
-var sprintf = require('./../lib/sprintf').sprintf;
-var et = require('elementtree');
-var XML = et.XML;
-var ElementTree = et.ElementTree;
-var Element = et.Element;
-var SubElement = et.SubElement;
-var SyntaxError = require('./../lib/errors').SyntaxError;
-
-function readFile(name) {
-  return fs.readFileSync(path.join(__dirname, '/data/', name), 'utf8');
-}
-
-exports['test_simplest'] = function(test, assert) {
-  /* Ported from <https://github.com/lxml/lxml/blob/master/src/lxml/tests/test_elementtree.py> */
-  var Element = et.Element;
-  var root = Element('root');
-  root.append(Element('one'));
-  root.append(Element('two'));
-  root.append(Element('three'));
-  assert.equal(3, root.len());
-  assert.equal('one', root.getItem(0).tag);
-  assert.equal('two', root.getItem(1).tag);
-  assert.equal('three', root.getItem(2).tag);
-  test.finish();
-};
-
-
-exports['test_attribute_values'] = function(test, assert) {
-  var XML = et.XML;
-  var root = XML('<doc alpha="Alpha" beta="Beta" gamma="Gamma"/>');
-  assert.equal('Alpha', root.attrib['alpha']);
-  assert.equal('Beta', root.attrib['beta']);
-  assert.equal('Gamma', root.attrib['gamma']);
-  test.finish();
-};
-
-
-exports['test_findall'] = function(test, assert) {
-  var XML = et.XML;
-  var root = XML('<a><b><c/></b><b/><c><b/></c></a>');
-
-  assert.equal(root.findall("c").length, 1);
-  assert.equal(root.findall(".//c").length, 2);
-  assert.equal(root.findall(".//b").length, 3);
-  assert.equal(root.findall(".//b")[0]._children.length, 1);
-  assert.equal(root.findall(".//b")[1]._children.length, 0);
-  assert.equal(root.findall(".//b")[2]._children.length, 0);
-  assert.deepEqual(root.findall('.//b')[0], root.getchildren()[0]);
-
-  test.finish();
-};
-
-exports['test_find'] = function(test, assert) {
-  var a = Element('a');
-  var b = SubElement(a, 'b');
-  var c = SubElement(a, 'c');
-
-  assert.deepEqual(a.find('./b/..'), a);
-  test.finish();
-};
-
-exports['test_elementtree_find_qname'] = function(test, assert) {
-  var tree = new et.ElementTree(XML('<a><b><c/></b><b/><c><b/></c></a>'));
-  assert.deepEqual(tree.find(new et.QName('c')), tree.getroot()._children[2]);
-  test.finish();
-};
-
-exports['test_attrib_ns_clear'] = function(test, assert) {
-  var attribNS = '{http://foo/bar}x';
-
-  var par = Element('par');
-  par.set(attribNS, 'a');
-  var child = SubElement(par, 'child');
-  child.set(attribNS, 'b');
-
-  assert.equal('a', par.get(attribNS));
-  assert.equal('b', child.get(attribNS));
-
-  par.clear();
-  assert.equal(null, par.get(attribNS));
-  assert.equal('b', child.get(attribNS));
-  test.finish();
-};
-
-exports['test_create_tree_and_parse_simple'] = function(test, assert) {
-  var i = 0;
-  var e = new Element('bar', {});
-  var expected = "<?xml version='1.0' encoding='utf-8'?>\n" +
-    '<bar><blah a="11" /><blah a="12" /><gag a="13" b="abc">ponies</gag></bar>';
-
-  SubElement(e, "blah", {a: 11});
-  SubElement(e, "blah", {a: 12});
-  var se = et.SubElement(e, "gag", {a: '13', b: 'abc'});
-  se.text = 'ponies';
-
-  se.itertext(function(text) {
-    assert.equal(text, 'ponies');
-    i++;
-  });
-
-  assert.equal(i, 1);
-  var etree = new ElementTree(e);
-  var xml = etree.write();
-  assert.equal(xml, expected);
-  test.finish();
-};
-
-exports['test_write_with_options'] = function(test, assert) {
-  var i = 0;
-  var e = new Element('bar', {});
-  var expected1 = "<?xml version='1.0' encoding='utf-8'?>\n" +
-    '<bar>\n' +
-    '    <blah a="11">\n' +
-    '        <baz d="11">test</baz>\n' +
-    '    </blah>\n' +
-    '    <blah a="12" />\n' +
-    '    <gag a="13" b="abc">ponies</gag>\n' +
-    '</bar>\n';
-    var expected2 = "<?xml version='1.0' encoding='utf-8'?>\n" +
-    '<bar>\n' +
-    '  <blah a="11">\n' +
-    '    <baz d="11">test</baz>\n' +
-    '  </blah>\n' +
-    '  <blah a="12" />\n' +
-    '  <gag a="13" b="abc">ponies</gag>\n' +
-    '</bar>\n';
-
-    var expected3 = "<?xml version='1.0' encoding='utf-8'?>\n" +
-    '<object>\n' +
-    '    <title>\n' +
-    '        Hello World\n' +
-    '    </title>\n' +
-    '    <children>\n' +
-    '        <object id="obj1" />\n' +
-    '        <object id="obj2" />\n' +
-    '        <object id="obj3" />\n' +
-    '    </children>\n' +
-    '    <text>\n' +
-    '        Test &amp; Test &amp; Test\n' +
-    '    </text>\n' +
-    '</object>\n';
-
-  var se1 = SubElement(e, "blah", {a: 11});
-  var se2 = SubElement(se1, "baz", {d: 11});
-  se2.text = 'test';
-  SubElement(e, "blah", {a: 12});
-  var se = et.SubElement(e, "gag", {a: '13', b: 'abc'});
-  se.text = 'ponies';
-
-  se.itertext(function(text) {
-    assert.equal(text, 'ponies');
-    i++;
-  });
-
-  assert.equal(i, 1);
-  var etree = new ElementTree(e);
-  var xml1 = etree.write({'indent': 4});
-  var xml2 = etree.write({'indent': 2});
-  assert.equal(xml1, expected1);
-  assert.equal(xml2, expected2);
-
-  var file = readFile('xml2.xml');
-  var etree2 = et.parse(file);
-  var xml3 = etree2.write({'indent': 4});
-  assert.equal(xml3, expected3);
-  test.finish();
-};
-
-exports['test_parse_and_find_2'] = function(test, assert) {
-  var data = readFile('xml1.xml');
-  var etree = et.parse(data);
-
-  assert.equal(etree.findall('./object').length, 2);
-  assert.equal(etree.findall('[@name]').length, 1);
-  assert.equal(etree.findall('[@name="test_container_1"]').length, 1);
-  assert.equal(etree.findall('[@name=\'test_container_1\']').length, 1);
-  assert.equal(etree.findall('./object')[0].findtext('name'), 'test_object_1');
-  assert.equal(etree.findtext('./object/name'), 'test_object_1');
-  assert.equal(etree.findall('.//bytes').length, 2);
-  assert.equal(etree.findall('*/bytes').length, 2);
-  assert.equal(etree.findall('*/foobar').length, 0);
-
-  test.finish();
-};
-
-exports['test_namespaced_attribute'] = function(test, assert) {
-  var data = readFile('xml1.xml');
-  var etree = et.parse(data);
-
-  assert.equal(etree.findall('*/bytes[@android:type="cool"]').length, 1);
-
-  test.finish();
-}
-
-exports['test_syntax_errors'] = function(test, assert) {
-  var expressions = [ './/@bar', '[@bar', '[@foo=bar]', '[@', '/bar' ];
-  var errCount = 0;
-  var data = readFile('xml1.xml');
-  var etree = et.parse(data);
-
-  expressions.forEach(function(expression) {
-    try {
-      etree.findall(expression);
-    }
-    catch (err) {
-      errCount++;
-    }
-  });
-
-  assert.equal(errCount, expressions.length);
-  test.finish();
-};
-
-exports['test_register_namespace'] = function(test, assert){
-  var prefix = 'TESTPREFIX';
-  var namespace = 'http://seriously.unknown/namespace/URI';
-  var errCount = 0;
-
-  var etree = Element(sprintf('{%s}test', namespace));
-  assert.equal(et.tostring(etree, { 'xml_declaration': false}),
-               sprintf('<ns0:test xmlns:ns0="%s" />', namespace));
-
-  et.register_namespace(prefix, namespace);
-  var etree = Element(sprintf('{%s}test', namespace));
-  assert.equal(et.tostring(etree, { 'xml_declaration': false}),
-               sprintf('<%s:test xmlns:%s="%s" />', prefix, prefix, namespace));
-
-  try {
-    et.register_namespace('ns25', namespace);
-  }
-  catch (err) {
-    errCount++;
-  }
-
-  assert.equal(errCount, 1, 'Reserved prefix used, but exception was not thrown');
-  test.finish();
-};
-
-exports['test_tostring'] = function(test, assert) {
-  var a = Element('a');
-  var b = SubElement(a, 'b');
-  var c = SubElement(a, 'c');
-  c.text = 543;
-
-  assert.equal(et.tostring(a, { 'xml_declaration': false }), '<a><b /><c>543</c></a>');
-  assert.equal(et.tostring(c, { 'xml_declaration': false }), '<c>543</c>');
-  test.finish();
-};
-
-exports['test_escape'] = function(test, assert) {
-  var a = Element('a');
-  var b = SubElement(a, 'b');
-  b.text = '&&&&<>"\n\r';
-
-  assert.equal(et.tostring(a, { 'xml_declaration': false }), '<a><b>&amp;&amp;&amp;&amp;&lt;&gt;\"\n\r</b></a>');
-  test.finish();
-};
-
-exports['test_find_null'] = function(test, assert) {
-  var root = Element('root');
-  var node = SubElement(root, 'node');
-  var leaf  = SubElement(node, 'leaf');
-  leaf.text = 'ipsum';
-
-  assert.equal(root.find('node/leaf'), leaf);
-  assert.equal(root.find('no-such-node/leaf'), null);
-  test.finish();
-};
-
-exports['test_findtext_null'] = function(test, assert) {
-  var root = Element('root');
-  var node = SubElement(root, 'node');
-  var leaf  = SubElement(node, 'leaf');
-  leaf.text = 'ipsum';
-
-  assert.equal(root.findtext('node/leaf'), 'ipsum');
-  assert.equal(root.findtext('no-such-node/leaf'), null);
-  test.finish();
-};
-
-exports['test_remove'] = function(test, assert) {
-  var root = Element('root');
-  var node1 = SubElement(root, 'node1');
-  var node2 = SubElement(root, 'node2');
-  var node3 = SubElement(root, 'node3');
-
-  assert.equal(root.len(), 3);
-
-  root.remove(node2);
-
-  assert.equal(root.len(), 2);
-  assert.equal(root.getItem(0).tag, 'node1')
-  assert.equal(root.getItem(1).tag, 'node3')
-
-  test.finish();
-};
-
-exports['test_cdata_write'] = function(test, assert) {
-  var root, etree, xml, values, value, i;
-
-  values = [
-    'if(0>1) then true;',
-    '<test1>ponies hello</test1>',
-    ''
-  ];
-
-  for (i = 0; i < values.length; i++) {
-    value = values[i];
-
-    root = Element('root');
-    root.append(et.CData(value));
-    etree = new ElementTree(root);
-    xml = etree.write({'xml_declaration': false});
-
-    assert.equal(xml, sprintf('<root><![CDATA[%s]]></root>', value));
-  }
-
-  test.finish();
-};
diff --git a/bin/node_modules/cordova-common/node_modules/glob/LICENSE b/bin/node_modules/cordova-common/node_modules/glob/LICENSE
deleted file mode 100644
index 19129e3..0000000
--- a/bin/node_modules/cordova-common/node_modules/glob/LICENSE
+++ /dev/null
@@ -1,15 +0,0 @@
-The ISC License
-
-Copyright (c) Isaac Z. Schlueter and Contributors
-
-Permission to use, copy, modify, and/or distribute this software for any
-purpose with or without fee is hereby granted, provided that the above
-copyright notice and this permission notice appear in all copies.
-
-THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
-WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
-ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
-ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
-IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/bin/node_modules/cordova-common/node_modules/glob/README.md b/bin/node_modules/cordova-common/node_modules/glob/README.md
deleted file mode 100644
index 063cf95..0000000
--- a/bin/node_modules/cordova-common/node_modules/glob/README.md
+++ /dev/null
@@ -1,377 +0,0 @@
-[![Build Status](https://travis-ci.org/isaacs/node-glob.svg?branch=master)](https://travis-ci.org/isaacs/node-glob/) [![Dependency Status](https://david-dm.org/isaacs/node-glob.svg)](https://david-dm.org/isaacs/node-glob) [![devDependency Status](https://david-dm.org/isaacs/node-glob/dev-status.svg)](https://david-dm.org/isaacs/node-glob#info=devDependencies) [![optionalDependency Status](https://david-dm.org/isaacs/node-glob/optional-status.svg)](https://david-dm.org/isaacs/node-glob#info=optionalDependencies)
-
-# Glob
-
-Match files using the patterns the shell uses, like stars and stuff.
-
-This is a glob implementation in JavaScript.  It uses the `minimatch`
-library to do its matching.
-
-![](oh-my-glob.gif)
-
-## Usage
-
-```javascript
-var glob = require("glob")
-
-// options is optional
-glob("**/*.js", options, function (er, files) {
-  // files is an array of filenames.
-  // If the `nonull` option is set, and nothing
-  // was found, then files is ["**/*.js"]
-  // er is an error object or null.
-})
-```
-
-## Glob Primer
-
-"Globs" are the patterns you type when you do stuff like `ls *.js` on
-the command line, or put `build/*` in a `.gitignore` file.
-
-Before parsing the path part patterns, braced sections are expanded
-into a set.  Braced sections start with `{` and end with `}`, with any
-number of comma-delimited sections within.  Braced sections may contain
-slash characters, so `a{/b/c,bcd}` would expand into `a/b/c` and `abcd`.
-
-The following characters have special magic meaning when used in a
-path portion:
-
-* `*` Matches 0 or more characters in a single path portion
-* `?` Matches 1 character
-* `[...]` Matches a range of characters, similar to a RegExp range.
-  If the first character of the range is `!` or `^` then it matches
-  any character not in the range.
-* `!(pattern|pattern|pattern)` Matches anything that does not match
-  any of the patterns provided.
-* `?(pattern|pattern|pattern)` Matches zero or one occurrence of the
-  patterns provided.
-* `+(pattern|pattern|pattern)` Matches one or more occurrences of the
-  patterns provided.
-* `*(a|b|c)` Matches zero or more occurrences of the patterns provided
-* `@(pattern|pat*|pat?erN)` Matches exactly one of the patterns
-  provided
-* `**` If a "globstar" is alone in a path portion, then it matches
-  zero or more directories and subdirectories searching for matches.
-  It does not crawl symlinked directories.
-
-### Dots
-
-If a file or directory path portion has a `.` as the first character,
-then it will not match any glob pattern unless that pattern's
-corresponding path part also has a `.` as its first character.
-
-For example, the pattern `a/.*/c` would match the file at `a/.b/c`.
-However the pattern `a/*/c` would not, because `*` does not start with
-a dot character.
-
-You can make glob treat dots as normal characters by setting
-`dot:true` in the options.
-
-### Basename Matching
-
-If you set `matchBase:true` in the options, and the pattern has no
-slashes in it, then it will seek for any file anywhere in the tree
-with a matching basename.  For example, `*.js` would match
-`test/simple/basic.js`.
-
-### Negation
-
-The intent for negation would be for a pattern starting with `!` to
-match everything that *doesn't* match the supplied pattern.  However,
-the implementation is weird, and for the time being, this should be
-avoided.  The behavior is deprecated in version 5, and will be removed
-entirely in version 6.
-
-### Empty Sets
-
-If no matching files are found, then an empty array is returned.  This
-differs from the shell, where the pattern itself is returned.  For
-example:
-
-    $ echo a*s*d*f
-    a*s*d*f
-
-To get the bash-style behavior, set the `nonull:true` in the options.
-
-### See Also:
-
-* `man sh`
-* `man bash` (Search for "Pattern Matching")
-* `man 3 fnmatch`
-* `man 5 gitignore`
-* [minimatch documentation](https://github.com/isaacs/minimatch)
-
-## glob.hasMagic(pattern, [options])
-
-Returns `true` if there are any special characters in the pattern, and
-`false` otherwise.
-
-Note that the options affect the results.  If `noext:true` is set in
-the options object, then `+(a|b)` will not be considered a magic
-pattern.  If the pattern has a brace expansion, like `a/{b/c,x/y}`
-then that is considered magical, unless `nobrace:true` is set in the
-options.
-
-## glob(pattern, [options], cb)
-
-* `pattern` {String} Pattern to be matched
-* `options` {Object}
-* `cb` {Function}
-  * `err` {Error | null}
-  * `matches` {Array<String>} filenames found matching the pattern
-
-Perform an asynchronous glob search.
-
-## glob.sync(pattern, [options])
-
-* `pattern` {String} Pattern to be matched
-* `options` {Object}
-* return: {Array<String>} filenames found matching the pattern
-
-Perform a synchronous glob search.
-
-## Class: glob.Glob
-
-Create a Glob object by instantiating the `glob.Glob` class.
-
-```javascript
-var Glob = require("glob").Glob
-var mg = new Glob(pattern, options, cb)
-```
-
-It's an EventEmitter, and starts walking the filesystem to find matches
-immediately.
-
-### new glob.Glob(pattern, [options], [cb])
-
-* `pattern` {String} pattern to search for
-* `options` {Object}
-* `cb` {Function} Called when an error occurs, or matches are found
-  * `err` {Error | null}
-  * `matches` {Array<String>} filenames found matching the pattern
-
-Note that if the `sync` flag is set in the options, then matches will
-be immediately available on the `g.found` member.
-
-### Properties
-
-* `minimatch` The minimatch object that the glob uses.
-* `options` The options object passed in.
-* `aborted` Boolean which is set to true when calling `abort()`.  There
-  is no way at this time to continue a glob search after aborting, but
-  you can re-use the statCache to avoid having to duplicate syscalls.
-* `cache` Convenience object.  Each field has the following possible
-  values:
-  * `false` - Path does not exist
-  * `true` - Path exists
-  * `'DIR'` - Path exists, and is not a directory
-  * `'FILE'` - Path exists, and is a directory
-  * `[file, entries, ...]` - Path exists, is a directory, and the
-    array value is the results of `fs.readdir`
-* `statCache` Cache of `fs.stat` results, to prevent statting the same
-  path multiple times.
-* `symlinks` A record of which paths are symbolic links, which is
-  relevant in resolving `**` patterns.
-* `realpathCache` An optional object which is passed to `fs.realpath`
-  to minimize unnecessary syscalls.  It is stored on the instantiated
-  Glob object, and may be re-used.
-
-### Events
-
-* `end` When the matching is finished, this is emitted with all the
-  matches found.  If the `nonull` option is set, and no match was found,
-  then the `matches` list contains the original pattern.  The matches
-  are sorted, unless the `nosort` flag is set.
-* `match` Every time a match is found, this is emitted with the matched.
-* `error` Emitted when an unexpected error is encountered, or whenever
-  any fs error occurs if `options.strict` is set.
-* `abort` When `abort()` is called, this event is raised.
-
-### Methods
-
-* `pause` Temporarily stop the search
-* `resume` Resume the search
-* `abort` Stop the search forever
-
-### Options
-
-All the options that can be passed to Minimatch can also be passed to
-Glob to change pattern matching behavior.  Also, some have been added,
-or have glob-specific ramifications.
-
-All options are false by default, unless otherwise noted.
-
-All options are added to the Glob object, as well.
-
-If you are running many `glob` operations, you can pass a Glob object
-as the `options` argument to a subsequent operation to shortcut some
-`stat` and `readdir` calls.  At the very least, you may pass in shared
-`symlinks`, `statCache`, `realpathCache`, and `cache` options, so that
-parallel glob operations will be sped up by sharing information about
-the filesystem.
-
-* `cwd` The current working directory in which to search.  Defaults
-  to `process.cwd()`.
-* `root` The place where patterns starting with `/` will be mounted
-  onto.  Defaults to `path.resolve(options.cwd, "/")` (`/` on Unix
-  systems, and `C:\` or some such on Windows.)
-* `dot` Include `.dot` files in normal matches and `globstar` matches.
-  Note that an explicit dot in a portion of the pattern will always
-  match dot files.
-* `nomount` By default, a pattern starting with a forward-slash will be
-  "mounted" onto the root setting, so that a valid filesystem path is
-  returned.  Set this flag to disable that behavior.
-* `mark` Add a `/` character to directory matches.  Note that this
-  requires additional stat calls.
-* `nosort` Don't sort the results.
-* `stat` Set to true to stat *all* results.  This reduces performance
-  somewhat, and is completely unnecessary, unless `readdir` is presumed
-  to be an untrustworthy indicator of file existence.
-* `silent` When an unusual error is encountered when attempting to
-  read a directory, a warning will be printed to stderr.  Set the
-  `silent` option to true to suppress these warnings.
-* `strict` When an unusual error is encountered when attempting to
-  read a directory, the process will just continue on in search of
-  other matches.  Set the `strict` option to raise an error in these
-  cases.
-* `cache` See `cache` property above.  Pass in a previously generated
-  cache object to save some fs calls.
-* `statCache` A cache of results of filesystem information, to prevent
-  unnecessary stat calls.  While it should not normally be necessary
-  to set this, you may pass the statCache from one glob() call to the
-  options object of another, if you know that the filesystem will not
-  change between calls.  (See "Race Conditions" below.)
-* `symlinks` A cache of known symbolic links.  You may pass in a
-  previously generated `symlinks` object to save `lstat` calls when
-  resolving `**` matches.
-* `sync` DEPRECATED: use `glob.sync(pattern, opts)` instead.
-* `nounique` In some cases, brace-expanded patterns can result in the
-  same file showing up multiple times in the result set.  By default,
-  this implementation prevents duplicates in the result set.  Set this
-  flag to disable that behavior.
-* `nonull` Set to never return an empty set, instead returning a set
-  containing the pattern itself.  This is the default in glob(3).
-* `debug` Set to enable debug logging in minimatch and glob.
-* `nobrace` Do not expand `{a,b}` and `{1..3}` brace sets.
-* `noglobstar` Do not match `**` against multiple filenames.  (Ie,
-  treat it as a normal `*` instead.)
-* `noext` Do not match `+(a|b)` "extglob" patterns.
-* `nocase` Perform a case-insensitive match.  Note: on
-  case-insensitive filesystems, non-magic patterns will match by
-  default, since `stat` and `readdir` will not raise errors.
-* `matchBase` Perform a basename-only match if the pattern does not
-  contain any slash characters.  That is, `*.js` would be treated as
-  equivalent to `**/*.js`, matching all js files in all directories.
-* `nodir` Do not match directories, only files.  (Note: to match
-  *only* directories, simply put a `/` at the end of the pattern.)
-* `ignore` Add a pattern or an array of patterns to exclude matches.
-* `follow` Follow symlinked directories when expanding `**` patterns.
-  Note that this can result in a lot of duplicate references in the
-  presence of cyclic links.
-* `realpath` Set to true to call `fs.realpath` on all of the results.
-  In the case of a symlink that cannot be resolved, the full absolute
-  path to the matched entry is returned (though it will usually be a
-  broken symlink)
-* `nonegate` Suppress deprecated `negate` behavior.  (See below.)
-  Default=true
-* `nocomment` Suppress deprecated `comment` behavior.  (See below.)
-  Default=true
-
-## Comparisons to other fnmatch/glob implementations
-
-While strict compliance with the existing standards is a worthwhile
-goal, some discrepancies exist between node-glob and other
-implementations, and are intentional.
-
-The double-star character `**` is supported by default, unless the
-`noglobstar` flag is set.  This is supported in the manner of bsdglob
-and bash 4.3, where `**` only has special significance if it is the only
-thing in a path part.  That is, `a/**/b` will match `a/x/y/b`, but
-`a/**b` will not.
-
-Note that symlinked directories are not crawled as part of a `**`,
-though their contents may match against subsequent portions of the
-pattern.  This prevents infinite loops and duplicates and the like.
-
-If an escaped pattern has no matches, and the `nonull` flag is set,
-then glob returns the pattern as-provided, rather than
-interpreting the character escapes.  For example,
-`glob.match([], "\\*a\\?")` will return `"\\*a\\?"` rather than
-`"*a?"`.  This is akin to setting the `nullglob` option in bash, except
-that it does not resolve escaped pattern characters.
-
-If brace expansion is not disabled, then it is performed before any
-other interpretation of the glob pattern.  Thus, a pattern like
-`+(a|{b),c)}`, which would not be valid in bash or zsh, is expanded
-**first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are
-checked for validity.  Since those two are valid, matching proceeds.
-
-### Comments and Negation
-
-**Note**: In version 5 of this module, negation and comments are
-**disabled** by default.  You can explicitly set `nonegate:false` or
-`nocomment:false` to re-enable them.  They are going away entirely in
-version 6.
-
-The intent for negation would be for a pattern starting with `!` to
-match everything that *doesn't* match the supplied pattern.  However,
-the implementation is weird.  It is better to use the `ignore` option
-to set a pattern or set of patterns to exclude from matches.  If you
-want the "everything except *x*" type of behavior, you can use `**` as
-the main pattern, and set an `ignore` for the things to exclude.
-
-The comments feature is added in minimatch, primarily to more easily
-support use cases like ignore files, where a `#` at the start of a
-line makes the pattern "empty".  However, in the context of a
-straightforward filesystem globber, "comments" don't make much sense.
-
-## Windows
-
-**Please only use forward-slashes in glob expressions.**
-
-Though windows uses either `/` or `\` as its path separator, only `/`
-characters are used by this glob implementation.  You must use
-forward-slashes **only** in glob expressions.  Back-slashes will always
-be interpreted as escape characters, not path separators.
-
-Results from absolute patterns such as `/foo/*` are mounted onto the
-root setting using `path.join`.  On windows, this will by default result
-in `/foo/*` matching `C:\foo\bar.txt`.
-
-## Race Conditions
-
-Glob searching, by its very nature, is susceptible to race conditions,
-since it relies on directory walking and such.
-
-As a result, it is possible that a file that exists when glob looks for
-it may have been deleted or modified by the time it returns the result.
-
-As part of its internal implementation, this program caches all stat
-and readdir calls that it makes, in order to cut down on system
-overhead.  However, this also makes it even more susceptible to races,
-especially if the cache or statCache objects are reused between glob
-calls.
-
-Users are thus advised not to use a glob result as a guarantee of
-filesystem state in the face of rapid changes.  For the vast majority
-of operations, this is never a problem.
-
-## Contributing
-
-Any change to behavior (including bugfixes) must come with a test.
-
-Patches that fail tests or reduce performance will be rejected.
-
-```
-# to run tests
-npm test
-
-# to re-generate test fixtures
-npm run test-regen
-
-# to benchmark against bash/zsh
-npm run bench
-
-# to profile javascript
-npm run prof
-```
diff --git a/bin/node_modules/cordova-common/node_modules/glob/common.js b/bin/node_modules/cordova-common/node_modules/glob/common.js
deleted file mode 100644
index e36a631..0000000
--- a/bin/node_modules/cordova-common/node_modules/glob/common.js
+++ /dev/null
@@ -1,245 +0,0 @@
-exports.alphasort = alphasort
-exports.alphasorti = alphasorti
-exports.setopts = setopts
-exports.ownProp = ownProp
-exports.makeAbs = makeAbs
-exports.finish = finish
-exports.mark = mark
-exports.isIgnored = isIgnored
-exports.childrenIgnored = childrenIgnored
-
-function ownProp (obj, field) {
-  return Object.prototype.hasOwnProperty.call(obj, field)
-}
-
-var path = require("path")
-var minimatch = require("minimatch")
-var isAbsolute = require("path-is-absolute")
-var Minimatch = minimatch.Minimatch
-
-function alphasorti (a, b) {
-  return a.toLowerCase().localeCompare(b.toLowerCase())
-}
-
-function alphasort (a, b) {
-  return a.localeCompare(b)
-}
-
-function setupIgnores (self, options) {
-  self.ignore = options.ignore || []
-
-  if (!Array.isArray(self.ignore))
-    self.ignore = [self.ignore]
-
-  if (self.ignore.length) {
-    self.ignore = self.ignore.map(ignoreMap)
-  }
-}
-
-function ignoreMap (pattern) {
-  var gmatcher = null
-  if (pattern.slice(-3) === '/**') {
-    var gpattern = pattern.replace(/(\/\*\*)+$/, '')
-    gmatcher = new Minimatch(gpattern)
-  }
-
-  return {
-    matcher: new Minimatch(pattern),
-    gmatcher: gmatcher
-  }
-}
-
-function setopts (self, pattern, options) {
-  if (!options)
-    options = {}
-
-  // base-matching: just use globstar for that.
-  if (options.matchBase && -1 === pattern.indexOf("/")) {
-    if (options.noglobstar) {
-      throw new Error("base matching requires globstar")
-    }
-    pattern = "**/" + pattern
-  }
-
-  self.silent = !!options.silent
-  self.pattern = pattern
-  self.strict = options.strict !== false
-  self.realpath = !!options.realpath
-  self.realpathCache = options.realpathCache || Object.create(null)
-  self.follow = !!options.follow
-  self.dot = !!options.dot
-  self.mark = !!options.mark
-  self.nodir = !!options.nodir
-  if (self.nodir)
-    self.mark = true
-  self.sync = !!options.sync
-  self.nounique = !!options.nounique
-  self.nonull = !!options.nonull
-  self.nosort = !!options.nosort
-  self.nocase = !!options.nocase
-  self.stat = !!options.stat
-  self.noprocess = !!options.noprocess
-
-  self.maxLength = options.maxLength || Infinity
-  self.cache = options.cache || Object.create(null)
-  self.statCache = options.statCache || Object.create(null)
-  self.symlinks = options.symlinks || Object.create(null)
-
-  setupIgnores(self, options)
-
-  self.changedCwd = false
-  var cwd = process.cwd()
-  if (!ownProp(options, "cwd"))
-    self.cwd = cwd
-  else {
-    self.cwd = options.cwd
-    self.changedCwd = path.resolve(options.cwd) !== cwd
-  }
-
-  self.root = options.root || path.resolve(self.cwd, "/")
-  self.root = path.resolve(self.root)
-  if (process.platform === "win32")
-    self.root = self.root.replace(/\\/g, "/")
-
-  self.nomount = !!options.nomount
-
-  // disable comments and negation unless the user explicitly
-  // passes in false as the option.
-  options.nonegate = options.nonegate === false ? false : true
-  options.nocomment = options.nocomment === false ? false : true
-  deprecationWarning(options)
-
-  self.minimatch = new Minimatch(pattern, options)
-  self.options = self.minimatch.options
-}
-
-// TODO(isaacs): remove entirely in v6
-// exported to reset in tests
-exports.deprecationWarned
-function deprecationWarning(options) {
-  if (!options.nonegate || !options.nocomment) {
-    if (process.noDeprecation !== true && !exports.deprecationWarned) {
-      var msg = 'glob WARNING: comments and negation will be disabled in v6'
-      if (process.throwDeprecation)
-        throw new Error(msg)
-      else if (process.traceDeprecation)
-        console.trace(msg)
-      else
-        console.error(msg)
-
-      exports.deprecationWarned = true
-    }
-  }
-}
-
-function finish (self) {
-  var nou = self.nounique
-  var all = nou ? [] : Object.create(null)
-
-  for (var i = 0, l = self.matches.length; i < l; i ++) {
-    var matches = self.matches[i]
-    if (!matches || Object.keys(matches).length === 0) {
-      if (self.nonull) {
-        // do like the shell, and spit out the literal glob
-        var literal = self.minimatch.globSet[i]
-        if (nou)
-          all.push(literal)
-        else
-          all[literal] = true
-      }
-    } else {
-      // had matches
-      var m = Object.keys(matches)
-      if (nou)
-        all.push.apply(all, m)
-      else
-        m.forEach(function (m) {
-          all[m] = true
-        })
-    }
-  }
-
-  if (!nou)
-    all = Object.keys(all)
-
-  if (!self.nosort)
-    all = all.sort(self.nocase ? alphasorti : alphasort)
-
-  // at *some* point we statted all of these
-  if (self.mark) {
-    for (var i = 0; i < all.length; i++) {
-      all[i] = self._mark(all[i])
-    }
-    if (self.nodir) {
-      all = all.filter(function (e) {
-        return !(/\/$/.test(e))
-      })
-    }
-  }
-
-  if (self.ignore.length)
-    all = all.filter(function(m) {
-      return !isIgnored(self, m)
-    })
-
-  self.found = all
-}
-
-function mark (self, p) {
-  var abs = makeAbs(self, p)
-  var c = self.cache[abs]
-  var m = p
-  if (c) {
-    var isDir = c === 'DIR' || Array.isArray(c)
-    var slash = p.slice(-1) === '/'
-
-    if (isDir && !slash)
-      m += '/'
-    else if (!isDir && slash)
-      m = m.slice(0, -1)
-
-    if (m !== p) {
-      var mabs = makeAbs(self, m)
-      self.statCache[mabs] = self.statCache[abs]
-      self.cache[mabs] = self.cache[abs]
-    }
-  }
-
-  return m
-}
-
-// lotta situps...
-function makeAbs (self, f) {
-  var abs = f
-  if (f.charAt(0) === '/') {
-    abs = path.join(self.root, f)
-  } else if (isAbsolute(f) || f === '') {
-    abs = f
-  } else if (self.changedCwd) {
-    abs = path.resolve(self.cwd, f)
-  } else {
-    abs = path.resolve(f)
-  }
-  return abs
-}
-
-
-// Return true, if pattern ends with globstar '**', for the accompanying parent directory.
-// Ex:- If node_modules/** is the pattern, add 'node_modules' to ignore list along with it's contents
-function isIgnored (self, path) {
-  if (!self.ignore.length)
-    return false
-
-  return self.ignore.some(function(item) {
-    return item.matcher.match(path) || !!(item.gmatcher && item.gmatcher.match(path))
-  })
-}
-
-function childrenIgnored (self, path) {
-  if (!self.ignore.length)
-    return false
-
-  return self.ignore.some(function(item) {
-    return !!(item.gmatcher && item.gmatcher.match(path))
-  })
-}
diff --git a/bin/node_modules/cordova-common/node_modules/glob/glob.js b/bin/node_modules/cordova-common/node_modules/glob/glob.js
deleted file mode 100644
index 022d2ac..0000000
--- a/bin/node_modules/cordova-common/node_modules/glob/glob.js
+++ /dev/null
@@ -1,752 +0,0 @@
-// Approach:
-//
-// 1. Get the minimatch set
-// 2. For each pattern in the set, PROCESS(pattern, false)
-// 3. Store matches per-set, then uniq them
-//
-// PROCESS(pattern, inGlobStar)
-// Get the first [n] items from pattern that are all strings
-// Join these together.  This is PREFIX.
-//   If there is no more remaining, then stat(PREFIX) and
-//   add to matches if it succeeds.  END.
-//
-// If inGlobStar and PREFIX is symlink and points to dir
-//   set ENTRIES = []
-// else readdir(PREFIX) as ENTRIES
-//   If fail, END
-//
-// with ENTRIES
-//   If pattern[n] is GLOBSTAR
-//     // handle the case where the globstar match is empty
-//     // by pruning it out, and testing the resulting pattern
-//     PROCESS(pattern[0..n] + pattern[n+1 .. $], false)
-//     // handle other cases.
-//     for ENTRY in ENTRIES (not dotfiles)
-//       // attach globstar + tail onto the entry
-//       // Mark that this entry is a globstar match
-//       PROCESS(pattern[0..n] + ENTRY + pattern[n .. $], true)
-//
-//   else // not globstar
-//     for ENTRY in ENTRIES (not dotfiles, unless pattern[n] is dot)
-//       Test ENTRY against pattern[n]
-//       If fails, continue
-//       If passes, PROCESS(pattern[0..n] + item + pattern[n+1 .. $])
-//
-// Caveat:
-//   Cache all stats and readdirs results to minimize syscall.  Since all
-//   we ever care about is existence and directory-ness, we can just keep
-//   `true` for files, and [children,...] for directories, or `false` for
-//   things that don't exist.
-
-module.exports = glob
-
-var fs = require('fs')
-var minimatch = require('minimatch')
-var Minimatch = minimatch.Minimatch
-var inherits = require('inherits')
-var EE = require('events').EventEmitter
-var path = require('path')
-var assert = require('assert')
-var isAbsolute = require('path-is-absolute')
-var globSync = require('./sync.js')
-var common = require('./common.js')
-var alphasort = common.alphasort
-var alphasorti = common.alphasorti
-var setopts = common.setopts
-var ownProp = common.ownProp
-var inflight = require('inflight')
-var util = require('util')
-var childrenIgnored = common.childrenIgnored
-var isIgnored = common.isIgnored
-
-var once = require('once')
-
-function glob (pattern, options, cb) {
-  if (typeof options === 'function') cb = options, options = {}
-  if (!options) options = {}
-
-  if (options.sync) {
-    if (cb)
-      throw new TypeError('callback provided to sync glob')
-    return globSync(pattern, options)
-  }
-
-  return new Glob(pattern, options, cb)
-}
-
-glob.sync = globSync
-var GlobSync = glob.GlobSync = globSync.GlobSync
-
-// old api surface
-glob.glob = glob
-
-glob.hasMagic = function (pattern, options_) {
-  var options = util._extend({}, options_)
-  options.noprocess = true
-
-  var g = new Glob(pattern, options)
-  var set = g.minimatch.set
-  if (set.length > 1)
-    return true
-
-  for (var j = 0; j < set[0].length; j++) {
-    if (typeof set[0][j] !== 'string')
-      return true
-  }
-
-  return false
-}
-
-glob.Glob = Glob
-inherits(Glob, EE)
-function Glob (pattern, options, cb) {
-  if (typeof options === 'function') {
-    cb = options
-    options = null
-  }
-
-  if (options && options.sync) {
-    if (cb)
-      throw new TypeError('callback provided to sync glob')
-    return new GlobSync(pattern, options)
-  }
-
-  if (!(this instanceof Glob))
-    return new Glob(pattern, options, cb)
-
-  setopts(this, pattern, options)
-  this._didRealPath = false
-
-  // process each pattern in the minimatch set
-  var n = this.minimatch.set.length
-
-  // The matches are stored as {<filename>: true,...} so that
-  // duplicates are automagically pruned.
-  // Later, we do an Object.keys() on these.
-  // Keep them as a list so we can fill in when nonull is set.
-  this.matches = new Array(n)
-
-  if (typeof cb === 'function') {
-    cb = once(cb)
-    this.on('error', cb)
-    this.on('end', function (matches) {
-      cb(null, matches)
-    })
-  }
-
-  var self = this
-  var n = this.minimatch.set.length
-  this._processing = 0
-  this.matches = new Array(n)
-
-  this._emitQueue = []
-  this._processQueue = []
-  this.paused = false
-
-  if (this.noprocess)
-    return this
-
-  if (n === 0)
-    return done()
-
-  for (var i = 0; i < n; i ++) {
-    this._process(this.minimatch.set[i], i, false, done)
-  }
-
-  function done () {
-    --self._processing
-    if (self._processing <= 0)
-      self._finish()
-  }
-}
-
-Glob.prototype._finish = function () {
-  assert(this instanceof Glob)
-  if (this.aborted)
-    return
-
-  if (this.realpath && !this._didRealpath)
-    return this._realpath()
-
-  common.finish(this)
-  this.emit('end', this.found)
-}
-
-Glob.prototype._realpath = function () {
-  if (this._didRealpath)
-    return
-
-  this._didRealpath = true
-
-  var n = this.matches.length
-  if (n === 0)
-    return this._finish()
-
-  var self = this
-  for (var i = 0; i < this.matches.length; i++)
-    this._realpathSet(i, next)
-
-  function next () {
-    if (--n === 0)
-      self._finish()
-  }
-}
-
-Glob.prototype._realpathSet = function (index, cb) {
-  var matchset = this.matches[index]
-  if (!matchset)
-    return cb()
-
-  var found = Object.keys(matchset)
-  var self = this
-  var n = found.length
-
-  if (n === 0)
-    return cb()
-
-  var set = this.matches[index] = Object.create(null)
-  found.forEach(function (p, i) {
-    // If there's a problem with the stat, then it means that
-    // one or more of the links in the realpath couldn't be
-    // resolved.  just return the abs value in that case.
-    p = self._makeAbs(p)
-    fs.realpath(p, self.realpathCache, function (er, real) {
-      if (!er)
-        set[real] = true
-      else if (er.syscall === 'stat')
-        set[p] = true
-      else
-        self.emit('error', er) // srsly wtf right here
-
-      if (--n === 0) {
-        self.matches[index] = set
-        cb()
-      }
-    })
-  })
-}
-
-Glob.prototype._mark = function (p) {
-  return common.mark(this, p)
-}
-
-Glob.prototype._makeAbs = function (f) {
-  return common.makeAbs(this, f)
-}
-
-Glob.prototype.abort = function () {
-  this.aborted = true
-  this.emit('abort')
-}
-
-Glob.prototype.pause = function () {
-  if (!this.paused) {
-    this.paused = true
-    this.emit('pause')
-  }
-}
-
-Glob.prototype.resume = function () {
-  if (this.paused) {
-    this.emit('resume')
-    this.paused = false
-    if (this._emitQueue.length) {
-      var eq = this._emitQueue.slice(0)
-      this._emitQueue.length = 0
-      for (var i = 0; i < eq.length; i ++) {
-        var e = eq[i]
-        this._emitMatch(e[0], e[1])
-      }
-    }
-    if (this._processQueue.length) {
-      var pq = this._processQueue.slice(0)
-      this._processQueue.length = 0
-      for (var i = 0; i < pq.length; i ++) {
-        var p = pq[i]
-        this._processing--
-        this._process(p[0], p[1], p[2], p[3])
-      }
-    }
-  }
-}
-
-Glob.prototype._process = function (pattern, index, inGlobStar, cb) {
-  assert(this instanceof Glob)
-  assert(typeof cb === 'function')
-
-  if (this.aborted)
-    return
-
-  this._processing++
-  if (this.paused) {
-    this._processQueue.push([pattern, index, inGlobStar, cb])
-    return
-  }
-
-  //console.error('PROCESS %d', this._processing, pattern)
-
-  // Get the first [n] parts of pattern that are all strings.
-  var n = 0
-  while (typeof pattern[n] === 'string') {
-    n ++
-  }
-  // now n is the index of the first one that is *not* a string.
-
-  // see if there's anything else
-  var prefix
-  switch (n) {
-    // if not, then this is rather simple
-    case pattern.length:
-      this._processSimple(pattern.join('/'), index, cb)
-      return
-
-    case 0:
-      // pattern *starts* with some non-trivial item.
-      // going to readdir(cwd), but not include the prefix in matches.
-      prefix = null
-      break
-
-    default:
-      // pattern has some string bits in the front.
-      // whatever it starts with, whether that's 'absolute' like /foo/bar,
-      // or 'relative' like '../baz'
-      prefix = pattern.slice(0, n).join('/')
-      break
-  }
-
-  var remain = pattern.slice(n)
-
-  // get the list of entries.
-  var read
-  if (prefix === null)
-    read = '.'
-  else if (isAbsolute(prefix) || isAbsolute(pattern.join('/'))) {
-    if (!prefix || !isAbsolute(prefix))
-      prefix = '/' + prefix
-    read = prefix
-  } else
-    read = prefix
-
-  var abs = this._makeAbs(read)
-
-  //if ignored, skip _processing
-  if (childrenIgnored(this, read))
-    return cb()
-
-  var isGlobStar = remain[0] === minimatch.GLOBSTAR
-  if (isGlobStar)
-    this._processGlobStar(prefix, read, abs, remain, index, inGlobStar, cb)
-  else
-    this._processReaddir(prefix, read, abs, remain, index, inGlobStar, cb)
-}
-
-Glob.prototype._processReaddir = function (prefix, read, abs, remain, index, inGlobStar, cb) {
-  var self = this
-  this._readdir(abs, inGlobStar, function (er, entries) {
-    return self._processReaddir2(prefix, read, abs, remain, index, inGlobStar, entries, cb)
-  })
-}
-
-Glob.prototype._processReaddir2 = function (prefix, read, abs, remain, index, inGlobStar, entries, cb) {
-
-  // if the abs isn't a dir, then nothing can match!
-  if (!entries)
-    return cb()
-
-  // It will only match dot entries if it starts with a dot, or if
-  // dot is set.  Stuff like @(.foo|.bar) isn't allowed.
-  var pn = remain[0]
-  var negate = !!this.minimatch.negate
-  var rawGlob = pn._glob
-  var dotOk = this.dot || rawGlob.charAt(0) === '.'
-
-  var matchedEntries = []
-  for (var i = 0; i < entries.length; i++) {
-    var e = entries[i]
-    if (e.charAt(0) !== '.' || dotOk) {
-      var m
-      if (negate && !prefix) {
-        m = !e.match(pn)
-      } else {
-        m = e.match(pn)
-      }
-      if (m)
-        matchedEntries.push(e)
-    }
-  }
-
-  //console.error('prd2', prefix, entries, remain[0]._glob, matchedEntries)
-
-  var len = matchedEntries.length
-  // If there are no matched entries, then nothing matches.
-  if (len === 0)
-    return cb()
-
-  // if this is the last remaining pattern bit, then no need for
-  // an additional stat *unless* the user has specified mark or
-  // stat explicitly.  We know they exist, since readdir returned
-  // them.
-
-  if (remain.length === 1 && !this.mark && !this.stat) {
-    if (!this.matches[index])
-      this.matches[index] = Object.create(null)
-
-    for (var i = 0; i < len; i ++) {
-      var e = matchedEntries[i]
-      if (prefix) {
-        if (prefix !== '/')
-          e = prefix + '/' + e
-        else
-          e = prefix + e
-      }
-
-      if (e.charAt(0) === '/' && !this.nomount) {
-        e = path.join(this.root, e)
-      }
-      this._emitMatch(index, e)
-    }
-    // This was the last one, and no stats were needed
-    return cb()
-  }
-
-  // now test all matched entries as stand-ins for that part
-  // of the pattern.
-  remain.shift()
-  for (var i = 0; i < len; i ++) {
-    var e = matchedEntries[i]
-    var newPattern
-    if (prefix) {
-      if (prefix !== '/')
-        e = prefix + '/' + e
-      else
-        e = prefix + e
-    }
-    this._process([e].concat(remain), index, inGlobStar, cb)
-  }
-  cb()
-}
-
-Glob.prototype._emitMatch = function (index, e) {
-  if (this.aborted)
-    return
-
-  if (this.matches[index][e])
-    return
-
-  if (isIgnored(this, e))
-    return
-
-  if (this.paused) {
-    this._emitQueue.push([index, e])
-    return
-  }
-
-  var abs = this._makeAbs(e)
-
-  if (this.nodir) {
-    var c = this.cache[abs]
-    if (c === 'DIR' || Array.isArray(c))
-      return
-  }
-
-  if (this.mark)
-    e = this._mark(e)
-
-  this.matches[index][e] = true
-
-  var st = this.statCache[abs]
-  if (st)
-    this.emit('stat', e, st)
-
-  this.emit('match', e)
-}
-
-Glob.prototype._readdirInGlobStar = function (abs, cb) {
-  if (this.aborted)
-    return
-
-  // follow all symlinked directories forever
-  // just proceed as if this is a non-globstar situation
-  if (this.follow)
-    return this._readdir(abs, false, cb)
-
-  var lstatkey = 'lstat\0' + abs
-  var self = this
-  var lstatcb = inflight(lstatkey, lstatcb_)
-
-  if (lstatcb)
-    fs.lstat(abs, lstatcb)
-
-  function lstatcb_ (er, lstat) {
-    if (er)
-      return cb()
-
-    var isSym = lstat.isSymbolicLink()
-    self.symlinks[abs] = isSym
-
-    // If it's not a symlink or a dir, then it's definitely a regular file.
-    // don't bother doing a readdir in that case.
-    if (!isSym && !lstat.isDirectory()) {
-      self.cache[abs] = 'FILE'
-      cb()
-    } else
-      self._readdir(abs, false, cb)
-  }
-}
-
-Glob.prototype._readdir = function (abs, inGlobStar, cb) {
-  if (this.aborted)
-    return
-
-  cb = inflight('readdir\0'+abs+'\0'+inGlobStar, cb)
-  if (!cb)
-    return
-
-  //console.error('RD %j %j', +inGlobStar, abs)
-  if (inGlobStar && !ownProp(this.symlinks, abs))
-    return this._readdirInGlobStar(abs, cb)
-
-  if (ownProp(this.cache, abs)) {
-    var c = this.cache[abs]
-    if (!c || c === 'FILE')
-      return cb()
-
-    if (Array.isArray(c))
-      return cb(null, c)
-  }
-
-  var self = this
-  fs.readdir(abs, readdirCb(this, abs, cb))
-}
-
-function readdirCb (self, abs, cb) {
-  return function (er, entries) {
-    if (er)
-      self._readdirError(abs, er, cb)
-    else
-      self._readdirEntries(abs, entries, cb)
-  }
-}
-
-Glob.prototype._readdirEntries = function (abs, entries, cb) {
-  if (this.aborted)
-    return
-
-  // if we haven't asked to stat everything, then just
-  // assume that everything in there exists, so we can avoid
-  // having to stat it a second time.
-  if (!this.mark && !this.stat) {
-    for (var i = 0; i < entries.length; i ++) {
-      var e = entries[i]
-      if (abs === '/')
-        e = abs + e
-      else
-        e = abs + '/' + e
-      this.cache[e] = true
-    }
-  }
-
-  this.cache[abs] = entries
-  return cb(null, entries)
-}
-
-Glob.prototype._readdirError = function (f, er, cb) {
-  if (this.aborted)
-    return
-
-  // handle errors, and cache the information
-  switch (er.code) {
-    case 'ENOTSUP': // https://github.com/isaacs/node-glob/issues/205
-    case 'ENOTDIR': // totally normal. means it *does* exist.
-      this.cache[this._makeAbs(f)] = 'FILE'
-      break
-
-    case 'ENOENT': // not terribly unusual
-    case 'ELOOP':
-    case 'ENAMETOOLONG':
-    case 'UNKNOWN':
-      this.cache[this._makeAbs(f)] = false
-      break
-
-    default: // some unusual error.  Treat as failure.
-      this.cache[this._makeAbs(f)] = false
-      if (this.strict) {
-        this.emit('error', er)
-        // If the error is handled, then we abort
-        // if not, we threw out of here
-        this.abort()
-      }
-      if (!this.silent)
-        console.error('glob error', er)
-      break
-  }
-
-  return cb()
-}
-
-Glob.prototype._processGlobStar = function (prefix, read, abs, remain, index, inGlobStar, cb) {
-  var self = this
-  this._readdir(abs, inGlobStar, function (er, entries) {
-    self._processGlobStar2(prefix, read, abs, remain, index, inGlobStar, entries, cb)
-  })
-}
-
-
-Glob.prototype._processGlobStar2 = function (prefix, read, abs, remain, index, inGlobStar, entries, cb) {
-  //console.error('pgs2', prefix, remain[0], entries)
-
-  // no entries means not a dir, so it can never have matches
-  // foo.txt/** doesn't match foo.txt
-  if (!entries)
-    return cb()
-
-  // test without the globstar, and with every child both below
-  // and replacing the globstar.
-  var remainWithoutGlobStar = remain.slice(1)
-  var gspref = prefix ? [ prefix ] : []
-  var noGlobStar = gspref.concat(remainWithoutGlobStar)
-
-  // the noGlobStar pattern exits the inGlobStar state
-  this._process(noGlobStar, index, false, cb)
-
-  var isSym = this.symlinks[abs]
-  var len = entries.length
-
-  // If it's a symlink, and we're in a globstar, then stop
-  if (isSym && inGlobStar)
-    return cb()
-
-  for (var i = 0; i < len; i++) {
-    var e = entries[i]
-    if (e.charAt(0) === '.' && !this.dot)
-      continue
-
-    // these two cases enter the inGlobStar state
-    var instead = gspref.concat(entries[i], remainWithoutGlobStar)
-    this._process(instead, index, true, cb)
-
-    var below = gspref.concat(entries[i], remain)
-    this._process(below, index, true, cb)
-  }
-
-  cb()
-}
-
-Glob.prototype._processSimple = function (prefix, index, cb) {
-  // XXX review this.  Shouldn't it be doing the mounting etc
-  // before doing stat?  kinda weird?
-  var self = this
-  this._stat(prefix, function (er, exists) {
-    self._processSimple2(prefix, index, er, exists, cb)
-  })
-}
-Glob.prototype._processSimple2 = function (prefix, index, er, exists, cb) {
-
-  //console.error('ps2', prefix, exists)
-
-  if (!this.matches[index])
-    this.matches[index] = Object.create(null)
-
-  // If it doesn't exist, then just mark the lack of results
-  if (!exists)
-    return cb()
-
-  if (prefix && isAbsolute(prefix) && !this.nomount) {
-    var trail = /[\/\\]$/.test(prefix)
-    if (prefix.charAt(0) === '/') {
-      prefix = path.join(this.root, prefix)
-    } else {
-      prefix = path.resolve(this.root, prefix)
-      if (trail)
-        prefix += '/'
-    }
-  }
-
-  if (process.platform === 'win32')
-    prefix = prefix.replace(/\\/g, '/')
-
-  // Mark this as a match
-  this._emitMatch(index, prefix)
-  cb()
-}
-
-// Returns either 'DIR', 'FILE', or false
-Glob.prototype._stat = function (f, cb) {
-  var abs = this._makeAbs(f)
-  var needDir = f.slice(-1) === '/'
-
-  if (f.length > this.maxLength)
-    return cb()
-
-  if (!this.stat && ownProp(this.cache, abs)) {
-    var c = this.cache[abs]
-
-    if (Array.isArray(c))
-      c = 'DIR'
-
-    // It exists, but maybe not how we need it
-    if (!needDir || c === 'DIR')
-      return cb(null, c)
-
-    if (needDir && c === 'FILE')
-      return cb()
-
-    // otherwise we have to stat, because maybe c=true
-    // if we know it exists, but not what it is.
-  }
-
-  var exists
-  var stat = this.statCache[abs]
-  if (stat !== undefined) {
-    if (stat === false)
-      return cb(null, stat)
-    else {
-      var type = stat.isDirectory() ? 'DIR' : 'FILE'
-      if (needDir && type === 'FILE')
-        return cb()
-      else
-        return cb(null, type, stat)
-    }
-  }
-
-  var self = this
-  var statcb = inflight('stat\0' + abs, lstatcb_)
-  if (statcb)
-    fs.lstat(abs, statcb)
-
-  function lstatcb_ (er, lstat) {
-    if (lstat && lstat.isSymbolicLink()) {
-      // If it's a symlink, then treat it as the target, unless
-      // the target does not exist, then treat it as a file.
-      return fs.stat(abs, function (er, stat) {
-        if (er)
-          self._stat2(f, abs, null, lstat, cb)
-        else
-          self._stat2(f, abs, er, stat, cb)
-      })
-    } else {
-      self._stat2(f, abs, er, lstat, cb)
-    }
-  }
-}
-
-Glob.prototype._stat2 = function (f, abs, er, stat, cb) {
-  if (er) {
-    this.statCache[abs] = false
-    return cb()
-  }
-
-  var needDir = f.slice(-1) === '/'
-  this.statCache[abs] = stat
-
-  if (abs.slice(-1) === '/' && !stat.isDirectory())
-    return cb(null, false, stat)
-
-  var c = stat.isDirectory() ? 'DIR' : 'FILE'
-  this.cache[abs] = this.cache[abs] || c
-
-  if (needDir && c !== 'DIR')
-    return cb()
-
-  return cb(null, c, stat)
-}
diff --git a/bin/node_modules/cordova-common/node_modules/glob/node_modules/inflight/.eslintrc b/bin/node_modules/cordova-common/node_modules/glob/node_modules/inflight/.eslintrc
deleted file mode 100644
index b7a1550..0000000
--- a/bin/node_modules/cordova-common/node_modules/glob/node_modules/inflight/.eslintrc
+++ /dev/null
@@ -1,17 +0,0 @@
-{
-  "env" : {
-    "node" : true
-  },
-  "rules" : {
-    "semi": [2, "never"],
-    "strict": 0,
-    "quotes": [1, "single", "avoid-escape"],
-    "no-use-before-define": 0,
-    "curly": 0,
-    "no-underscore-dangle": 0,
-    "no-lonely-if": 1,
-    "no-unused-vars": [2, {"vars" : "all", "args" : "after-used"}],
-    "no-mixed-requires": 0,
-    "space-infix-ops": 0
-  }
-}
diff --git a/bin/node_modules/cordova-common/node_modules/glob/node_modules/inflight/LICENSE b/bin/node_modules/cordova-common/node_modules/glob/node_modules/inflight/LICENSE
deleted file mode 100644
index 05eeeb8..0000000
--- a/bin/node_modules/cordova-common/node_modules/glob/node_modules/inflight/LICENSE
+++ /dev/null
@@ -1,15 +0,0 @@
-The ISC License
-
-Copyright (c) Isaac Z. Schlueter
-
-Permission to use, copy, modify, and/or distribute this software for any
-purpose with or without fee is hereby granted, provided that the above
-copyright notice and this permission notice appear in all copies.
-
-THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
-WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
-ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
-ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
-IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/bin/node_modules/cordova-common/node_modules/glob/node_modules/inflight/README.md b/bin/node_modules/cordova-common/node_modules/glob/node_modules/inflight/README.md
deleted file mode 100644
index 6dc8929..0000000
--- a/bin/node_modules/cordova-common/node_modules/glob/node_modules/inflight/README.md
+++ /dev/null
@@ -1,37 +0,0 @@
-# inflight
-
-Add callbacks to requests in flight to avoid async duplication
-
-## USAGE
-
-```javascript
-var inflight = require('inflight')
-
-// some request that does some stuff
-function req(key, callback) {
-  // key is any random string.  like a url or filename or whatever.
-  //
-  // will return either a falsey value, indicating that the
-  // request for this key is already in flight, or a new callback
-  // which when called will call all callbacks passed to inflightk
-  // with the same key
-  callback = inflight(key, callback)
-
-  // If we got a falsey value back, then there's already a req going
-  if (!callback) return
-
-  // this is where you'd fetch the url or whatever
-  // callback is also once()-ified, so it can safely be assigned
-  // to multiple events etc.  First call wins.
-  setTimeout(function() {
-    callback(null, key)
-  }, 100)
-}
-
-// only assigns a single setTimeout
-// when it dings, all cbs get called
-req('foo', cb1)
-req('foo', cb2)
-req('foo', cb3)
-req('foo', cb4)
-```
diff --git a/bin/node_modules/cordova-common/node_modules/glob/node_modules/inflight/inflight.js b/bin/node_modules/cordova-common/node_modules/glob/node_modules/inflight/inflight.js
deleted file mode 100644
index 8bc96cb..0000000
--- a/bin/node_modules/cordova-common/node_modules/glob/node_modules/inflight/inflight.js
+++ /dev/null
@@ -1,44 +0,0 @@
-var wrappy = require('wrappy')
-var reqs = Object.create(null)
-var once = require('once')
-
-module.exports = wrappy(inflight)
-
-function inflight (key, cb) {
-  if (reqs[key]) {
-    reqs[key].push(cb)
-    return null
-  } else {
-    reqs[key] = [cb]
-    return makeres(key)
-  }
-}
-
-function makeres (key) {
-  return once(function RES () {
-    var cbs = reqs[key]
-    var len = cbs.length
-    var args = slice(arguments)
-    for (var i = 0; i < len; i++) {
-      cbs[i].apply(null, args)
-    }
-    if (cbs.length > len) {
-      // added more in the interim.
-      // de-zalgo, just in case, but don't call again.
-      cbs.splice(0, len)
-      process.nextTick(function () {
-        RES.apply(null, args)
-      })
-    } else {
-      delete reqs[key]
-    }
-  })
-}
-
-function slice (args) {
-  var length = args.length
-  var array = []
-
-  for (var i = 0; i < length; i++) array[i] = args[i]
-  return array
-}
diff --git a/bin/node_modules/cordova-common/node_modules/glob/node_modules/inflight/node_modules/wrappy/LICENSE b/bin/node_modules/cordova-common/node_modules/glob/node_modules/inflight/node_modules/wrappy/LICENSE
deleted file mode 100644
index 19129e3..0000000
--- a/bin/node_modules/cordova-common/node_modules/glob/node_modules/inflight/node_modules/wrappy/LICENSE
+++ /dev/null
@@ -1,15 +0,0 @@
-The ISC License
-
-Copyright (c) Isaac Z. Schlueter and Contributors
-
-Permission to use, copy, modify, and/or distribute this software for any
-purpose with or without fee is hereby granted, provided that the above
-copyright notice and this permission notice appear in all copies.
-
-THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
-WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
-ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
-ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
-IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/bin/node_modules/cordova-common/node_modules/glob/node_modules/inflight/node_modules/wrappy/README.md b/bin/node_modules/cordova-common/node_modules/glob/node_modules/inflight/node_modules/wrappy/README.md
deleted file mode 100644
index 98eab25..0000000
--- a/bin/node_modules/cordova-common/node_modules/glob/node_modules/inflight/node_modules/wrappy/README.md
+++ /dev/null
@@ -1,36 +0,0 @@
-# wrappy
-
-Callback wrapping utility
-
-## USAGE
-
-```javascript
-var wrappy = require("wrappy")
-
-// var wrapper = wrappy(wrapperFunction)
-
-// make sure a cb is called only once
-// See also: http://npm.im/once for this specific use case
-var once = wrappy(function (cb) {
-  var called = false
-  return function () {
-    if (called) return
-    called = true
-    return cb.apply(this, arguments)
-  }
-})
-
-function printBoo () {
-  console.log('boo')
-}
-// has some rando property
-printBoo.iAmBooPrinter = true
-
-var onlyPrintOnce = once(printBoo)
-
-onlyPrintOnce() // prints 'boo'
-onlyPrintOnce() // does nothing
-
-// random property is retained!
-assert.equal(onlyPrintOnce.iAmBooPrinter, true)
-```
diff --git a/bin/node_modules/cordova-common/node_modules/glob/node_modules/inflight/node_modules/wrappy/package.json b/bin/node_modules/cordova-common/node_modules/glob/node_modules/inflight/node_modules/wrappy/package.json
deleted file mode 100644
index 9165c6e..0000000
--- a/bin/node_modules/cordova-common/node_modules/glob/node_modules/inflight/node_modules/wrappy/package.json
+++ /dev/null
@@ -1,52 +0,0 @@
-{
-  "name": "wrappy",
-  "version": "1.0.1",
-  "description": "Callback wrapping utility",
-  "main": "wrappy.js",
-  "directories": {
-    "test": "test"
-  },
-  "dependencies": {},
-  "devDependencies": {
-    "tap": "^0.4.12"
-  },
-  "scripts": {
-    "test": "tap test/*.js"
-  },
-  "repository": {
-    "type": "git",
-    "url": "https://github.com/npm/wrappy"
-  },
-  "author": {
-    "name": "Isaac Z. Schlueter",
-    "email": "i@izs.me",
-    "url": "http://blog.izs.me/"
-  },
-  "license": "ISC",
-  "bugs": {
-    "url": "https://github.com/npm/wrappy/issues"
-  },
-  "homepage": "https://github.com/npm/wrappy",
-  "gitHead": "006a8cbac6b99988315834c207896eed71fd069a",
-  "_id": "wrappy@1.0.1",
-  "_shasum": "1e65969965ccbc2db4548c6b84a6f2c5aedd4739",
-  "_from": "wrappy@1",
-  "_npmVersion": "2.0.0",
-  "_nodeVersion": "0.10.31",
-  "_npmUser": {
-    "name": "isaacs",
-    "email": "i@izs.me"
-  },
-  "maintainers": [
-    {
-      "name": "isaacs",
-      "email": "i@izs.me"
-    }
-  ],
-  "dist": {
-    "shasum": "1e65969965ccbc2db4548c6b84a6f2c5aedd4739",
-    "tarball": "http://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz"
-  },
-  "_resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz",
-  "readme": "ERROR: No README data found!"
-}
diff --git a/bin/node_modules/cordova-common/node_modules/glob/node_modules/inflight/node_modules/wrappy/test/basic.js b/bin/node_modules/cordova-common/node_modules/glob/node_modules/inflight/node_modules/wrappy/test/basic.js
deleted file mode 100644
index 5ed0fcd..0000000
--- a/bin/node_modules/cordova-common/node_modules/glob/node_modules/inflight/node_modules/wrappy/test/basic.js
+++ /dev/null
@@ -1,51 +0,0 @@
-var test = require('tap').test
-var wrappy = require('../wrappy.js')
-
-test('basic', function (t) {
-  function onceifier (cb) {
-    var called = false
-    return function () {
-      if (called) return
-      called = true
-      return cb.apply(this, arguments)
-    }
-  }
-  onceifier.iAmOnce = {}
-  var once = wrappy(onceifier)
-  t.equal(once.iAmOnce, onceifier.iAmOnce)
-
-  var called = 0
-  function boo () {
-    t.equal(called, 0)
-    called++
-  }
-  // has some rando property
-  boo.iAmBoo = true
-
-  var onlyPrintOnce = once(boo)
-
-  onlyPrintOnce() // prints 'boo'
-  onlyPrintOnce() // does nothing
-  t.equal(called, 1)
-
-  // random property is retained!
-  t.equal(onlyPrintOnce.iAmBoo, true)
-
-  var logs = []
-  var logwrap = wrappy(function (msg, cb) {
-    logs.push(msg + ' wrapping cb')
-    return function () {
-      logs.push(msg + ' before cb')
-      var ret = cb.apply(this, arguments)
-      logs.push(msg + ' after cb')
-    }
-  })
-
-  var c = logwrap('foo', function () {
-    t.same(logs, [ 'foo wrapping cb', 'foo before cb' ])
-  })
-  c()
-  t.same(logs, [ 'foo wrapping cb', 'foo before cb', 'foo after cb' ])
-
-  t.end()
-})
diff --git a/bin/node_modules/cordova-common/node_modules/glob/node_modules/inflight/node_modules/wrappy/wrappy.js b/bin/node_modules/cordova-common/node_modules/glob/node_modules/inflight/node_modules/wrappy/wrappy.js
deleted file mode 100644
index bb7e7d6..0000000
--- a/bin/node_modules/cordova-common/node_modules/glob/node_modules/inflight/node_modules/wrappy/wrappy.js
+++ /dev/null
@@ -1,33 +0,0 @@
-// Returns a wrapper function that returns a wrapped callback
-// The wrapper function should do some stuff, and return a
-// presumably different callback function.
-// This makes sure that own properties are retained, so that
-// decorations and such are not lost along the way.
-module.exports = wrappy
-function wrappy (fn, cb) {
-  if (fn && cb) return wrappy(fn)(cb)
-
-  if (typeof fn !== 'function')
-    throw new TypeError('need wrapper function')
-
-  Object.keys(fn).forEach(function (k) {
-    wrapper[k] = fn[k]
-  })
-
-  return wrapper
-
-  function wrapper() {
-    var args = new Array(arguments.length)
-    for (var i = 0; i < args.length; i++) {
-      args[i] = arguments[i]
-    }
-    var ret = fn.apply(this, args)
-    var cb = args[args.length-1]
-    if (typeof ret === 'function' && ret !== cb) {
-      Object.keys(cb).forEach(function (k) {
-        ret[k] = cb[k]
-      })
-    }
-    return ret
-  }
-}
diff --git a/bin/node_modules/cordova-common/node_modules/glob/node_modules/inflight/package.json b/bin/node_modules/cordova-common/node_modules/glob/node_modules/inflight/package.json
deleted file mode 100644
index 38417ea..0000000
--- a/bin/node_modules/cordova-common/node_modules/glob/node_modules/inflight/package.json
+++ /dev/null
@@ -1,61 +0,0 @@
-{
-  "name": "inflight",
-  "version": "1.0.4",
-  "description": "Add callbacks to requests in flight to avoid async duplication",
-  "main": "inflight.js",
-  "dependencies": {
-    "once": "^1.3.0",
-    "wrappy": "1"
-  },
-  "devDependencies": {
-    "tap": "^0.4.10"
-  },
-  "scripts": {
-    "test": "tap test.js"
-  },
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/isaacs/inflight"
-  },
-  "author": {
-    "name": "Isaac Z. Schlueter",
-    "email": "i@izs.me",
-    "url": "http://blog.izs.me/"
-  },
-  "bugs": {
-    "url": "https://github.com/isaacs/inflight/issues"
-  },
-  "homepage": "https://github.com/isaacs/inflight",
-  "license": "ISC",
-  "gitHead": "c7b5531d572a867064d4a1da9e013e8910b7d1ba",
-  "_id": "inflight@1.0.4",
-  "_shasum": "6cbb4521ebd51ce0ec0a936bfd7657ef7e9b172a",
-  "_from": "inflight@^1.0.4",
-  "_npmVersion": "2.1.3",
-  "_nodeVersion": "0.10.32",
-  "_npmUser": {
-    "name": "othiym23",
-    "email": "ogd@aoaioxxysz.net"
-  },
-  "maintainers": [
-    {
-      "name": "isaacs",
-      "email": "i@izs.me"
-    },
-    {
-      "name": "othiym23",
-      "email": "ogd@aoaioxxysz.net"
-    },
-    {
-      "name": "iarna",
-      "email": "me@re-becca.org"
-    }
-  ],
-  "dist": {
-    "shasum": "6cbb4521ebd51ce0ec0a936bfd7657ef7e9b172a",
-    "tarball": "http://registry.npmjs.org/inflight/-/inflight-1.0.4.tgz"
-  },
-  "directories": {},
-  "_resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.4.tgz",
-  "readme": "ERROR: No README data found!"
-}
diff --git a/bin/node_modules/cordova-common/node_modules/glob/node_modules/inflight/test.js b/bin/node_modules/cordova-common/node_modules/glob/node_modules/inflight/test.js
deleted file mode 100644
index 2bb75b3..0000000
--- a/bin/node_modules/cordova-common/node_modules/glob/node_modules/inflight/test.js
+++ /dev/null
@@ -1,97 +0,0 @@
-var test = require('tap').test
-var inf = require('./inflight.js')
-
-
-function req (key, cb) {
-  cb = inf(key, cb)
-  if (cb) setTimeout(function () {
-    cb(key)
-    cb(key)
-  })
-  return cb
-}
-
-test('basic', function (t) {
-  var calleda = false
-  var a = req('key', function (k) {
-    t.notOk(calleda)
-    calleda = true
-    t.equal(k, 'key')
-    if (calledb) t.end()
-  })
-  t.ok(a, 'first returned cb function')
-
-  var calledb = false
-  var b = req('key', function (k) {
-    t.notOk(calledb)
-    calledb = true
-    t.equal(k, 'key')
-    if (calleda) t.end()
-  })
-
-  t.notOk(b, 'second should get falsey inflight response')
-})
-
-test('timing', function (t) {
-  var expect = [
-    'method one',
-    'start one',
-    'end one',
-    'two',
-    'tick',
-    'three'
-  ]
-  var i = 0
-
-  function log (m) {
-    t.equal(m, expect[i], m + ' === ' + expect[i])
-    ++i
-    if (i === expect.length)
-      t.end()
-  }
-
-  function method (name, cb) {
-    log('method ' + name)
-    process.nextTick(cb)
-  }
-
-  var one = inf('foo', function () {
-    log('start one')
-    var three = inf('foo', function () {
-      log('three')
-    })
-    if (three) method('three', three)
-    log('end one')
-  })
-
-  method('one', one)
-
-  var two = inf('foo', function () {
-    log('two')
-  })
-  if (two) method('one', two)
-
-  process.nextTick(log.bind(null, 'tick'))
-})
-
-test('parameters', function (t) {
-  t.plan(8)
-
-  var a = inf('key', function (first, second, third) {
-    t.equal(first, 1)
-    t.equal(second, 2)
-    t.equal(third, 3)
-  })
-  t.ok(a, 'first returned cb function')
-
-  var b = inf('key', function (first, second, third) {
-    t.equal(first, 1)
-    t.equal(second, 2)
-    t.equal(third, 3)
-  })
-  t.notOk(b, 'second should get falsey inflight response')
-
-  setTimeout(function () {
-    a(1, 2, 3)
-  })
-})
diff --git a/bin/node_modules/cordova-common/node_modules/glob/node_modules/inherits/LICENSE b/bin/node_modules/cordova-common/node_modules/glob/node_modules/inherits/LICENSE
deleted file mode 100644
index dea3013..0000000
--- a/bin/node_modules/cordova-common/node_modules/glob/node_modules/inherits/LICENSE
+++ /dev/null
@@ -1,16 +0,0 @@
-The ISC License
-
-Copyright (c) Isaac Z. Schlueter
-
-Permission to use, copy, modify, and/or distribute this software for any
-purpose with or without fee is hereby granted, provided that the above
-copyright notice and this permission notice appear in all copies.
-
-THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
-REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
-FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
-INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
-LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
-OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-PERFORMANCE OF THIS SOFTWARE.
-
diff --git a/bin/node_modules/cordova-common/node_modules/glob/node_modules/inherits/README.md b/bin/node_modules/cordova-common/node_modules/glob/node_modules/inherits/README.md
deleted file mode 100644
index b1c5665..0000000
--- a/bin/node_modules/cordova-common/node_modules/glob/node_modules/inherits/README.md
+++ /dev/null
@@ -1,42 +0,0 @@
-Browser-friendly inheritance fully compatible with standard node.js
-[inherits](http://nodejs.org/api/util.html#util_util_inherits_constructor_superconstructor).
-
-This package exports standard `inherits` from node.js `util` module in
-node environment, but also provides alternative browser-friendly
-implementation through [browser
-field](https://gist.github.com/shtylman/4339901). Alternative
-implementation is a literal copy of standard one located in standalone
-module to avoid requiring of `util`. It also has a shim for old
-browsers with no `Object.create` support.
-
-While keeping you sure you are using standard `inherits`
-implementation in node.js environment, it allows bundlers such as
-[browserify](https://github.com/substack/node-browserify) to not
-include full `util` package to your client code if all you need is
-just `inherits` function. It worth, because browser shim for `util`
-package is large and `inherits` is often the single function you need
-from it.
-
-It's recommended to use this package instead of
-`require('util').inherits` for any code that has chances to be used
-not only in node.js but in browser too.
-
-## usage
-
-```js
-var inherits = require('inherits');
-// then use exactly as the standard one
-```
-
-## note on version ~1.0
-
-Version ~1.0 had completely different motivation and is not compatible
-neither with 2.0 nor with standard node.js `inherits`.
-
-If you are using version ~1.0 and planning to switch to ~2.0, be
-careful:
-
-* new version uses `super_` instead of `super` for referencing
-  superclass
-* new version overwrites current prototype while old one preserves any
-  existing fields on it
diff --git a/bin/node_modules/cordova-common/node_modules/glob/node_modules/inherits/inherits.js b/bin/node_modules/cordova-common/node_modules/glob/node_modules/inherits/inherits.js
deleted file mode 100644
index 29f5e24..0000000
--- a/bin/node_modules/cordova-common/node_modules/glob/node_modules/inherits/inherits.js
+++ /dev/null
@@ -1 +0,0 @@
-module.exports = require('util').inherits
diff --git a/bin/node_modules/cordova-common/node_modules/glob/node_modules/inherits/inherits_browser.js b/bin/node_modules/cordova-common/node_modules/glob/node_modules/inherits/inherits_browser.js
deleted file mode 100644
index c1e78a7..0000000
--- a/bin/node_modules/cordova-common/node_modules/glob/node_modules/inherits/inherits_browser.js
+++ /dev/null
@@ -1,23 +0,0 @@
-if (typeof Object.create === 'function') {
-  // implementation from standard node.js 'util' module
-  module.exports = function inherits(ctor, superCtor) {
-    ctor.super_ = superCtor
-    ctor.prototype = Object.create(superCtor.prototype, {
-      constructor: {
-        value: ctor,
-        enumerable: false,
-        writable: true,
-        configurable: true
-      }
-    });
-  };
-} else {
-  // old school shim for old browsers
-  module.exports = function inherits(ctor, superCtor) {
-    ctor.super_ = superCtor
-    var TempCtor = function () {}
-    TempCtor.prototype = superCtor.prototype
-    ctor.prototype = new TempCtor()
-    ctor.prototype.constructor = ctor
-  }
-}
diff --git a/bin/node_modules/cordova-common/node_modules/glob/node_modules/inherits/package.json b/bin/node_modules/cordova-common/node_modules/glob/node_modules/inherits/package.json
deleted file mode 100644
index 2368284..0000000
--- a/bin/node_modules/cordova-common/node_modules/glob/node_modules/inherits/package.json
+++ /dev/null
@@ -1,50 +0,0 @@
-{
-  "name": "inherits",
-  "description": "Browser-friendly inheritance fully compatible with standard node.js inherits()",
-  "version": "2.0.1",
-  "keywords": [
-    "inheritance",
-    "class",
-    "klass",
-    "oop",
-    "object-oriented",
-    "inherits",
-    "browser",
-    "browserify"
-  ],
-  "main": "./inherits.js",
-  "browser": "./inherits_browser.js",
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/isaacs/inherits"
-  },
-  "license": "ISC",
-  "scripts": {
-    "test": "node test"
-  },
-  "bugs": {
-    "url": "https://github.com/isaacs/inherits/issues"
-  },
-  "_id": "inherits@2.0.1",
-  "dist": {
-    "shasum": "b17d08d326b4423e568eff719f91b0b1cbdf69f1",
-    "tarball": "http://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz"
-  },
-  "_from": "inherits@2",
-  "_npmVersion": "1.3.8",
-  "_npmUser": {
-    "name": "isaacs",
-    "email": "i@izs.me"
-  },
-  "maintainers": [
-    {
-      "name": "isaacs",
-      "email": "i@izs.me"
-    }
-  ],
-  "directories": {},
-  "_shasum": "b17d08d326b4423e568eff719f91b0b1cbdf69f1",
-  "_resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
-  "readme": "ERROR: No README data found!",
-  "homepage": "https://github.com/isaacs/inherits"
-}
diff --git a/bin/node_modules/cordova-common/node_modules/glob/node_modules/inherits/test.js b/bin/node_modules/cordova-common/node_modules/glob/node_modules/inherits/test.js
deleted file mode 100644
index fc53012..0000000
--- a/bin/node_modules/cordova-common/node_modules/glob/node_modules/inherits/test.js
+++ /dev/null
@@ -1,25 +0,0 @@
-var inherits = require('./inherits.js')
-var assert = require('assert')
-
-function test(c) {
-  assert(c.constructor === Child)
-  assert(c.constructor.super_ === Parent)
-  assert(Object.getPrototypeOf(c) === Child.prototype)
-  assert(Object.getPrototypeOf(Object.getPrototypeOf(c)) === Parent.prototype)
-  assert(c instanceof Child)
-  assert(c instanceof Parent)
-}
-
-function Child() {
-  Parent.call(this)
-  test(this)
-}
-
-function Parent() {}
-
-inherits(Child, Parent)
-
-var c = new Child
-test(c)
-
-console.log('ok')
diff --git a/bin/node_modules/cordova-common/node_modules/glob/node_modules/minimatch/LICENSE b/bin/node_modules/cordova-common/node_modules/glob/node_modules/minimatch/LICENSE
deleted file mode 100644
index 19129e3..0000000
--- a/bin/node_modules/cordova-common/node_modules/glob/node_modules/minimatch/LICENSE
+++ /dev/null
@@ -1,15 +0,0 @@
-The ISC License
-
-Copyright (c) Isaac Z. Schlueter and Contributors
-
-Permission to use, copy, modify, and/or distribute this software for any
-purpose with or without fee is hereby granted, provided that the above
-copyright notice and this permission notice appear in all copies.
-
-THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
-WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
-ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
-ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
-IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/bin/node_modules/cordova-common/node_modules/glob/node_modules/minimatch/README.md b/bin/node_modules/cordova-common/node_modules/glob/node_modules/minimatch/README.md
deleted file mode 100644
index d458bc2..0000000
--- a/bin/node_modules/cordova-common/node_modules/glob/node_modules/minimatch/README.md
+++ /dev/null
@@ -1,216 +0,0 @@
-# minimatch
-
-A minimal matching utility.
-
-[![Build Status](https://secure.travis-ci.org/isaacs/minimatch.png)](http://travis-ci.org/isaacs/minimatch)
-
-
-This is the matching library used internally by npm.
-
-It works by converting glob expressions into JavaScript `RegExp`
-objects.
-
-## Usage
-
-```javascript
-var minimatch = require("minimatch")
-
-minimatch("bar.foo", "*.foo") // true!
-minimatch("bar.foo", "*.bar") // false!
-minimatch("bar.foo", "*.+(bar|foo)", { debug: true }) // true, and noisy!
-```
-
-## Features
-
-Supports these glob features:
-
-* Brace Expansion
-* Extended glob matching
-* "Globstar" `**` matching
-
-See:
-
-* `man sh`
-* `man bash`
-* `man 3 fnmatch`
-* `man 5 gitignore`
-
-## Minimatch Class
-
-Create a minimatch object by instanting the `minimatch.Minimatch` class.
-
-```javascript
-var Minimatch = require("minimatch").Minimatch
-var mm = new Minimatch(pattern, options)
-```
-
-### Properties
-
-* `pattern` The original pattern the minimatch object represents.
-* `options` The options supplied to the constructor.
-* `set` A 2-dimensional array of regexp or string expressions.
-  Each row in the
-  array corresponds to a brace-expanded pattern.  Each item in the row
-  corresponds to a single path-part.  For example, the pattern
-  `{a,b/c}/d` would expand to a set of patterns like:
-
-        [ [ a, d ]
-        , [ b, c, d ] ]
-
-    If a portion of the pattern doesn't have any "magic" in it
-    (that is, it's something like `"foo"` rather than `fo*o?`), then it
-    will be left as a string rather than converted to a regular
-    expression.
-
-* `regexp` Created by the `makeRe` method.  A single regular expression
-  expressing the entire pattern.  This is useful in cases where you wish
-  to use the pattern somewhat like `fnmatch(3)` with `FNM_PATH` enabled.
-* `negate` True if the pattern is negated.
-* `comment` True if the pattern is a comment.
-* `empty` True if the pattern is `""`.
-
-### Methods
-
-* `makeRe` Generate the `regexp` member if necessary, and return it.
-  Will return `false` if the pattern is invalid.
-* `match(fname)` Return true if the filename matches the pattern, or
-  false otherwise.
-* `matchOne(fileArray, patternArray, partial)` Take a `/`-split
-  filename, and match it against a single row in the `regExpSet`.  This
-  method is mainly for internal use, but is exposed so that it can be
-  used by a glob-walker that needs to avoid excessive filesystem calls.
-
-All other methods are internal, and will be called as necessary.
-
-## Functions
-
-The top-level exported function has a `cache` property, which is an LRU
-cache set to store 100 items.  So, calling these methods repeatedly
-with the same pattern and options will use the same Minimatch object,
-saving the cost of parsing it multiple times.
-
-### minimatch(path, pattern, options)
-
-Main export.  Tests a path against the pattern using the options.
-
-```javascript
-var isJS = minimatch(file, "*.js", { matchBase: true })
-```
-
-### minimatch.filter(pattern, options)
-
-Returns a function that tests its
-supplied argument, suitable for use with `Array.filter`.  Example:
-
-```javascript
-var javascripts = fileList.filter(minimatch.filter("*.js", {matchBase: true}))
-```
-
-### minimatch.match(list, pattern, options)
-
-Match against the list of
-files, in the style of fnmatch or glob.  If nothing is matched, and
-options.nonull is set, then return a list containing the pattern itself.
-
-```javascript
-var javascripts = minimatch.match(fileList, "*.js", {matchBase: true}))
-```
-
-### minimatch.makeRe(pattern, options)
-
-Make a regular expression object from the pattern.
-
-## Options
-
-All options are `false` by default.
-
-### debug
-
-Dump a ton of stuff to stderr.
-
-### nobrace
-
-Do not expand `{a,b}` and `{1..3}` brace sets.
-
-### noglobstar
-
-Disable `**` matching against multiple folder names.
-
-### dot
-
-Allow patterns to match filenames starting with a period, even if
-the pattern does not explicitly have a period in that spot.
-
-Note that by default, `a/**/b` will **not** match `a/.d/b`, unless `dot`
-is set.
-
-### noext
-
-Disable "extglob" style patterns like `+(a|b)`.
-
-### nocase
-
-Perform a case-insensitive match.
-
-### nonull
-
-When a match is not found by `minimatch.match`, return a list containing
-the pattern itself if this option is set.  When not set, an empty list
-is returned if there are no matches.
-
-### matchBase
-
-If set, then patterns without slashes will be matched
-against the basename of the path if it contains slashes.  For example,
-`a?b` would match the path `/xyz/123/acb`, but not `/xyz/acb/123`.
-
-### nocomment
-
-Suppress the behavior of treating `#` at the start of a pattern as a
-comment.
-
-### nonegate
-
-Suppress the behavior of treating a leading `!` character as negation.
-
-### flipNegate
-
-Returns from negate expressions the same as if they were not negated.
-(Ie, true on a hit, false on a miss.)
-
-
-## Comparisons to other fnmatch/glob implementations
-
-While strict compliance with the existing standards is a worthwhile
-goal, some discrepancies exist between minimatch and other
-implementations, and are intentional.
-
-If the pattern starts with a `!` character, then it is negated.  Set the
-`nonegate` flag to suppress this behavior, and treat leading `!`
-characters normally.  This is perhaps relevant if you wish to start the
-pattern with a negative extglob pattern like `!(a|B)`.  Multiple `!`
-characters at the start of a pattern will negate the pattern multiple
-times.
-
-If a pattern starts with `#`, then it is treated as a comment, and
-will not match anything.  Use `\#` to match a literal `#` at the
-start of a line, or set the `nocomment` flag to suppress this behavior.
-
-The double-star character `**` is supported by default, unless the
-`noglobstar` flag is set.  This is supported in the manner of bsdglob
-and bash 4.1, where `**` only has special significance if it is the only
-thing in a path part.  That is, `a/**/b` will match `a/x/y/b`, but
-`a/**b` will not.
-
-If an escaped pattern has no matches, and the `nonull` flag is set,
-then minimatch.match returns the pattern as-provided, rather than
-interpreting the character escapes.  For example,
-`minimatch.match([], "\\*a\\?")` will return `"\\*a\\?"` rather than
-`"*a?"`.  This is akin to setting the `nullglob` option in bash, except
-that it does not resolve escaped pattern characters.
-
-If brace expansion is not disabled, then it is performed before any
-other interpretation of the glob pattern.  Thus, a pattern like
-`+(a|{b),c)}`, which would not be valid in bash or zsh, is expanded
-**first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are
-checked for validity.  Since those two are valid, matching proceeds.
diff --git a/bin/node_modules/cordova-common/node_modules/glob/node_modules/minimatch/minimatch.js b/bin/node_modules/cordova-common/node_modules/glob/node_modules/minimatch/minimatch.js
deleted file mode 100644
index ec4c05c..0000000
--- a/bin/node_modules/cordova-common/node_modules/glob/node_modules/minimatch/minimatch.js
+++ /dev/null
@@ -1,912 +0,0 @@
-module.exports = minimatch
-minimatch.Minimatch = Minimatch
-
-var path = { sep: '/' }
-try {
-  path = require('path')
-} catch (er) {}
-
-var GLOBSTAR = minimatch.GLOBSTAR = Minimatch.GLOBSTAR = {}
-var expand = require('brace-expansion')
-
-// any single thing other than /
-// don't need to escape / when using new RegExp()
-var qmark = '[^/]'
-
-// * => any number of characters
-var star = qmark + '*?'
-
-// ** when dots are allowed.  Anything goes, except .. and .
-// not (^ or / followed by one or two dots followed by $ or /),
-// followed by anything, any number of times.
-var twoStarDot = '(?:(?!(?:\\\/|^)(?:\\.{1,2})($|\\\/)).)*?'
-
-// not a ^ or / followed by a dot,
-// followed by anything, any number of times.
-var twoStarNoDot = '(?:(?!(?:\\\/|^)\\.).)*?'
-
-// characters that need to be escaped in RegExp.
-var reSpecials = charSet('().*{}+?[]^$\\!')
-
-// "abc" -> { a:true, b:true, c:true }
-function charSet (s) {
-  return s.split('').reduce(function (set, c) {
-    set[c] = true
-    return set
-  }, {})
-}
-
-// normalizes slashes.
-var slashSplit = /\/+/
-
-minimatch.filter = filter
-function filter (pattern, options) {
-  options = options || {}
-  return function (p, i, list) {
-    return minimatch(p, pattern, options)
-  }
-}
-
-function ext (a, b) {
-  a = a || {}
-  b = b || {}
-  var t = {}
-  Object.keys(b).forEach(function (k) {
-    t[k] = b[k]
-  })
-  Object.keys(a).forEach(function (k) {
-    t[k] = a[k]
-  })
-  return t
-}
-
-minimatch.defaults = function (def) {
-  if (!def || !Object.keys(def).length) return minimatch
-
-  var orig = minimatch
-
-  var m = function minimatch (p, pattern, options) {
-    return orig.minimatch(p, pattern, ext(def, options))
-  }
-
-  m.Minimatch = function Minimatch (pattern, options) {
-    return new orig.Minimatch(pattern, ext(def, options))
-  }
-
-  return m
-}
-
-Minimatch.defaults = function (def) {
-  if (!def || !Object.keys(def).length) return Minimatch
-  return minimatch.defaults(def).Minimatch
-}
-
-function minimatch (p, pattern, options) {
-  if (typeof pattern !== 'string') {
-    throw new TypeError('glob pattern string required')
-  }
-
-  if (!options) options = {}
-
-  // shortcut: comments match nothing.
-  if (!options.nocomment && pattern.charAt(0) === '#') {
-    return false
-  }
-
-  // "" only matches ""
-  if (pattern.trim() === '') return p === ''
-
-  return new Minimatch(pattern, options).match(p)
-}
-
-function Minimatch (pattern, options) {
-  if (!(this instanceof Minimatch)) {
-    return new Minimatch(pattern, options)
-  }
-
-  if (typeof pattern !== 'string') {
-    throw new TypeError('glob pattern string required')
-  }
-
-  if (!options) options = {}
-  pattern = pattern.trim()
-
-  // windows support: need to use /, not \
-  if (path.sep !== '/') {
-    pattern = pattern.split(path.sep).join('/')
-  }
-
-  this.options = options
-  this.set = []
-  this.pattern = pattern
-  this.regexp = null
-  this.negate = false
-  this.comment = false
-  this.empty = false
-
-  // make the set of regexps etc.
-  this.make()
-}
-
-Minimatch.prototype.debug = function () {}
-
-Minimatch.prototype.make = make
-function make () {
-  // don't do it more than once.
-  if (this._made) return
-
-  var pattern = this.pattern
-  var options = this.options
-
-  // empty patterns and comments match nothing.
-  if (!options.nocomment && pattern.charAt(0) === '#') {
-    this.comment = true
-    return
-  }
-  if (!pattern) {
-    this.empty = true
-    return
-  }
-
-  // step 1: figure out negation, etc.
-  this.parseNegate()
-
-  // step 2: expand braces
-  var set = this.globSet = this.braceExpand()
-
-  if (options.debug) this.debug = console.error
-
-  this.debug(this.pattern, set)
-
-  // step 3: now we have a set, so turn each one into a series of path-portion
-  // matching patterns.
-  // These will be regexps, except in the case of "**", which is
-  // set to the GLOBSTAR object for globstar behavior,
-  // and will not contain any / characters
-  set = this.globParts = set.map(function (s) {
-    return s.split(slashSplit)
-  })
-
-  this.debug(this.pattern, set)
-
-  // glob --> regexps
-  set = set.map(function (s, si, set) {
-    return s.map(this.parse, this)
-  }, this)
-
-  this.debug(this.pattern, set)
-
-  // filter out everything that didn't compile properly.
-  set = set.filter(function (s) {
-    return s.indexOf(false) === -1
-  })
-
-  this.debug(this.pattern, set)
-
-  this.set = set
-}
-
-Minimatch.prototype.parseNegate = parseNegate
-function parseNegate () {
-  var pattern = this.pattern
-  var negate = false
-  var options = this.options
-  var negateOffset = 0
-
-  if (options.nonegate) return
-
-  for (var i = 0, l = pattern.length
-    ; i < l && pattern.charAt(i) === '!'
-    ; i++) {
-    negate = !negate
-    negateOffset++
-  }
-
-  if (negateOffset) this.pattern = pattern.substr(negateOffset)
-  this.negate = negate
-}
-
-// Brace expansion:
-// a{b,c}d -> abd acd
-// a{b,}c -> abc ac
-// a{0..3}d -> a0d a1d a2d a3d
-// a{b,c{d,e}f}g -> abg acdfg acefg
-// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg
-//
-// Invalid sets are not expanded.
-// a{2..}b -> a{2..}b
-// a{b}c -> a{b}c
-minimatch.braceExpand = function (pattern, options) {
-  return braceExpand(pattern, options)
-}
-
-Minimatch.prototype.braceExpand = braceExpand
-
-function braceExpand (pattern, options) {
-  if (!options) {
-    if (this instanceof Minimatch) {
-      options = this.options
-    } else {
-      options = {}
-    }
-  }
-
-  pattern = typeof pattern === 'undefined'
-    ? this.pattern : pattern
-
-  if (typeof pattern === 'undefined') {
-    throw new Error('undefined pattern')
-  }
-
-  if (options.nobrace ||
-    !pattern.match(/\{.*\}/)) {
-    // shortcut. no need to expand.
-    return [pattern]
-  }
-
-  return expand(pattern)
-}
-
-// parse a component of the expanded set.
-// At this point, no pattern may contain "/" in it
-// so we're going to return a 2d array, where each entry is the full
-// pattern, split on '/', and then turned into a regular expression.
-// A regexp is made at the end which joins each array with an
-// escaped /, and another full one which joins each regexp with |.
-//
-// Following the lead of Bash 4.1, note that "**" only has special meaning
-// when it is the *only* thing in a path portion.  Otherwise, any series
-// of * is equivalent to a single *.  Globstar behavior is enabled by
-// default, and can be disabled by setting options.noglobstar.
-Minimatch.prototype.parse = parse
-var SUBPARSE = {}
-function parse (pattern, isSub) {
-  var options = this.options
-
-  // shortcuts
-  if (!options.noglobstar && pattern === '**') return GLOBSTAR
-  if (pattern === '') return ''
-
-  var re = ''
-  var hasMagic = !!options.nocase
-  var escaping = false
-  // ? => one single character
-  var patternListStack = []
-  var negativeLists = []
-  var plType
-  var stateChar
-  var inClass = false
-  var reClassStart = -1
-  var classStart = -1
-  // . and .. never match anything that doesn't start with .,
-  // even when options.dot is set.
-  var patternStart = pattern.charAt(0) === '.' ? '' // anything
-  // not (start or / followed by . or .. followed by / or end)
-  : options.dot ? '(?!(?:^|\\\/)\\.{1,2}(?:$|\\\/))'
-  : '(?!\\.)'
-  var self = this
-
-  function clearStateChar () {
-    if (stateChar) {
-      // we had some state-tracking character
-      // that wasn't consumed by this pass.
-      switch (stateChar) {
-        case '*':
-          re += star
-          hasMagic = true
-        break
-        case '?':
-          re += qmark
-          hasMagic = true
-        break
-        default:
-          re += '\\' + stateChar
-        break
-      }
-      self.debug('clearStateChar %j %j', stateChar, re)
-      stateChar = false
-    }
-  }
-
-  for (var i = 0, len = pattern.length, c
-    ; (i < len) && (c = pattern.charAt(i))
-    ; i++) {
-    this.debug('%s\t%s %s %j', pattern, i, re, c)
-
-    // skip over any that are escaped.
-    if (escaping && reSpecials[c]) {
-      re += '\\' + c
-      escaping = false
-      continue
-    }
-
-    switch (c) {
-      case '/':
-        // completely not allowed, even escaped.
-        // Should already be path-split by now.
-        return false
-
-      case '\\':
-        clearStateChar()
-        escaping = true
-      continue
-
-      // the various stateChar values
-      // for the "extglob" stuff.
-      case '?':
-      case '*':
-      case '+':
-      case '@':
-      case '!':
-        this.debug('%s\t%s %s %j <-- stateChar', pattern, i, re, c)
-
-        // all of those are literals inside a class, except that
-        // the glob [!a] means [^a] in regexp
-        if (inClass) {
-          this.debug('  in class')
-          if (c === '!' && i === classStart + 1) c = '^'
-          re += c
-          continue
-        }
-
-        // if we already have a stateChar, then it means
-        // that there was something like ** or +? in there.
-        // Handle the stateChar, then proceed with this one.
-        self.debug('call clearStateChar %j', stateChar)
-        clearStateChar()
-        stateChar = c
-        // if extglob is disabled, then +(asdf|foo) isn't a thing.
-        // just clear the statechar *now*, rather than even diving into
-        // the patternList stuff.
-        if (options.noext) clearStateChar()
-      continue
-
-      case '(':
-        if (inClass) {
-          re += '('
-          continue
-        }
-
-        if (!stateChar) {
-          re += '\\('
-          continue
-        }
-
-        plType = stateChar
-        patternListStack.push({
-          type: plType,
-          start: i - 1,
-          reStart: re.length
-        })
-        // negation is (?:(?!js)[^/]*)
-        re += stateChar === '!' ? '(?:(?!(?:' : '(?:'
-        this.debug('plType %j %j', stateChar, re)
-        stateChar = false
-      continue
-
-      case ')':
-        if (inClass || !patternListStack.length) {
-          re += '\\)'
-          continue
-        }
-
-        clearStateChar()
-        hasMagic = true
-        re += ')'
-        var pl = patternListStack.pop()
-        plType = pl.type
-        // negation is (?:(?!js)[^/]*)
-        // The others are (?:<pattern>)<type>
-        switch (plType) {
-          case '!':
-            negativeLists.push(pl)
-            re += ')[^/]*?)'
-            pl.reEnd = re.length
-            break
-          case '?':
-          case '+':
-          case '*':
-            re += plType
-            break
-          case '@': break // the default anyway
-        }
-      continue
-
-      case '|':
-        if (inClass || !patternListStack.length || escaping) {
-          re += '\\|'
-          escaping = false
-          continue
-        }
-
-        clearStateChar()
-        re += '|'
-      continue
-
-      // these are mostly the same in regexp and glob
-      case '[':
-        // swallow any state-tracking char before the [
-        clearStateChar()
-
-        if (inClass) {
-          re += '\\' + c
-          continue
-        }
-
-        inClass = true
-        classStart = i
-        reClassStart = re.length
-        re += c
-      continue
-
-      case ']':
-        //  a right bracket shall lose its special
-        //  meaning and represent itself in
-        //  a bracket expression if it occurs
-        //  first in the list.  -- POSIX.2 2.8.3.2
-        if (i === classStart + 1 || !inClass) {
-          re += '\\' + c
-          escaping = false
-          continue
-        }
-
-        // handle the case where we left a class open.
-        // "[z-a]" is valid, equivalent to "\[z-a\]"
-        if (inClass) {
-          // split where the last [ was, make sure we don't have
-          // an invalid re. if so, re-walk the contents of the
-          // would-be class to re-translate any characters that
-          // were passed through as-is
-          // TODO: It would probably be faster to determine this
-          // without a try/catch and a new RegExp, but it's tricky
-          // to do safely.  For now, this is safe and works.
-          var cs = pattern.substring(classStart + 1, i)
-          try {
-            RegExp('[' + cs + ']')
-          } catch (er) {
-            // not a valid class!
-            var sp = this.parse(cs, SUBPARSE)
-            re = re.substr(0, reClassStart) + '\\[' + sp[0] + '\\]'
-            hasMagic = hasMagic || sp[1]
-            inClass = false
-            continue
-          }
-        }
-
-        // finish up the class.
-        hasMagic = true
-        inClass = false
-        re += c
-      continue
-
-      default:
-        // swallow any state char that wasn't consumed
-        clearStateChar()
-
-        if (escaping) {
-          // no need
-          escaping = false
-        } else if (reSpecials[c]
-          && !(c === '^' && inClass)) {
-          re += '\\'
-        }
-
-        re += c
-
-    } // switch
-  } // for
-
-  // handle the case where we left a class open.
-  // "[abc" is valid, equivalent to "\[abc"
-  if (inClass) {
-    // split where the last [ was, and escape it
-    // this is a huge pita.  We now have to re-walk
-    // the contents of the would-be class to re-translate
-    // any characters that were passed through as-is
-    cs = pattern.substr(classStart + 1)
-    sp = this.parse(cs, SUBPARSE)
-    re = re.substr(0, reClassStart) + '\\[' + sp[0]
-    hasMagic = hasMagic || sp[1]
-  }
-
-  // handle the case where we had a +( thing at the *end*
-  // of the pattern.
-  // each pattern list stack adds 3 chars, and we need to go through
-  // and escape any | chars that were passed through as-is for the regexp.
-  // Go through and escape them, taking care not to double-escape any
-  // | chars that were already escaped.
-  for (pl = patternListStack.pop(); pl; pl = patternListStack.pop()) {
-    var tail = re.slice(pl.reStart + 3)
-    // maybe some even number of \, then maybe 1 \, followed by a |
-    tail = tail.replace(/((?:\\{2})*)(\\?)\|/g, function (_, $1, $2) {
-      if (!$2) {
-        // the | isn't already escaped, so escape it.
-        $2 = '\\'
-      }
-
-      // need to escape all those slashes *again*, without escaping the
-      // one that we need for escaping the | character.  As it works out,
-      // escaping an even number of slashes can be done by simply repeating
-      // it exactly after itself.  That's why this trick works.
-      //
-      // I am sorry that you have to see this.
-      return $1 + $1 + $2 + '|'
-    })
-
-    this.debug('tail=%j\n   %s', tail, tail)
-    var t = pl.type === '*' ? star
-      : pl.type === '?' ? qmark
-      : '\\' + pl.type
-
-    hasMagic = true
-    re = re.slice(0, pl.reStart) + t + '\\(' + tail
-  }
-
-  // handle trailing things that only matter at the very end.
-  clearStateChar()
-  if (escaping) {
-    // trailing \\
-    re += '\\\\'
-  }
-
-  // only need to apply the nodot start if the re starts with
-  // something that could conceivably capture a dot
-  var addPatternStart = false
-  switch (re.charAt(0)) {
-    case '.':
-    case '[':
-    case '(': addPatternStart = true
-  }
-
-  // Hack to work around lack of negative lookbehind in JS
-  // A pattern like: *.!(x).!(y|z) needs to ensure that a name
-  // like 'a.xyz.yz' doesn't match.  So, the first negative
-  // lookahead, has to look ALL the way ahead, to the end of
-  // the pattern.
-  for (var n = negativeLists.length - 1; n > -1; n--) {
-    var nl = negativeLists[n]
-
-    var nlBefore = re.slice(0, nl.reStart)
-    var nlFirst = re.slice(nl.reStart, nl.reEnd - 8)
-    var nlLast = re.slice(nl.reEnd - 8, nl.reEnd)
-    var nlAfter = re.slice(nl.reEnd)
-
-    nlLast += nlAfter
-
-    // Handle nested stuff like *(*.js|!(*.json)), where open parens
-    // mean that we should *not* include the ) in the bit that is considered
-    // "after" the negated section.
-    var openParensBefore = nlBefore.split('(').length - 1
-    var cleanAfter = nlAfter
-    for (i = 0; i < openParensBefore; i++) {
-      cleanAfter = cleanAfter.replace(/\)[+*?]?/, '')
-    }
-    nlAfter = cleanAfter
-
-    var dollar = ''
-    if (nlAfter === '' && isSub !== SUBPARSE) {
-      dollar = '$'
-    }
-    var newRe = nlBefore + nlFirst + nlAfter + dollar + nlLast
-    re = newRe
-  }
-
-  // if the re is not "" at this point, then we need to make sure
-  // it doesn't match against an empty path part.
-  // Otherwise a/* will match a/, which it should not.
-  if (re !== '' && hasMagic) {
-    re = '(?=.)' + re
-  }
-
-  if (addPatternStart) {
-    re = patternStart + re
-  }
-
-  // parsing just a piece of a larger pattern.
-  if (isSub === SUBPARSE) {
-    return [re, hasMagic]
-  }
-
-  // skip the regexp for non-magical patterns
-  // unescape anything in it, though, so that it'll be
-  // an exact match against a file etc.
-  if (!hasMagic) {
-    return globUnescape(pattern)
-  }
-
-  var flags = options.nocase ? 'i' : ''
-  var regExp = new RegExp('^' + re + '$', flags)
-
-  regExp._glob = pattern
-  regExp._src = re
-
-  return regExp
-}
-
-minimatch.makeRe = function (pattern, options) {
-  return new Minimatch(pattern, options || {}).makeRe()
-}
-
-Minimatch.prototype.makeRe = makeRe
-function makeRe () {
-  if (this.regexp || this.regexp === false) return this.regexp
-
-  // at this point, this.set is a 2d array of partial
-  // pattern strings, or "**".
-  //
-  // It's better to use .match().  This function shouldn't
-  // be used, really, but it's pretty convenient sometimes,
-  // when you just want to work with a regex.
-  var set = this.set
-
-  if (!set.length) {
-    this.regexp = false
-    return this.regexp
-  }
-  var options = this.options
-
-  var twoStar = options.noglobstar ? star
-    : options.dot ? twoStarDot
-    : twoStarNoDot
-  var flags = options.nocase ? 'i' : ''
-
-  var re = set.map(function (pattern) {
-    return pattern.map(function (p) {
-      return (p === GLOBSTAR) ? twoStar
-      : (typeof p === 'string') ? regExpEscape(p)
-      : p._src
-    }).join('\\\/')
-  }).join('|')
-
-  // must match entire pattern
-  // ending in a * or ** will make it less strict.
-  re = '^(?:' + re + ')$'
-
-  // can match anything, as long as it's not this.
-  if (this.negate) re = '^(?!' + re + ').*$'
-
-  try {
-    this.regexp = new RegExp(re, flags)
-  } catch (ex) {
-    this.regexp = false
-  }
-  return this.regexp
-}
-
-minimatch.match = function (list, pattern, options) {
-  options = options || {}
-  var mm = new Minimatch(pattern, options)
-  list = list.filter(function (f) {
-    return mm.match(f)
-  })
-  if (mm.options.nonull && !list.length) {
-    list.push(pattern)
-  }
-  return list
-}
-
-Minimatch.prototype.match = match
-function match (f, partial) {
-  this.debug('match', f, this.pattern)
-  // short-circuit in the case of busted things.
-  // comments, etc.
-  if (this.comment) return false
-  if (this.empty) return f === ''
-
-  if (f === '/' && partial) return true
-
-  var options = this.options
-
-  // windows: need to use /, not \
-  if (path.sep !== '/') {
-    f = f.split(path.sep).join('/')
-  }
-
-  // treat the test path as a set of pathparts.
-  f = f.split(slashSplit)
-  this.debug(this.pattern, 'split', f)
-
-  // just ONE of the pattern sets in this.set needs to match
-  // in order for it to be valid.  If negating, then just one
-  // match means that we have failed.
-  // Either way, return on the first hit.
-
-  var set = this.set
-  this.debug(this.pattern, 'set', set)
-
-  // Find the basename of the path by looking for the last non-empty segment
-  var filename
-  var i
-  for (i = f.length - 1; i >= 0; i--) {
-    filename = f[i]
-    if (filename) break
-  }
-
-  for (i = 0; i < set.length; i++) {
-    var pattern = set[i]
-    var file = f
-    if (options.matchBase && pattern.length === 1) {
-      file = [filename]
-    }
-    var hit = this.matchOne(file, pattern, partial)
-    if (hit) {
-      if (options.flipNegate) return true
-      return !this.negate
-    }
-  }
-
-  // didn't get any hits.  this is success if it's a negative
-  // pattern, failure otherwise.
-  if (options.flipNegate) return false
-  return this.negate
-}
-
-// set partial to true to test if, for example,
-// "/a/b" matches the start of "/*/b/*/d"
-// Partial means, if you run out of file before you run
-// out of pattern, then that's fine, as long as all
-// the parts match.
-Minimatch.prototype.matchOne = function (file, pattern, partial) {
-  var options = this.options
-
-  this.debug('matchOne',
-    { 'this': this, file: file, pattern: pattern })
-
-  this.debug('matchOne', file.length, pattern.length)
-
-  for (var fi = 0,
-      pi = 0,
-      fl = file.length,
-      pl = pattern.length
-      ; (fi < fl) && (pi < pl)
-      ; fi++, pi++) {
-    this.debug('matchOne loop')
-    var p = pattern[pi]
-    var f = file[fi]
-
-    this.debug(pattern, p, f)
-
-    // should be impossible.
-    // some invalid regexp stuff in the set.
-    if (p === false) return false
-
-    if (p === GLOBSTAR) {
-      this.debug('GLOBSTAR', [pattern, p, f])
-
-      // "**"
-      // a/**/b/**/c would match the following:
-      // a/b/x/y/z/c
-      // a/x/y/z/b/c
-      // a/b/x/b/x/c
-      // a/b/c
-      // To do this, take the rest of the pattern after
-      // the **, and see if it would match the file remainder.
-      // If so, return success.
-      // If not, the ** "swallows" a segment, and try again.
-      // This is recursively awful.
-      //
-      // a/**/b/**/c matching a/b/x/y/z/c
-      // - a matches a
-      // - doublestar
-      //   - matchOne(b/x/y/z/c, b/**/c)
-      //     - b matches b
-      //     - doublestar
-      //       - matchOne(x/y/z/c, c) -> no
-      //       - matchOne(y/z/c, c) -> no
-      //       - matchOne(z/c, c) -> no
-      //       - matchOne(c, c) yes, hit
-      var fr = fi
-      var pr = pi + 1
-      if (pr === pl) {
-        this.debug('** at the end')
-        // a ** at the end will just swallow the rest.
-        // We have found a match.
-        // however, it will not swallow /.x, unless
-        // options.dot is set.
-        // . and .. are *never* matched by **, for explosively
-        // exponential reasons.
-        for (; fi < fl; fi++) {
-          if (file[fi] === '.' || file[fi] === '..' ||
-            (!options.dot && file[fi].charAt(0) === '.')) return false
-        }
-        return true
-      }
-
-      // ok, let's see if we can swallow whatever we can.
-      while (fr < fl) {
-        var swallowee = file[fr]
-
-        this.debug('\nglobstar while', file, fr, pattern, pr, swallowee)
-
-        // XXX remove this slice.  Just pass the start index.
-        if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) {
-          this.debug('globstar found match!', fr, fl, swallowee)
-          // found a match.
-          return true
-        } else {
-          // can't swallow "." or ".." ever.
-          // can only swallow ".foo" when explicitly asked.
-          if (swallowee === '.' || swallowee === '..' ||
-            (!options.dot && swallowee.charAt(0) === '.')) {
-            this.debug('dot detected!', file, fr, pattern, pr)
-            break
-          }
-
-          // ** swallows a segment, and continue.
-          this.debug('globstar swallow a segment, and continue')
-          fr++
-        }
-      }
-
-      // no match was found.
-      // However, in partial mode, we can't say this is necessarily over.
-      // If there's more *pattern* left, then
-      if (partial) {
-        // ran out of file
-        this.debug('\n>>> no match, partial?', file, fr, pattern, pr)
-        if (fr === fl) return true
-      }
-      return false
-    }
-
-    // something other than **
-    // non-magic patterns just have to match exactly
-    // patterns with magic have been turned into regexps.
-    var hit
-    if (typeof p === 'string') {
-      if (options.nocase) {
-        hit = f.toLowerCase() === p.toLowerCase()
-      } else {
-        hit = f === p
-      }
-      this.debug('string match', p, f, hit)
-    } else {
-      hit = f.match(p)
-      this.debug('pattern match', p, f, hit)
-    }
-
-    if (!hit) return false
-  }
-
-  // Note: ending in / means that we'll get a final ""
-  // at the end of the pattern.  This can only match a
-  // corresponding "" at the end of the file.
-  // If the file ends in /, then it can only match a
-  // a pattern that ends in /, unless the pattern just
-  // doesn't have any more for it. But, a/b/ should *not*
-  // match "a/b/*", even though "" matches against the
-  // [^/]*? pattern, except in partial mode, where it might
-  // simply not be reached yet.
-  // However, a/b/ should still satisfy a/*
-
-  // now either we fell off the end of the pattern, or we're done.
-  if (fi === fl && pi === pl) {
-    // ran out of pattern and filename at the same time.
-    // an exact hit!
-    return true
-  } else if (fi === fl) {
-    // ran out of file, but still had pattern left.
-    // this is ok if we're doing the match as part of
-    // a glob fs traversal.
-    return partial
-  } else if (pi === pl) {
-    // ran out of pattern, still have file left.
-    // this is only acceptable if we're on the very last
-    // empty segment of a file with a trailing slash.
-    // a/* should match a/b/
-    var emptyFileEnd = (fi === fl - 1) && (file[fi] === '')
-    return emptyFileEnd
-  }
-
-  // should be unreachable.
-  throw new Error('wtf?')
-}
-
-// replace stuff like \* with *
-function globUnescape (s) {
-  return s.replace(/\\(.)/g, '$1')
-}
-
-function regExpEscape (s) {
-  return s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&')
-}
diff --git a/bin/node_modules/cordova-common/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/.npmignore b/bin/node_modules/cordova-common/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/.npmignore
deleted file mode 100644
index 353546a..0000000
--- a/bin/node_modules/cordova-common/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/.npmignore
+++ /dev/null
@@ -1,3 +0,0 @@
-test
-.gitignore
-.travis.yml
diff --git a/bin/node_modules/cordova-common/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/README.md b/bin/node_modules/cordova-common/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/README.md
deleted file mode 100644
index 1793929..0000000
--- a/bin/node_modules/cordova-common/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/README.md
+++ /dev/null
@@ -1,122 +0,0 @@
-# brace-expansion
-
-[Brace expansion](https://www.gnu.org/software/bash/manual/html_node/Brace-Expansion.html), 
-as known from sh/bash, in JavaScript.
-
-[![build status](https://secure.travis-ci.org/juliangruber/brace-expansion.svg)](http://travis-ci.org/juliangruber/brace-expansion)
-[![downloads](https://img.shields.io/npm/dm/brace-expansion.svg)](https://www.npmjs.org/package/brace-expansion)
-
-[![testling badge](https://ci.testling.com/juliangruber/brace-expansion.png)](https://ci.testling.com/juliangruber/brace-expansion)
-
-## Example
-
-```js
-var expand = require('brace-expansion');
-
-expand('file-{a,b,c}.jpg')
-// => ['file-a.jpg', 'file-b.jpg', 'file-c.jpg']
-
-expand('-v{,,}')
-// => ['-v', '-v', '-v']
-
-expand('file{0..2}.jpg')
-// => ['file0.jpg', 'file1.jpg', 'file2.jpg']
-
-expand('file-{a..c}.jpg')
-// => ['file-a.jpg', 'file-b.jpg', 'file-c.jpg']
-
-expand('file{2..0}.jpg')
-// => ['file2.jpg', 'file1.jpg', 'file0.jpg']
-
-expand('file{0..4..2}.jpg')
-// => ['file0.jpg', 'file2.jpg', 'file4.jpg']
-
-expand('file-{a..e..2}.jpg')
-// => ['file-a.jpg', 'file-c.jpg', 'file-e.jpg']
-
-expand('file{00..10..5}.jpg')
-// => ['file00.jpg', 'file05.jpg', 'file10.jpg']
-
-expand('{{A..C},{a..c}}')
-// => ['A', 'B', 'C', 'a', 'b', 'c']
-
-expand('ppp{,config,oe{,conf}}')
-// => ['ppp', 'pppconfig', 'pppoe', 'pppoeconf']
-```
-
-## API
-
-```js
-var expand = require('brace-expansion');
-```
-
-### var expanded = expand(str)
-
-Return an array of all possible and valid expansions of `str`. If none are
-found, `[str]` is returned.
-
-Valid expansions are:
-
-```js
-/^(.*,)+(.+)?$/
-// {a,b,...}
-```
-
-A comma seperated list of options, like `{a,b}` or `{a,{b,c}}` or `{,a,}`.
-
-```js
-/^-?\d+\.\.-?\d+(\.\.-?\d+)?$/
-// {x..y[..incr]}
-```
-
-A numeric sequence from `x` to `y` inclusive, with optional increment.
-If `x` or `y` start with a leading `0`, all the numbers will be padded
-to have equal length. Negative numbers and backwards iteration work too.
-
-```js
-/^-?\d+\.\.-?\d+(\.\.-?\d+)?$/
-// {x..y[..incr]}
-```
-
-An alphabetic sequence from `x` to `y` inclusive, with optional increment.
-`x` and `y` must be exactly one character, and if given, `incr` must be a
-number.
-
-For compatibility reasons, the string `${` is not eligible for brace expansion.
-
-## Installation
-
-With [npm](https://npmjs.org) do:
-
-```bash
-npm install brace-expansion
-```
-
-## Contributors
-
-- [Julian Gruber](https://github.com/juliangruber)
-- [Isaac Z. Schlueter](https://github.com/isaacs)
-
-## License
-
-(MIT)
-
-Copyright (c) 2013 Julian Gruber &lt;julian@juliangruber.com&gt;
-
-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/bin/node_modules/cordova-common/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/example.js b/bin/node_modules/cordova-common/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/example.js
deleted file mode 100644
index 60ecfc7..0000000
--- a/bin/node_modules/cordova-common/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/example.js
+++ /dev/null
@@ -1,8 +0,0 @@
-var expand = require('./');
-
-console.log(expand('http://any.org/archive{1996..1999}/vol{1..4}/part{a,b,c}.html'));
-console.log(expand('http://www.numericals.com/file{1..100..10}.txt'));
-console.log(expand('http://www.letters.com/file{a..z..2}.txt'));
-console.log(expand('mkdir /usr/local/src/bash/{old,new,dist,bugs}'));
-console.log(expand('chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}}'));
-
diff --git a/bin/node_modules/cordova-common/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/index.js b/bin/node_modules/cordova-common/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/index.js
deleted file mode 100644
index a23104e..0000000
--- a/bin/node_modules/cordova-common/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/index.js
+++ /dev/null
@@ -1,191 +0,0 @@
-var concatMap = require('concat-map');
-var balanced = require('balanced-match');
-
-module.exports = expandTop;
-
-var escSlash = '\0SLASH'+Math.random()+'\0';
-var escOpen = '\0OPEN'+Math.random()+'\0';
-var escClose = '\0CLOSE'+Math.random()+'\0';
-var escComma = '\0COMMA'+Math.random()+'\0';
-var escPeriod = '\0PERIOD'+Math.random()+'\0';
-
-function numeric(str) {
-  return parseInt(str, 10) == str
-    ? parseInt(str, 10)
-    : str.charCodeAt(0);
-}
-
-function escapeBraces(str) {
-  return str.split('\\\\').join(escSlash)
-            .split('\\{').join(escOpen)
-            .split('\\}').join(escClose)
-            .split('\\,').join(escComma)
-            .split('\\.').join(escPeriod);
-}
-
-function unescapeBraces(str) {
-  return str.split(escSlash).join('\\')
-            .split(escOpen).join('{')
-            .split(escClose).join('}')
-            .split(escComma).join(',')
-            .split(escPeriod).join('.');
-}
-
-
-// Basically just str.split(","), but handling cases
-// where we have nested braced sections, which should be
-// treated as individual members, like {a,{b,c},d}
-function parseCommaParts(str) {
-  if (!str)
-    return [''];
-
-  var parts = [];
-  var m = balanced('{', '}', str);
-
-  if (!m)
-    return str.split(',');
-
-  var pre = m.pre;
-  var body = m.body;
-  var post = m.post;
-  var p = pre.split(',');
-
-  p[p.length-1] += '{' + body + '}';
-  var postParts = parseCommaParts(post);
-  if (post.length) {
-    p[p.length-1] += postParts.shift();
-    p.push.apply(p, postParts);
-  }
-
-  parts.push.apply(parts, p);
-
-  return parts;
-}
-
-function expandTop(str) {
-  if (!str)
-    return [];
-
-  return expand(escapeBraces(str), true).map(unescapeBraces);
-}
-
-function identity(e) {
-  return e;
-}
-
-function embrace(str) {
-  return '{' + str + '}';
-}
-function isPadded(el) {
-  return /^-?0\d/.test(el);
-}
-
-function lte(i, y) {
-  return i <= y;
-}
-function gte(i, y) {
-  return i >= y;
-}
-
-function expand(str, isTop) {
-  var expansions = [];
-
-  var m = balanced('{', '}', str);
-  if (!m || /\$$/.test(m.pre)) return [str];
-
-  var isNumericSequence = /^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(m.body);
-  var isAlphaSequence = /^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(m.body);
-  var isSequence = isNumericSequence || isAlphaSequence;
-  var isOptions = /^(.*,)+(.+)?$/.test(m.body);
-  if (!isSequence && !isOptions) {
-    // {a},b}
-    if (m.post.match(/,.*}/)) {
-      str = m.pre + '{' + m.body + escClose + m.post;
-      return expand(str);
-    }
-    return [str];
-  }
-
-  var n;
-  if (isSequence) {
-    n = m.body.split(/\.\./);
-  } else {
-    n = parseCommaParts(m.body);
-    if (n.length === 1) {
-      // x{{a,b}}y ==> x{a}y x{b}y
-      n = expand(n[0], false).map(embrace);
-      if (n.length === 1) {
-        var post = m.post.length
-          ? expand(m.post, false)
-          : [''];
-        return post.map(function(p) {
-          return m.pre + n[0] + p;
-        });
-      }
-    }
-  }
-
-  // at this point, n is the parts, and we know it's not a comma set
-  // with a single entry.
-
-  // no need to expand pre, since it is guaranteed to be free of brace-sets
-  var pre = m.pre;
-  var post = m.post.length
-    ? expand(m.post, false)
-    : [''];
-
-  var N;
-
-  if (isSequence) {
-    var x = numeric(n[0]);
-    var y = numeric(n[1]);
-    var width = Math.max(n[0].length, n[1].length)
-    var incr = n.length == 3
-      ? Math.abs(numeric(n[2]))
-      : 1;
-    var test = lte;
-    var reverse = y < x;
-    if (reverse) {
-      incr *= -1;
-      test = gte;
-    }
-    var pad = n.some(isPadded);
-
-    N = [];
-
-    for (var i = x; test(i, y); i += incr) {
-      var c;
-      if (isAlphaSequence) {
-        c = String.fromCharCode(i);
-        if (c === '\\')
-          c = '';
-      } else {
-        c = String(i);
-        if (pad) {
-          var need = width - c.length;
-          if (need > 0) {
-            var z = new Array(need + 1).join('0');
-            if (i < 0)
-              c = '-' + z + c.slice(1);
-            else
-              c = z + c;
-          }
-        }
-      }
-      N.push(c);
-    }
-  } else {
-    N = concatMap(n, function(el) { return expand(el, false) });
-  }
-
-  for (var j = 0; j < N.length; j++) {
-    for (var k = 0; k < post.length; k++) {
-      var expansion = pre + N[j] + post[k];
-      if (!isTop || isSequence || expansion)
-        expansions.push(expansion);
-    }
-  }
-
-  return expansions;
-}
-
diff --git a/bin/node_modules/cordova-common/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/.npmignore b/bin/node_modules/cordova-common/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/.npmignore
deleted file mode 100644
index fd4f2b0..0000000
--- a/bin/node_modules/cordova-common/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/.npmignore
+++ /dev/null
@@ -1,2 +0,0 @@
-node_modules
-.DS_Store
diff --git a/bin/node_modules/cordova-common/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/.travis.yml b/bin/node_modules/cordova-common/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/.travis.yml
deleted file mode 100644
index 6e5919d..0000000
--- a/bin/node_modules/cordova-common/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/.travis.yml
+++ /dev/null
@@ -1,3 +0,0 @@
-language: node_js
-node_js:
-  - "0.10"
diff --git a/bin/node_modules/cordova-common/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/LICENSE.md b/bin/node_modules/cordova-common/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/LICENSE.md
deleted file mode 100644
index 2cdc8e4..0000000
--- a/bin/node_modules/cordova-common/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/LICENSE.md
+++ /dev/null
@@ -1,21 +0,0 @@
-(MIT)
-
-Copyright (c) 2013 Julian Gruber &lt;julian@juliangruber.com&gt;
-
-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/bin/node_modules/cordova-common/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/Makefile b/bin/node_modules/cordova-common/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/Makefile
deleted file mode 100644
index fa5da71..0000000
--- a/bin/node_modules/cordova-common/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/Makefile
+++ /dev/null
@@ -1,6 +0,0 @@
-
-test:
-	@node_modules/.bin/tape test/*.js
-
-.PHONY: test
-
diff --git a/bin/node_modules/cordova-common/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/README.md b/bin/node_modules/cordova-common/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/README.md
deleted file mode 100644
index 2aff0eb..0000000
--- a/bin/node_modules/cordova-common/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/README.md
+++ /dev/null
@@ -1,80 +0,0 @@
-# balanced-match
-
-Match balanced string pairs, like `{` and `}` or `<b>` and `</b>`.
-
-[![build status](https://secure.travis-ci.org/juliangruber/balanced-match.svg)](http://travis-ci.org/juliangruber/balanced-match)
-[![downloads](https://img.shields.io/npm/dm/balanced-match.svg)](https://www.npmjs.org/package/balanced-match)
-
-[![testling badge](https://ci.testling.com/juliangruber/balanced-match.png)](https://ci.testling.com/juliangruber/balanced-match)
-
-## Example
-
-Get the first matching pair of braces:
-
-```js
-var balanced = require('balanced-match');
-
-console.log(balanced('{', '}', 'pre{in{nested}}post'));
-console.log(balanced('{', '}', 'pre{first}between{second}post'));
-```
-
-The matches are:
-
-```bash
-$ node example.js
-{ start: 3, end: 14, pre: 'pre', body: 'in{nested}', post: 'post' }
-{ start: 3,
-  end: 9,
-  pre: 'pre',
-  body: 'first',
-  post: 'between{second}post' }
-```
-
-## API
-
-### var m = balanced(a, b, str)
-
-For the first non-nested matching pair of `a` and `b` in `str`, return an
-object with those keys:
-
-* **start** the index of the first match of `a`
-* **end** the index of the matching `b`
-* **pre** the preamble, `a` and `b` not included
-* **body** the match, `a` and `b` not included
-* **post** the postscript, `a` and `b` not included
-
-If there's no match, `undefined` will be returned.
-
-If the `str` contains more `a` than `b` / there are unmatched pairs, the first match that was closed will be used. For example, `{{a}` will match `['{', 'a', '']`.
-
-## Installation
-
-With [npm](https://npmjs.org) do:
-
-```bash
-npm install balanced-match
-```
-
-## License
-
-(MIT)
-
-Copyright (c) 2013 Julian Gruber &lt;julian@juliangruber.com&gt;
-
-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/bin/node_modules/cordova-common/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/example.js b/bin/node_modules/cordova-common/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/example.js
deleted file mode 100644
index c02ad34..0000000
--- a/bin/node_modules/cordova-common/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/example.js
+++ /dev/null
@@ -1,5 +0,0 @@
-var balanced = require('./');
-
-console.log(balanced('{', '}', 'pre{in{nested}}post'));
-console.log(balanced('{', '}', 'pre{first}between{second}post'));
-
diff --git a/bin/node_modules/cordova-common/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/index.js b/bin/node_modules/cordova-common/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/index.js
deleted file mode 100644
index d165ae8..0000000
--- a/bin/node_modules/cordova-common/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/index.js
+++ /dev/null
@@ -1,38 +0,0 @@
-module.exports = balanced;
-function balanced(a, b, str) {
-  var bal = 0;
-  var m = {};
-  var ended = false;
-
-  for (var i = 0; i < str.length; i++) {
-    if (a == str.substr(i, a.length)) {
-      if (!('start' in m)) m.start = i;
-      bal++;
-    }
-    else if (b == str.substr(i, b.length) && 'start' in m) {
-      ended = true;
-      bal--;
-      if (!bal) {
-        m.end = i;
-        m.pre = str.substr(0, m.start);
-        m.body = (m.end - m.start > 1)
-          ? str.substring(m.start + a.length, m.end)
-          : '';
-        m.post = str.slice(m.end + b.length);
-        return m;
-      }
-    }
-  }
-
-  // if we opened more than we closed, find the one we closed
-  if (bal && ended) {
-    var start = m.start + a.length;
-    m = balanced(a, b, str.substr(start));
-    if (m) {
-      m.start += start;
-      m.end += start;
-      m.pre = str.slice(0, start) + m.pre;
-    }
-    return m;
-  }
-}
diff --git a/bin/node_modules/cordova-common/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/package.json b/bin/node_modules/cordova-common/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/package.json
deleted file mode 100644
index 23ecd26..0000000
--- a/bin/node_modules/cordova-common/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/package.json
+++ /dev/null
@@ -1,73 +0,0 @@
-{
-  "name": "balanced-match",
-  "description": "Match balanced character pairs, like \"{\" and \"}\"",
-  "version": "0.2.1",
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/juliangruber/balanced-match.git"
-  },
-  "homepage": "https://github.com/juliangruber/balanced-match",
-  "main": "index.js",
-  "scripts": {
-    "test": "make test"
-  },
-  "dependencies": {},
-  "devDependencies": {
-    "tape": "~1.1.1"
-  },
-  "keywords": [
-    "match",
-    "regexp",
-    "test",
-    "balanced",
-    "parse"
-  ],
-  "author": {
-    "name": "Julian Gruber",
-    "email": "mail@juliangruber.com",
-    "url": "http://juliangruber.com"
-  },
-  "license": "MIT",
-  "testling": {
-    "files": "test/*.js",
-    "browsers": [
-      "ie/8..latest",
-      "firefox/20..latest",
-      "firefox/nightly",
-      "chrome/25..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"
-    ]
-  },
-  "gitHead": "d743dd31d7376e0fcf99392a4be7227f2e99bf5d",
-  "bugs": {
-    "url": "https://github.com/juliangruber/balanced-match/issues"
-  },
-  "_id": "balanced-match@0.2.1",
-  "_shasum": "7bc658b4bed61eee424ad74f75f5c3e2c4df3cc7",
-  "_from": "balanced-match@^0.2.0",
-  "_npmVersion": "2.14.7",
-  "_nodeVersion": "4.2.1",
-  "_npmUser": {
-    "name": "juliangruber",
-    "email": "julian@juliangruber.com"
-  },
-  "dist": {
-    "shasum": "7bc658b4bed61eee424ad74f75f5c3e2c4df3cc7",
-    "tarball": "http://registry.npmjs.org/balanced-match/-/balanced-match-0.2.1.tgz"
-  },
-  "maintainers": [
-    {
-      "name": "juliangruber",
-      "email": "julian@juliangruber.com"
-    }
-  ],
-  "directories": {},
-  "_resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.2.1.tgz",
-  "readme": "ERROR: No README data found!"
-}
diff --git a/bin/node_modules/cordova-common/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/test/balanced.js b/bin/node_modules/cordova-common/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/test/balanced.js
deleted file mode 100644
index 36bfd39..0000000
--- a/bin/node_modules/cordova-common/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/test/balanced.js
+++ /dev/null
@@ -1,56 +0,0 @@
-var test = require('tape');
-var balanced = require('..');
-
-test('balanced', function(t) {
-  t.deepEqual(balanced('{', '}', 'pre{in{nest}}post'), {
-    start: 3,
-    end: 12,
-    pre: 'pre',
-    body: 'in{nest}',
-    post: 'post'
-  });
-  t.deepEqual(balanced('{', '}', '{{{{{{{{{in}post'), {
-    start: 8,
-    end: 11,
-    pre: '{{{{{{{{',
-    body: 'in',
-    post: 'post'
-  });
-  t.deepEqual(balanced('{', '}', 'pre{body{in}post'), {
-    start: 8,
-    end: 11,
-    pre: 'pre{body',
-    body: 'in',
-    post: 'post'
-  });
-  t.deepEqual(balanced('{', '}', 'pre}{in{nest}}post'), {
-    start: 4,
-    end: 13,
-    pre: 'pre}',
-    body: 'in{nest}',
-    post: 'post'
-  });
-  t.deepEqual(balanced('{', '}', 'pre{body}between{body2}post'), {
-    start: 3,
-    end: 8,
-    pre: 'pre',
-    body: 'body',
-    post: 'between{body2}post'
-  });
-  t.notOk(balanced('{', '}', 'nope'), 'should be notOk');
-  t.deepEqual(balanced('<b>', '</b>', 'pre<b>in<b>nest</b></b>post'), {
-    start: 3,
-    end: 19,
-    pre: 'pre',
-    body: 'in<b>nest</b>',
-    post: 'post'
-  });
-  t.deepEqual(balanced('<b>', '</b>', 'pre</b><b>in<b>nest</b></b>post'), {
-    start: 7,
-    end: 23,
-    pre: 'pre</b>',
-    body: 'in<b>nest</b>',
-    post: 'post'
-  });
-  t.end();
-});
diff --git a/bin/node_modules/cordova-common/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/.travis.yml b/bin/node_modules/cordova-common/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/.travis.yml
deleted file mode 100644
index f1d0f13..0000000
--- a/bin/node_modules/cordova-common/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/.travis.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-language: node_js
-node_js:
-  - 0.4
-  - 0.6
diff --git a/bin/node_modules/cordova-common/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/LICENSE b/bin/node_modules/cordova-common/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/LICENSE
deleted file mode 100644
index ee27ba4..0000000
--- a/bin/node_modules/cordova-common/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/LICENSE
+++ /dev/null
@@ -1,18 +0,0 @@
-This software is released under the MIT license:
-
-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/bin/node_modules/cordova-common/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/README.markdown b/bin/node_modules/cordova-common/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/README.markdown
deleted file mode 100644
index 408f70a..0000000
--- a/bin/node_modules/cordova-common/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/README.markdown
+++ /dev/null
@@ -1,62 +0,0 @@
-concat-map
-==========
-
-Concatenative mapdashery.
-
-[![browser support](http://ci.testling.com/substack/node-concat-map.png)](http://ci.testling.com/substack/node-concat-map)
-
-[![build status](https://secure.travis-ci.org/substack/node-concat-map.png)](http://travis-ci.org/substack/node-concat-map)
-
-example
-=======
-
-``` js
-var concatMap = require('concat-map');
-var xs = [ 1, 2, 3, 4, 5, 6 ];
-var ys = concatMap(xs, function (x) {
-    return x % 2 ? [ x - 0.1, x, x + 0.1 ] : [];
-});
-console.dir(ys);
-```
-
-***
-
-```
-[ 0.9, 1, 1.1, 2.9, 3, 3.1, 4.9, 5, 5.1 ]
-```
-
-methods
-=======
-
-``` js
-var concatMap = require('concat-map')
-```
-
-concatMap(xs, fn)
------------------
-
-Return an array of concatenated elements by calling `fn(x, i)` for each element
-`x` and each index `i` in the array `xs`.
-
-When `fn(x, i)` returns an array, its result will be concatenated with the
-result array. If `fn(x, i)` returns anything else, that value will be pushed
-onto the end of the result array.
-
-install
-=======
-
-With [npm](http://npmjs.org) do:
-
-```
-npm install concat-map
-```
-
-license
-=======
-
-MIT
-
-notes
-=====
-
-This module was written while sitting high above the ground in a tree.
diff --git a/bin/node_modules/cordova-common/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/example/map.js b/bin/node_modules/cordova-common/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/example/map.js
deleted file mode 100644
index 3365621..0000000
--- a/bin/node_modules/cordova-common/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/example/map.js
+++ /dev/null
@@ -1,6 +0,0 @@
-var concatMap = require('../');
-var xs = [ 1, 2, 3, 4, 5, 6 ];
-var ys = concatMap(xs, function (x) {
-    return x % 2 ? [ x - 0.1, x, x + 0.1 ] : [];
-});
-console.dir(ys);
diff --git a/bin/node_modules/cordova-common/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/index.js b/bin/node_modules/cordova-common/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/index.js
deleted file mode 100644
index b29a781..0000000
--- a/bin/node_modules/cordova-common/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/index.js
+++ /dev/null
@@ -1,13 +0,0 @@
-module.exports = function (xs, fn) {
-    var res = [];
-    for (var i = 0; i < xs.length; i++) {
-        var x = fn(xs[i], i);
-        if (isArray(x)) res.push.apply(res, x);
-        else res.push(x);
-    }
-    return res;
-};
-
-var isArray = Array.isArray || function (xs) {
-    return Object.prototype.toString.call(xs) === '[object Array]';
-};
diff --git a/bin/node_modules/cordova-common/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/package.json b/bin/node_modules/cordova-common/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/package.json
deleted file mode 100644
index b516138..0000000
--- a/bin/node_modules/cordova-common/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/package.json
+++ /dev/null
@@ -1,83 +0,0 @@
-{
-  "name": "concat-map",
-  "description": "concatenative mapdashery",
-  "version": "0.0.1",
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/substack/node-concat-map.git"
-  },
-  "main": "index.js",
-  "keywords": [
-    "concat",
-    "concatMap",
-    "map",
-    "functional",
-    "higher-order"
-  ],
-  "directories": {
-    "example": "example",
-    "test": "test"
-  },
-  "scripts": {
-    "test": "tape test/*.js"
-  },
-  "devDependencies": {
-    "tape": "~2.4.0"
-  },
-  "license": "MIT",
-  "author": {
-    "name": "James Halliday",
-    "email": "mail@substack.net",
-    "url": "http://substack.net"
-  },
-  "testling": {
-    "files": "test/*.js",
-    "browsers": {
-      "ie": [
-        6,
-        7,
-        8,
-        9
-      ],
-      "ff": [
-        3.5,
-        10,
-        15
-      ],
-      "chrome": [
-        10,
-        22
-      ],
-      "safari": [
-        5.1
-      ],
-      "opera": [
-        12
-      ]
-    }
-  },
-  "bugs": {
-    "url": "https://github.com/substack/node-concat-map/issues"
-  },
-  "homepage": "https://github.com/substack/node-concat-map",
-  "_id": "concat-map@0.0.1",
-  "dist": {
-    "shasum": "d8a96bd77fd68df7793a73036a3ba0d5405d477b",
-    "tarball": "http://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz"
-  },
-  "_from": "concat-map@0.0.1",
-  "_npmVersion": "1.3.21",
-  "_npmUser": {
-    "name": "substack",
-    "email": "mail@substack.net"
-  },
-  "maintainers": [
-    {
-      "name": "substack",
-      "email": "mail@substack.net"
-    }
-  ],
-  "_shasum": "d8a96bd77fd68df7793a73036a3ba0d5405d477b",
-  "_resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
-  "readme": "ERROR: No README data found!"
-}
diff --git a/bin/node_modules/cordova-common/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/test/map.js b/bin/node_modules/cordova-common/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/test/map.js
deleted file mode 100644
index fdbd702..0000000
--- a/bin/node_modules/cordova-common/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/test/map.js
+++ /dev/null
@@ -1,39 +0,0 @@
-var concatMap = require('../');
-var test = require('tape');
-
-test('empty or not', function (t) {
-    var xs = [ 1, 2, 3, 4, 5, 6 ];
-    var ixes = [];
-    var ys = concatMap(xs, function (x, ix) {
-        ixes.push(ix);
-        return x % 2 ? [ x - 0.1, x, x + 0.1 ] : [];
-    });
-    t.same(ys, [ 0.9, 1, 1.1, 2.9, 3, 3.1, 4.9, 5, 5.1 ]);
-    t.same(ixes, [ 0, 1, 2, 3, 4, 5 ]);
-    t.end();
-});
-
-test('always something', function (t) {
-    var xs = [ 'a', 'b', 'c', 'd' ];
-    var ys = concatMap(xs, function (x) {
-        return x === 'b' ? [ 'B', 'B', 'B' ] : [ x ];
-    });
-    t.same(ys, [ 'a', 'B', 'B', 'B', 'c', 'd' ]);
-    t.end();
-});
-
-test('scalars', function (t) {
-    var xs = [ 'a', 'b', 'c', 'd' ];
-    var ys = concatMap(xs, function (x) {
-        return x === 'b' ? [ 'B', 'B', 'B' ] : x;
-    });
-    t.same(ys, [ 'a', 'B', 'B', 'B', 'c', 'd' ]);
-    t.end();
-});
-
-test('undefs', function (t) {
-    var xs = [ 'a', 'b', 'c', 'd' ];
-    var ys = concatMap(xs, function () {});
-    t.same(ys, [ undefined, undefined, undefined, undefined ]);
-    t.end();
-});
diff --git a/bin/node_modules/cordova-common/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/package.json b/bin/node_modules/cordova-common/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/package.json
deleted file mode 100644
index 1ca4097..0000000
--- a/bin/node_modules/cordova-common/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/package.json
+++ /dev/null
@@ -1,75 +0,0 @@
-{
-  "name": "brace-expansion",
-  "description": "Brace expansion as known from sh/bash",
-  "version": "1.1.1",
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/juliangruber/brace-expansion.git"
-  },
-  "homepage": "https://github.com/juliangruber/brace-expansion",
-  "main": "index.js",
-  "scripts": {
-    "test": "tape test/*.js",
-    "gentest": "bash test/generate.sh"
-  },
-  "dependencies": {
-    "balanced-match": "^0.2.0",
-    "concat-map": "0.0.1"
-  },
-  "devDependencies": {
-    "tape": "^3.0.3"
-  },
-  "keywords": [],
-  "author": {
-    "name": "Julian Gruber",
-    "email": "mail@juliangruber.com",
-    "url": "http://juliangruber.com"
-  },
-  "license": "MIT",
-  "testling": {
-    "files": "test/*.js",
-    "browsers": [
-      "ie/8..latest",
-      "firefox/20..latest",
-      "firefox/nightly",
-      "chrome/25..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"
-    ]
-  },
-  "gitHead": "f50da498166d76ea570cf3b30179f01f0f119612",
-  "bugs": {
-    "url": "https://github.com/juliangruber/brace-expansion/issues"
-  },
-  "_id": "brace-expansion@1.1.1",
-  "_shasum": "da5fb78aef4c44c9e4acf525064fb3208ebab045",
-  "_from": "brace-expansion@^1.0.0",
-  "_npmVersion": "2.6.1",
-  "_nodeVersion": "0.10.36",
-  "_npmUser": {
-    "name": "juliangruber",
-    "email": "julian@juliangruber.com"
-  },
-  "maintainers": [
-    {
-      "name": "juliangruber",
-      "email": "julian@juliangruber.com"
-    },
-    {
-      "name": "isaacs",
-      "email": "isaacs@npmjs.com"
-    }
-  ],
-  "dist": {
-    "shasum": "da5fb78aef4c44c9e4acf525064fb3208ebab045",
-    "tarball": "http://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.1.tgz"
-  },
-  "directories": {},
-  "_resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.1.tgz",
-  "readme": "ERROR: No README data found!"
-}
diff --git a/bin/node_modules/cordova-common/node_modules/glob/node_modules/minimatch/package.json b/bin/node_modules/cordova-common/node_modules/glob/node_modules/minimatch/package.json
deleted file mode 100644
index 9a907dd..0000000
--- a/bin/node_modules/cordova-common/node_modules/glob/node_modules/minimatch/package.json
+++ /dev/null
@@ -1,60 +0,0 @@
-{
-  "author": {
-    "name": "Isaac Z. Schlueter",
-    "email": "i@izs.me",
-    "url": "http://blog.izs.me"
-  },
-  "name": "minimatch",
-  "description": "a glob matcher in javascript",
-  "version": "3.0.0",
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/isaacs/minimatch.git"
-  },
-  "main": "minimatch.js",
-  "scripts": {
-    "posttest": "standard minimatch.js test/*.js",
-    "test": "tap test/*.js"
-  },
-  "engines": {
-    "node": "*"
-  },
-  "dependencies": {
-    "brace-expansion": "^1.0.0"
-  },
-  "devDependencies": {
-    "standard": "^3.7.2",
-    "tap": "^1.2.0"
-  },
-  "license": "ISC",
-  "files": [
-    "minimatch.js"
-  ],
-  "gitHead": "270dbea567f0af6918cb18103e98c612aa717a20",
-  "bugs": {
-    "url": "https://github.com/isaacs/minimatch/issues"
-  },
-  "homepage": "https://github.com/isaacs/minimatch#readme",
-  "_id": "minimatch@3.0.0",
-  "_shasum": "5236157a51e4f004c177fb3c527ff7dd78f0ef83",
-  "_from": "minimatch@2 || 3",
-  "_npmVersion": "3.3.2",
-  "_nodeVersion": "4.0.0",
-  "_npmUser": {
-    "name": "isaacs",
-    "email": "isaacs@npmjs.com"
-  },
-  "dist": {
-    "shasum": "5236157a51e4f004c177fb3c527ff7dd78f0ef83",
-    "tarball": "http://registry.npmjs.org/minimatch/-/minimatch-3.0.0.tgz"
-  },
-  "maintainers": [
-    {
-      "name": "isaacs",
-      "email": "i@izs.me"
-    }
-  ],
-  "directories": {},
-  "_resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.0.tgz",
-  "readme": "ERROR: No README data found!"
-}
diff --git a/bin/node_modules/cordova-common/node_modules/glob/node_modules/once/LICENSE b/bin/node_modules/cordova-common/node_modules/glob/node_modules/once/LICENSE
deleted file mode 100644
index 19129e3..0000000
--- a/bin/node_modules/cordova-common/node_modules/glob/node_modules/once/LICENSE
+++ /dev/null
@@ -1,15 +0,0 @@
-The ISC License
-
-Copyright (c) Isaac Z. Schlueter and Contributors
-
-Permission to use, copy, modify, and/or distribute this software for any
-purpose with or without fee is hereby granted, provided that the above
-copyright notice and this permission notice appear in all copies.
-
-THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
-WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
-ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
-ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
-IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/bin/node_modules/cordova-common/node_modules/glob/node_modules/once/README.md b/bin/node_modules/cordova-common/node_modules/glob/node_modules/once/README.md
deleted file mode 100644
index a2981ea..0000000
--- a/bin/node_modules/cordova-common/node_modules/glob/node_modules/once/README.md
+++ /dev/null
@@ -1,51 +0,0 @@
-# once
-
-Only call a function once.
-
-## usage
-
-```javascript
-var once = require('once')
-
-function load (file, cb) {
-  cb = once(cb)
-  loader.load('file')
-  loader.once('load', cb)
-  loader.once('error', cb)
-}
-```
-
-Or add to the Function.prototype in a responsible way:
-
-```javascript
-// only has to be done once
-require('once').proto()
-
-function load (file, cb) {
-  cb = cb.once()
-  loader.load('file')
-  loader.once('load', cb)
-  loader.once('error', cb)
-}
-```
-
-Ironically, the prototype feature makes this module twice as
-complicated as necessary.
-
-To check whether you function has been called, use `fn.called`. Once the
-function is called for the first time the return value of the original
-function is saved in `fn.value` and subsequent calls will continue to
-return this value.
-
-```javascript
-var once = require('once')
-
-function load (cb) {
-  cb = once(cb)
-  var stream = createStream()
-  stream.once('data', cb)
-  stream.once('end', function () {
-    if (!cb.called) cb(new Error('not found'))
-  })
-}
-```
diff --git a/bin/node_modules/cordova-common/node_modules/glob/node_modules/once/node_modules/wrappy/LICENSE b/bin/node_modules/cordova-common/node_modules/glob/node_modules/once/node_modules/wrappy/LICENSE
deleted file mode 100644
index 19129e3..0000000
--- a/bin/node_modules/cordova-common/node_modules/glob/node_modules/once/node_modules/wrappy/LICENSE
+++ /dev/null
@@ -1,15 +0,0 @@
-The ISC License
-
-Copyright (c) Isaac Z. Schlueter and Contributors
-
-Permission to use, copy, modify, and/or distribute this software for any
-purpose with or without fee is hereby granted, provided that the above
-copyright notice and this permission notice appear in all copies.
-
-THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
-WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
-ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
-ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
-IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/bin/node_modules/cordova-common/node_modules/glob/node_modules/once/node_modules/wrappy/README.md b/bin/node_modules/cordova-common/node_modules/glob/node_modules/once/node_modules/wrappy/README.md
deleted file mode 100644
index 98eab25..0000000
--- a/bin/node_modules/cordova-common/node_modules/glob/node_modules/once/node_modules/wrappy/README.md
+++ /dev/null
@@ -1,36 +0,0 @@
-# wrappy
-
-Callback wrapping utility
-
-## USAGE
-
-```javascript
-var wrappy = require("wrappy")
-
-// var wrapper = wrappy(wrapperFunction)
-
-// make sure a cb is called only once
-// See also: http://npm.im/once for this specific use case
-var once = wrappy(function (cb) {
-  var called = false
-  return function () {
-    if (called) return
-    called = true
-    return cb.apply(this, arguments)
-  }
-})
-
-function printBoo () {
-  console.log('boo')
-}
-// has some rando property
-printBoo.iAmBooPrinter = true
-
-var onlyPrintOnce = once(printBoo)
-
-onlyPrintOnce() // prints 'boo'
-onlyPrintOnce() // does nothing
-
-// random property is retained!
-assert.equal(onlyPrintOnce.iAmBooPrinter, true)
-```
diff --git a/bin/node_modules/cordova-common/node_modules/glob/node_modules/once/node_modules/wrappy/package.json b/bin/node_modules/cordova-common/node_modules/glob/node_modules/once/node_modules/wrappy/package.json
deleted file mode 100644
index 9165c6e..0000000
--- a/bin/node_modules/cordova-common/node_modules/glob/node_modules/once/node_modules/wrappy/package.json
+++ /dev/null
@@ -1,52 +0,0 @@
-{
-  "name": "wrappy",
-  "version": "1.0.1",
-  "description": "Callback wrapping utility",
-  "main": "wrappy.js",
-  "directories": {
-    "test": "test"
-  },
-  "dependencies": {},
-  "devDependencies": {
-    "tap": "^0.4.12"
-  },
-  "scripts": {
-    "test": "tap test/*.js"
-  },
-  "repository": {
-    "type": "git",
-    "url": "https://github.com/npm/wrappy"
-  },
-  "author": {
-    "name": "Isaac Z. Schlueter",
-    "email": "i@izs.me",
-    "url": "http://blog.izs.me/"
-  },
-  "license": "ISC",
-  "bugs": {
-    "url": "https://github.com/npm/wrappy/issues"
-  },
-  "homepage": "https://github.com/npm/wrappy",
-  "gitHead": "006a8cbac6b99988315834c207896eed71fd069a",
-  "_id": "wrappy@1.0.1",
-  "_shasum": "1e65969965ccbc2db4548c6b84a6f2c5aedd4739",
-  "_from": "wrappy@1",
-  "_npmVersion": "2.0.0",
-  "_nodeVersion": "0.10.31",
-  "_npmUser": {
-    "name": "isaacs",
-    "email": "i@izs.me"
-  },
-  "maintainers": [
-    {
-      "name": "isaacs",
-      "email": "i@izs.me"
-    }
-  ],
-  "dist": {
-    "shasum": "1e65969965ccbc2db4548c6b84a6f2c5aedd4739",
-    "tarball": "http://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz"
-  },
-  "_resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz",
-  "readme": "ERROR: No README data found!"
-}
diff --git a/bin/node_modules/cordova-common/node_modules/glob/node_modules/once/node_modules/wrappy/test/basic.js b/bin/node_modules/cordova-common/node_modules/glob/node_modules/once/node_modules/wrappy/test/basic.js
deleted file mode 100644
index 5ed0fcd..0000000
--- a/bin/node_modules/cordova-common/node_modules/glob/node_modules/once/node_modules/wrappy/test/basic.js
+++ /dev/null
@@ -1,51 +0,0 @@
-var test = require('tap').test
-var wrappy = require('../wrappy.js')
-
-test('basic', function (t) {
-  function onceifier (cb) {
-    var called = false
-    return function () {
-      if (called) return
-      called = true
-      return cb.apply(this, arguments)
-    }
-  }
-  onceifier.iAmOnce = {}
-  var once = wrappy(onceifier)
-  t.equal(once.iAmOnce, onceifier.iAmOnce)
-
-  var called = 0
-  function boo () {
-    t.equal(called, 0)
-    called++
-  }
-  // has some rando property
-  boo.iAmBoo = true
-
-  var onlyPrintOnce = once(boo)
-
-  onlyPrintOnce() // prints 'boo'
-  onlyPrintOnce() // does nothing
-  t.equal(called, 1)
-
-  // random property is retained!
-  t.equal(onlyPrintOnce.iAmBoo, true)
-
-  var logs = []
-  var logwrap = wrappy(function (msg, cb) {
-    logs.push(msg + ' wrapping cb')
-    return function () {
-      logs.push(msg + ' before cb')
-      var ret = cb.apply(this, arguments)
-      logs.push(msg + ' after cb')
-    }
-  })
-
-  var c = logwrap('foo', function () {
-    t.same(logs, [ 'foo wrapping cb', 'foo before cb' ])
-  })
-  c()
-  t.same(logs, [ 'foo wrapping cb', 'foo before cb', 'foo after cb' ])
-
-  t.end()
-})
diff --git a/bin/node_modules/cordova-common/node_modules/glob/node_modules/once/node_modules/wrappy/wrappy.js b/bin/node_modules/cordova-common/node_modules/glob/node_modules/once/node_modules/wrappy/wrappy.js
deleted file mode 100644
index bb7e7d6..0000000
--- a/bin/node_modules/cordova-common/node_modules/glob/node_modules/once/node_modules/wrappy/wrappy.js
+++ /dev/null
@@ -1,33 +0,0 @@
-// Returns a wrapper function that returns a wrapped callback
-// The wrapper function should do some stuff, and return a
-// presumably different callback function.
-// This makes sure that own properties are retained, so that
-// decorations and such are not lost along the way.
-module.exports = wrappy
-function wrappy (fn, cb) {
-  if (fn && cb) return wrappy(fn)(cb)
-
-  if (typeof fn !== 'function')
-    throw new TypeError('need wrapper function')
-
-  Object.keys(fn).forEach(function (k) {
-    wrapper[k] = fn[k]
-  })
-
-  return wrapper
-
-  function wrapper() {
-    var args = new Array(arguments.length)
-    for (var i = 0; i < args.length; i++) {
-      args[i] = arguments[i]
-    }
-    var ret = fn.apply(this, args)
-    var cb = args[args.length-1]
-    if (typeof ret === 'function' && ret !== cb) {
-      Object.keys(cb).forEach(function (k) {
-        ret[k] = cb[k]
-      })
-    }
-    return ret
-  }
-}
diff --git a/bin/node_modules/cordova-common/node_modules/glob/node_modules/once/once.js b/bin/node_modules/cordova-common/node_modules/glob/node_modules/once/once.js
deleted file mode 100644
index 2e1e721..0000000
--- a/bin/node_modules/cordova-common/node_modules/glob/node_modules/once/once.js
+++ /dev/null
@@ -1,21 +0,0 @@
-var wrappy = require('wrappy')
-module.exports = wrappy(once)
-
-once.proto = once(function () {
-  Object.defineProperty(Function.prototype, 'once', {
-    value: function () {
-      return once(this)
-    },
-    configurable: true
-  })
-})
-
-function once (fn) {
-  var f = function () {
-    if (f.called) return f.value
-    f.called = true
-    return f.value = fn.apply(this, arguments)
-  }
-  f.called = false
-  return f
-}
diff --git a/bin/node_modules/cordova-common/node_modules/glob/node_modules/once/package.json b/bin/node_modules/cordova-common/node_modules/glob/node_modules/once/package.json
deleted file mode 100644
index 4eef2f4..0000000
--- a/bin/node_modules/cordova-common/node_modules/glob/node_modules/once/package.json
+++ /dev/null
@@ -1,60 +0,0 @@
-{
-  "name": "once",
-  "version": "1.3.2",
-  "description": "Run a function exactly one time",
-  "main": "once.js",
-  "directories": {
-    "test": "test"
-  },
-  "dependencies": {
-    "wrappy": "1"
-  },
-  "devDependencies": {
-    "tap": "~0.3.0"
-  },
-  "scripts": {
-    "test": "tap test/*.js"
-  },
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/isaacs/once.git"
-  },
-  "keywords": [
-    "once",
-    "function",
-    "one",
-    "single"
-  ],
-  "author": {
-    "name": "Isaac Z. Schlueter",
-    "email": "i@izs.me",
-    "url": "http://blog.izs.me/"
-  },
-  "license": "ISC",
-  "gitHead": "e35eed5a7867574e2bf2260a1ba23970958b22f2",
-  "bugs": {
-    "url": "https://github.com/isaacs/once/issues"
-  },
-  "homepage": "https://github.com/isaacs/once#readme",
-  "_id": "once@1.3.2",
-  "_shasum": "d8feeca93b039ec1dcdee7741c92bdac5e28081b",
-  "_from": "once@^1.3.0",
-  "_npmVersion": "2.9.1",
-  "_nodeVersion": "2.0.0",
-  "_npmUser": {
-    "name": "isaacs",
-    "email": "isaacs@npmjs.com"
-  },
-  "dist": {
-    "shasum": "d8feeca93b039ec1dcdee7741c92bdac5e28081b",
-    "tarball": "http://registry.npmjs.org/once/-/once-1.3.2.tgz"
-  },
-  "maintainers": [
-    {
-      "name": "isaacs",
-      "email": "i@izs.me"
-    }
-  ],
-  "_resolved": "https://registry.npmjs.org/once/-/once-1.3.2.tgz",
-  "readme": "ERROR: No README data found!"
-}
diff --git a/bin/node_modules/cordova-common/node_modules/glob/node_modules/once/test/once.js b/bin/node_modules/cordova-common/node_modules/glob/node_modules/once/test/once.js
deleted file mode 100644
index c618360..0000000
--- a/bin/node_modules/cordova-common/node_modules/glob/node_modules/once/test/once.js
+++ /dev/null
@@ -1,23 +0,0 @@
-var test = require('tap').test
-var once = require('../once.js')
-
-test('once', function (t) {
-  var f = 0
-  function fn (g) {
-    t.equal(f, 0)
-    f ++
-    return f + g + this
-  }
-  fn.ownProperty = {}
-  var foo = once(fn)
-  t.equal(fn.ownProperty, foo.ownProperty)
-  t.notOk(foo.called)
-  for (var i = 0; i < 1E3; i++) {
-    t.same(f, i === 0 ? 0 : 1)
-    var g = foo.call(1, 1)
-    t.ok(foo.called)
-    t.same(g, 3)
-    t.same(f, 1)
-  }
-  t.end()
-})
diff --git a/bin/node_modules/cordova-common/node_modules/glob/node_modules/path-is-absolute/index.js b/bin/node_modules/cordova-common/node_modules/glob/node_modules/path-is-absolute/index.js
deleted file mode 100644
index 19f103f..0000000
--- a/bin/node_modules/cordova-common/node_modules/glob/node_modules/path-is-absolute/index.js
+++ /dev/null
@@ -1,20 +0,0 @@
-'use strict';
-
-function posix(path) {
-	return path.charAt(0) === '/';
-};
-
-function win32(path) {
-	// https://github.com/joyent/node/blob/b3fcc245fb25539909ef1d5eaa01dbf92e168633/lib/path.js#L56
-	var splitDeviceRe = /^([a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/]+[^\\\/]+)?([\\\/])?([\s\S]*?)$/;
-	var result = splitDeviceRe.exec(path);
-	var device = result[1] || '';
-	var isUnc = !!device && device.charAt(1) !== ':';
-
-	// UNC paths are always absolute
-	return !!result[2] || isUnc;
-};
-
-module.exports = process.platform === 'win32' ? win32 : posix;
-module.exports.posix = posix;
-module.exports.win32 = win32;
diff --git a/bin/node_modules/cordova-common/node_modules/glob/node_modules/path-is-absolute/license b/bin/node_modules/cordova-common/node_modules/glob/node_modules/path-is-absolute/license
deleted file mode 100644
index 654d0bf..0000000
--- a/bin/node_modules/cordova-common/node_modules/glob/node_modules/path-is-absolute/license
+++ /dev/null
@@ -1,21 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
-
-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/bin/node_modules/cordova-common/node_modules/glob/node_modules/path-is-absolute/package.json b/bin/node_modules/cordova-common/node_modules/glob/node_modules/path-is-absolute/package.json
deleted file mode 100644
index 100878b..0000000
--- a/bin/node_modules/cordova-common/node_modules/glob/node_modules/path-is-absolute/package.json
+++ /dev/null
@@ -1,70 +0,0 @@
-{
-  "name": "path-is-absolute",
-  "version": "1.0.0",
-  "description": "Node.js 0.12 path.isAbsolute() ponyfill",
-  "license": "MIT",
-  "repository": {
-    "type": "git",
-    "url": "https://github.com/sindresorhus/path-is-absolute"
-  },
-  "author": {
-    "name": "Sindre Sorhus",
-    "email": "sindresorhus@gmail.com",
-    "url": "sindresorhus.com"
-  },
-  "engines": {
-    "node": ">=0.10.0"
-  },
-  "scripts": {
-    "test": "node test.js"
-  },
-  "files": [
-    "index.js"
-  ],
-  "keywords": [
-    "path",
-    "paths",
-    "file",
-    "dir",
-    "absolute",
-    "isabsolute",
-    "is-absolute",
-    "built-in",
-    "util",
-    "utils",
-    "core",
-    "ponyfill",
-    "polyfill",
-    "shim",
-    "is",
-    "detect",
-    "check"
-  ],
-  "gitHead": "7a76a0c9f2263192beedbe0a820e4d0baee5b7a1",
-  "bugs": {
-    "url": "https://github.com/sindresorhus/path-is-absolute/issues"
-  },
-  "homepage": "https://github.com/sindresorhus/path-is-absolute",
-  "_id": "path-is-absolute@1.0.0",
-  "_shasum": "263dada66ab3f2fb10bf7f9d24dd8f3e570ef912",
-  "_from": "path-is-absolute@^1.0.0",
-  "_npmVersion": "2.5.1",
-  "_nodeVersion": "0.12.0",
-  "_npmUser": {
-    "name": "sindresorhus",
-    "email": "sindresorhus@gmail.com"
-  },
-  "maintainers": [
-    {
-      "name": "sindresorhus",
-      "email": "sindresorhus@gmail.com"
-    }
-  ],
-  "dist": {
-    "shasum": "263dada66ab3f2fb10bf7f9d24dd8f3e570ef912",
-    "tarball": "http://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.0.tgz"
-  },
-  "directories": {},
-  "_resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.0.tgz",
-  "readme": "ERROR: No README data found!"
-}
diff --git a/bin/node_modules/cordova-common/node_modules/glob/node_modules/path-is-absolute/readme.md b/bin/node_modules/cordova-common/node_modules/glob/node_modules/path-is-absolute/readme.md
deleted file mode 100644
index cdf94f4..0000000
--- a/bin/node_modules/cordova-common/node_modules/glob/node_modules/path-is-absolute/readme.md
+++ /dev/null
@@ -1,51 +0,0 @@
-# path-is-absolute [![Build Status](https://travis-ci.org/sindresorhus/path-is-absolute.svg?branch=master)](https://travis-ci.org/sindresorhus/path-is-absolute)
-
-> Node.js 0.12 [`path.isAbsolute()`](http://nodejs.org/api/path.html#path_path_isabsolute_path) ponyfill
-
-> Ponyfill: A polyfill that doesn't overwrite the native method
-
-
-## Install
-
-```
-$ npm install --save path-is-absolute
-```
-
-
-## Usage
-
-```js
-var pathIsAbsolute = require('path-is-absolute');
-
-// Linux
-pathIsAbsolute('/home/foo');
-//=> true
-
-// Windows
-pathIsAbsolute('C:/Users/');
-//=> true
-
-// Any OS
-pathIsAbsolute.posix('/home/foo');
-//=> true
-```
-
-
-## API
-
-See the [`path.isAbsolute()` docs](http://nodejs.org/api/path.html#path_path_isabsolute_path).
-
-### pathIsAbsolute(path)
-
-### pathIsAbsolute.posix(path)
-
-The Posix specific version.
-
-### pathIsAbsolute.win32(path)
-
-The Windows specific version.
-
-
-## License
-
-MIT © [Sindre Sorhus](http://sindresorhus.com)
diff --git a/bin/node_modules/cordova-common/node_modules/glob/package.json b/bin/node_modules/cordova-common/node_modules/glob/package.json
deleted file mode 100644
index 1cbc310..0000000
--- a/bin/node_modules/cordova-common/node_modules/glob/package.json
+++ /dev/null
@@ -1,73 +0,0 @@
-{
-  "author": {
-    "name": "Isaac Z. Schlueter",
-    "email": "i@izs.me",
-    "url": "http://blog.izs.me/"
-  },
-  "name": "glob",
-  "description": "a little globber",
-  "version": "5.0.15",
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/isaacs/node-glob.git"
-  },
-  "main": "glob.js",
-  "files": [
-    "glob.js",
-    "sync.js",
-    "common.js"
-  ],
-  "engines": {
-    "node": "*"
-  },
-  "dependencies": {
-    "inflight": "^1.0.4",
-    "inherits": "2",
-    "minimatch": "2 || 3",
-    "once": "^1.3.0",
-    "path-is-absolute": "^1.0.0"
-  },
-  "devDependencies": {
-    "mkdirp": "0",
-    "rimraf": "^2.2.8",
-    "tap": "^1.1.4",
-    "tick": "0.0.6"
-  },
-  "scripts": {
-    "prepublish": "npm run benchclean",
-    "profclean": "rm -f v8.log profile.txt",
-    "test": "tap test/*.js --cov",
-    "test-regen": "npm run profclean && TEST_REGEN=1 node test/00-setup.js",
-    "bench": "bash benchmark.sh",
-    "prof": "bash prof.sh && cat profile.txt",
-    "benchclean": "node benchclean.js"
-  },
-  "license": "ISC",
-  "gitHead": "3a7e71d453dd80e75b196fd262dd23ed54beeceb",
-  "bugs": {
-    "url": "https://github.com/isaacs/node-glob/issues"
-  },
-  "homepage": "https://github.com/isaacs/node-glob#readme",
-  "_id": "glob@5.0.15",
-  "_shasum": "1bc936b9e02f4a603fcc222ecf7633d30b8b93b1",
-  "_from": "glob@^5.0.13",
-  "_npmVersion": "3.3.2",
-  "_nodeVersion": "4.0.0",
-  "_npmUser": {
-    "name": "isaacs",
-    "email": "isaacs@npmjs.com"
-  },
-  "dist": {
-    "shasum": "1bc936b9e02f4a603fcc222ecf7633d30b8b93b1",
-    "tarball": "http://registry.npmjs.org/glob/-/glob-5.0.15.tgz"
-  },
-  "maintainers": [
-    {
-      "name": "isaacs",
-      "email": "i@izs.me"
-    }
-  ],
-  "directories": {},
-  "_resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz",
-  "readme": "ERROR: No README data found!"
-}
diff --git a/bin/node_modules/cordova-common/node_modules/glob/sync.js b/bin/node_modules/cordova-common/node_modules/glob/sync.js
deleted file mode 100644
index 09883d2..0000000
--- a/bin/node_modules/cordova-common/node_modules/glob/sync.js
+++ /dev/null
@@ -1,460 +0,0 @@
-module.exports = globSync
-globSync.GlobSync = GlobSync
-
-var fs = require('fs')
-var minimatch = require('minimatch')
-var Minimatch = minimatch.Minimatch
-var Glob = require('./glob.js').Glob
-var util = require('util')
-var path = require('path')
-var assert = require('assert')
-var isAbsolute = require('path-is-absolute')
-var common = require('./common.js')
-var alphasort = common.alphasort
-var alphasorti = common.alphasorti
-var setopts = common.setopts
-var ownProp = common.ownProp
-var childrenIgnored = common.childrenIgnored
-
-function globSync (pattern, options) {
-  if (typeof options === 'function' || arguments.length === 3)
-    throw new TypeError('callback provided to sync glob\n'+
-                        'See: https://github.com/isaacs/node-glob/issues/167')
-
-  return new GlobSync(pattern, options).found
-}
-
-function GlobSync (pattern, options) {
-  if (!pattern)
-    throw new Error('must provide pattern')
-
-  if (typeof options === 'function' || arguments.length === 3)
-    throw new TypeError('callback provided to sync glob\n'+
-                        'See: https://github.com/isaacs/node-glob/issues/167')
-
-  if (!(this instanceof GlobSync))
-    return new GlobSync(pattern, options)
-
-  setopts(this, pattern, options)
-
-  if (this.noprocess)
-    return this
-
-  var n = this.minimatch.set.length
-  this.matches = new Array(n)
-  for (var i = 0; i < n; i ++) {
-    this._process(this.minimatch.set[i], i, false)
-  }
-  this._finish()
-}
-
-GlobSync.prototype._finish = function () {
-  assert(this instanceof GlobSync)
-  if (this.realpath) {
-    var self = this
-    this.matches.forEach(function (matchset, index) {
-      var set = self.matches[index] = Object.create(null)
-      for (var p in matchset) {
-        try {
-          p = self._makeAbs(p)
-          var real = fs.realpathSync(p, self.realpathCache)
-          set[real] = true
-        } catch (er) {
-          if (er.syscall === 'stat')
-            set[self._makeAbs(p)] = true
-          else
-            throw er
-        }
-      }
-    })
-  }
-  common.finish(this)
-}
-
-
-GlobSync.prototype._process = function (pattern, index, inGlobStar) {
-  assert(this instanceof GlobSync)
-
-  // Get the first [n] parts of pattern that are all strings.
-  var n = 0
-  while (typeof pattern[n] === 'string') {
-    n ++
-  }
-  // now n is the index of the first one that is *not* a string.
-
-  // See if there's anything else
-  var prefix
-  switch (n) {
-    // if not, then this is rather simple
-    case pattern.length:
-      this._processSimple(pattern.join('/'), index)
-      return
-
-    case 0:
-      // pattern *starts* with some non-trivial item.
-      // going to readdir(cwd), but not include the prefix in matches.
-      prefix = null
-      break
-
-    default:
-      // pattern has some string bits in the front.
-      // whatever it starts with, whether that's 'absolute' like /foo/bar,
-      // or 'relative' like '../baz'
-      prefix = pattern.slice(0, n).join('/')
-      break
-  }
-
-  var remain = pattern.slice(n)
-
-  // get the list of entries.
-  var read
-  if (prefix === null)
-    read = '.'
-  else if (isAbsolute(prefix) || isAbsolute(pattern.join('/'))) {
-    if (!prefix || !isAbsolute(prefix))
-      prefix = '/' + prefix
-    read = prefix
-  } else
-    read = prefix
-
-  var abs = this._makeAbs(read)
-
-  //if ignored, skip processing
-  if (childrenIgnored(this, read))
-    return
-
-  var isGlobStar = remain[0] === minimatch.GLOBSTAR
-  if (isGlobStar)
-    this._processGlobStar(prefix, read, abs, remain, index, inGlobStar)
-  else
-    this._processReaddir(prefix, read, abs, remain, index, inGlobStar)
-}
-
-
-GlobSync.prototype._processReaddir = function (prefix, read, abs, remain, index, inGlobStar) {
-  var entries = this._readdir(abs, inGlobStar)
-
-  // if the abs isn't a dir, then nothing can match!
-  if (!entries)
-    return
-
-  // It will only match dot entries if it starts with a dot, or if
-  // dot is set.  Stuff like @(.foo|.bar) isn't allowed.
-  var pn = remain[0]
-  var negate = !!this.minimatch.negate
-  var rawGlob = pn._glob
-  var dotOk = this.dot || rawGlob.charAt(0) === '.'
-
-  var matchedEntries = []
-  for (var i = 0; i < entries.length; i++) {
-    var e = entries[i]
-    if (e.charAt(0) !== '.' || dotOk) {
-      var m
-      if (negate && !prefix) {
-        m = !e.match(pn)
-      } else {
-        m = e.match(pn)
-      }
-      if (m)
-        matchedEntries.push(e)
-    }
-  }
-
-  var len = matchedEntries.length
-  // If there are no matched entries, then nothing matches.
-  if (len === 0)
-    return
-
-  // if this is the last remaining pattern bit, then no need for
-  // an additional stat *unless* the user has specified mark or
-  // stat explicitly.  We know they exist, since readdir returned
-  // them.
-
-  if (remain.length === 1 && !this.mark && !this.stat) {
-    if (!this.matches[index])
-      this.matches[index] = Object.create(null)
-
-    for (var i = 0; i < len; i ++) {
-      var e = matchedEntries[i]
-      if (prefix) {
-        if (prefix.slice(-1) !== '/')
-          e = prefix + '/' + e
-        else
-          e = prefix + e
-      }
-
-      if (e.charAt(0) === '/' && !this.nomount) {
-        e = path.join(this.root, e)
-      }
-      this.matches[index][e] = true
-    }
-    // This was the last one, and no stats were needed
-    return
-  }
-
-  // now test all matched entries as stand-ins for that part
-  // of the pattern.
-  remain.shift()
-  for (var i = 0; i < len; i ++) {
-    var e = matchedEntries[i]
-    var newPattern
-    if (prefix)
-      newPattern = [prefix, e]
-    else
-      newPattern = [e]
-    this._process(newPattern.concat(remain), index, inGlobStar)
-  }
-}
-
-
-GlobSync.prototype._emitMatch = function (index, e) {
-  var abs = this._makeAbs(e)
-  if (this.mark)
-    e = this._mark(e)
-
-  if (this.matches[index][e])
-    return
-
-  if (this.nodir) {
-    var c = this.cache[this._makeAbs(e)]
-    if (c === 'DIR' || Array.isArray(c))
-      return
-  }
-
-  this.matches[index][e] = true
-  if (this.stat)
-    this._stat(e)
-}
-
-
-GlobSync.prototype._readdirInGlobStar = function (abs) {
-  // follow all symlinked directories forever
-  // just proceed as if this is a non-globstar situation
-  if (this.follow)
-    return this._readdir(abs, false)
-
-  var entries
-  var lstat
-  var stat
-  try {
-    lstat = fs.lstatSync(abs)
-  } catch (er) {
-    // lstat failed, doesn't exist
-    return null
-  }
-
-  var isSym = lstat.isSymbolicLink()
-  this.symlinks[abs] = isSym
-
-  // If it's not a symlink or a dir, then it's definitely a regular file.
-  // don't bother doing a readdir in that case.
-  if (!isSym && !lstat.isDirectory())
-    this.cache[abs] = 'FILE'
-  else
-    entries = this._readdir(abs, false)
-
-  return entries
-}
-
-GlobSync.prototype._readdir = function (abs, inGlobStar) {
-  var entries
-
-  if (inGlobStar && !ownProp(this.symlinks, abs))
-    return this._readdirInGlobStar(abs)
-
-  if (ownProp(this.cache, abs)) {
-    var c = this.cache[abs]
-    if (!c || c === 'FILE')
-      return null
-
-    if (Array.isArray(c))
-      return c
-  }
-
-  try {
-    return this._readdirEntries(abs, fs.readdirSync(abs))
-  } catch (er) {
-    this._readdirError(abs, er)
-    return null
-  }
-}
-
-GlobSync.prototype._readdirEntries = function (abs, entries) {
-  // if we haven't asked to stat everything, then just
-  // assume that everything in there exists, so we can avoid
-  // having to stat it a second time.
-  if (!this.mark && !this.stat) {
-    for (var i = 0; i < entries.length; i ++) {
-      var e = entries[i]
-      if (abs === '/')
-        e = abs + e
-      else
-        e = abs + '/' + e
-      this.cache[e] = true
-    }
-  }
-
-  this.cache[abs] = entries
-
-  // mark and cache dir-ness
-  return entries
-}
-
-GlobSync.prototype._readdirError = function (f, er) {
-  // handle errors, and cache the information
-  switch (er.code) {
-    case 'ENOTSUP': // https://github.com/isaacs/node-glob/issues/205
-    case 'ENOTDIR': // totally normal. means it *does* exist.
-      this.cache[this._makeAbs(f)] = 'FILE'
-      break
-
-    case 'ENOENT': // not terribly unusual
-    case 'ELOOP':
-    case 'ENAMETOOLONG':
-    case 'UNKNOWN':
-      this.cache[this._makeAbs(f)] = false
-      break
-
-    default: // some unusual error.  Treat as failure.
-      this.cache[this._makeAbs(f)] = false
-      if (this.strict)
-        throw er
-      if (!this.silent)
-        console.error('glob error', er)
-      break
-  }
-}
-
-GlobSync.prototype._processGlobStar = function (prefix, read, abs, remain, index, inGlobStar) {
-
-  var entries = this._readdir(abs, inGlobStar)
-
-  // no entries means not a dir, so it can never have matches
-  // foo.txt/** doesn't match foo.txt
-  if (!entries)
-    return
-
-  // test without the globstar, and with every child both below
-  // and replacing the globstar.
-  var remainWithoutGlobStar = remain.slice(1)
-  var gspref = prefix ? [ prefix ] : []
-  var noGlobStar = gspref.concat(remainWithoutGlobStar)
-
-  // the noGlobStar pattern exits the inGlobStar state
-  this._process(noGlobStar, index, false)
-
-  var len = entries.length
-  var isSym = this.symlinks[abs]
-
-  // If it's a symlink, and we're in a globstar, then stop
-  if (isSym && inGlobStar)
-    return
-
-  for (var i = 0; i < len; i++) {
-    var e = entries[i]
-    if (e.charAt(0) === '.' && !this.dot)
-      continue
-
-    // these two cases enter the inGlobStar state
-    var instead = gspref.concat(entries[i], remainWithoutGlobStar)
-    this._process(instead, index, true)
-
-    var below = gspref.concat(entries[i], remain)
-    this._process(below, index, true)
-  }
-}
-
-GlobSync.prototype._processSimple = function (prefix, index) {
-  // XXX review this.  Shouldn't it be doing the mounting etc
-  // before doing stat?  kinda weird?
-  var exists = this._stat(prefix)
-
-  if (!this.matches[index])
-    this.matches[index] = Object.create(null)
-
-  // If it doesn't exist, then just mark the lack of results
-  if (!exists)
-    return
-
-  if (prefix && isAbsolute(prefix) && !this.nomount) {
-    var trail = /[\/\\]$/.test(prefix)
-    if (prefix.charAt(0) === '/') {
-      prefix = path.join(this.root, prefix)
-    } else {
-      prefix = path.resolve(this.root, prefix)
-      if (trail)
-        prefix += '/'
-    }
-  }
-
-  if (process.platform === 'win32')
-    prefix = prefix.replace(/\\/g, '/')
-
-  // Mark this as a match
-  this.matches[index][prefix] = true
-}
-
-// Returns either 'DIR', 'FILE', or false
-GlobSync.prototype._stat = function (f) {
-  var abs = this._makeAbs(f)
-  var needDir = f.slice(-1) === '/'
-
-  if (f.length > this.maxLength)
-    return false
-
-  if (!this.stat && ownProp(this.cache, abs)) {
-    var c = this.cache[abs]
-
-    if (Array.isArray(c))
-      c = 'DIR'
-
-    // It exists, but maybe not how we need it
-    if (!needDir || c === 'DIR')
-      return c
-
-    if (needDir && c === 'FILE')
-      return false
-
-    // otherwise we have to stat, because maybe c=true
-    // if we know it exists, but not what it is.
-  }
-
-  var exists
-  var stat = this.statCache[abs]
-  if (!stat) {
-    var lstat
-    try {
-      lstat = fs.lstatSync(abs)
-    } catch (er) {
-      return false
-    }
-
-    if (lstat.isSymbolicLink()) {
-      try {
-        stat = fs.statSync(abs)
-      } catch (er) {
-        stat = lstat
-      }
-    } else {
-      stat = lstat
-    }
-  }
-
-  this.statCache[abs] = stat
-
-  var c = stat.isDirectory() ? 'DIR' : 'FILE'
-  this.cache[abs] = this.cache[abs] || c
-
-  if (needDir && c !== 'DIR')
-    return false
-
-  return c
-}
-
-GlobSync.prototype._mark = function (p) {
-  return common.mark(this, p)
-}
-
-GlobSync.prototype._makeAbs = function (f) {
-  return common.makeAbs(this, f)
-}
diff --git a/bin/node_modules/cordova-common/node_modules/osenv/.npmignore b/bin/node_modules/cordova-common/node_modules/osenv/.npmignore
deleted file mode 100644
index 8c23dee..0000000
--- a/bin/node_modules/cordova-common/node_modules/osenv/.npmignore
+++ /dev/null
@@ -1,13 +0,0 @@
-*.swp
-.*.swp
-
-.DS_Store
-*~
-.project
-.settings
-npm-debug.log
-coverage.html
-.idea
-lib-cov
-
-node_modules
diff --git a/bin/node_modules/cordova-common/node_modules/osenv/.travis.yml b/bin/node_modules/cordova-common/node_modules/osenv/.travis.yml
deleted file mode 100644
index 99f2bbf..0000000
--- a/bin/node_modules/cordova-common/node_modules/osenv/.travis.yml
+++ /dev/null
@@ -1,9 +0,0 @@
-language: node_js
-language: node_js
-node_js:
-  - '0.8'
-  - '0.10'
-  - '0.12'
-  - 'iojs'
-before_install:
-  - npm install -g npm@latest
diff --git a/bin/node_modules/cordova-common/node_modules/osenv/LICENSE b/bin/node_modules/cordova-common/node_modules/osenv/LICENSE
deleted file mode 100644
index 19129e3..0000000
--- a/bin/node_modules/cordova-common/node_modules/osenv/LICENSE
+++ /dev/null
@@ -1,15 +0,0 @@
-The ISC License
-
-Copyright (c) Isaac Z. Schlueter and Contributors
-
-Permission to use, copy, modify, and/or distribute this software for any
-purpose with or without fee is hereby granted, provided that the above
-copyright notice and this permission notice appear in all copies.
-
-THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
-WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
-ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
-ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
-IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/bin/node_modules/cordova-common/node_modules/osenv/README.md b/bin/node_modules/cordova-common/node_modules/osenv/README.md
deleted file mode 100644
index 08fd900..0000000
--- a/bin/node_modules/cordova-common/node_modules/osenv/README.md
+++ /dev/null
@@ -1,63 +0,0 @@
-# osenv
-
-Look up environment settings specific to different operating systems.
-
-## Usage
-
-```javascript
-var osenv = require('osenv')
-var path = osenv.path()
-var user = osenv.user()
-// etc.
-
-// Some things are not reliably in the env, and have a fallback command:
-var h = osenv.hostname(function (er, hostname) {
-  h = hostname
-})
-// This will still cause it to be memoized, so calling osenv.hostname()
-// is now an immediate operation.
-
-// You can always send a cb, which will get called in the nextTick
-// if it's been memoized, or wait for the fallback data if it wasn't
-// found in the environment.
-osenv.hostname(function (er, hostname) {
-  if (er) console.error('error looking up hostname')
-  else console.log('this machine calls itself %s', hostname)
-})
-```
-
-## osenv.hostname()
-
-The machine name.  Calls `hostname` if not found.
-
-## osenv.user()
-
-The currently logged-in user.  Calls `whoami` if not found.
-
-## osenv.prompt()
-
-Either PS1 on unix, or PROMPT on Windows.
-
-## osenv.tmpdir()
-
-The place where temporary files should be created.
-
-## osenv.home()
-
-No place like it.
-
-## osenv.path()
-
-An array of the places that the operating system will search for
-executables.
-
-## osenv.editor() 
-
-Return the executable name of the editor program.  This uses the EDITOR
-and VISUAL environment variables, and falls back to `vi` on Unix, or
-`notepad.exe` on Windows.
-
-## osenv.shell()
-
-The SHELL on Unix, which Windows calls the ComSpec.  Defaults to 'bash'
-or 'cmd'.
diff --git a/bin/node_modules/cordova-common/node_modules/osenv/node_modules/os-homedir/index.js b/bin/node_modules/cordova-common/node_modules/osenv/node_modules/os-homedir/index.js
deleted file mode 100644
index 3306616..0000000
--- a/bin/node_modules/cordova-common/node_modules/osenv/node_modules/os-homedir/index.js
+++ /dev/null
@@ -1,24 +0,0 @@
-'use strict';
-var os = require('os');
-
-function homedir() {
-	var env = process.env;
-	var home = env.HOME;
-	var user = env.LOGNAME || env.USER || env.LNAME || env.USERNAME;
-
-	if (process.platform === 'win32') {
-		return env.USERPROFILE || env.HOMEDRIVE + env.HOMEPATH || home || null;
-	}
-
-	if (process.platform === 'darwin') {
-		return home || (user ? '/Users/' + user : null);
-	}
-
-	if (process.platform === 'linux') {
-		return home || (process.getuid() === 0 ? '/root' : (user ? '/home/' + user : null));
-	}
-
-	return home || null;
-}
-
-module.exports = typeof os.homedir === 'function' ? os.homedir : homedir;
diff --git a/bin/node_modules/cordova-common/node_modules/osenv/node_modules/os-homedir/license b/bin/node_modules/cordova-common/node_modules/osenv/node_modules/os-homedir/license
deleted file mode 100644
index 654d0bf..0000000
--- a/bin/node_modules/cordova-common/node_modules/osenv/node_modules/os-homedir/license
+++ /dev/null
@@ -1,21 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
-
-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/bin/node_modules/cordova-common/node_modules/osenv/node_modules/os-homedir/package.json b/bin/node_modules/cordova-common/node_modules/osenv/node_modules/os-homedir/package.json
deleted file mode 100644
index 3428648..0000000
--- a/bin/node_modules/cordova-common/node_modules/osenv/node_modules/os-homedir/package.json
+++ /dev/null
@@ -1,70 +0,0 @@
-{
-  "name": "os-homedir",
-  "version": "1.0.1",
-  "description": "io.js 2.3.0 os.homedir() ponyfill",
-  "license": "MIT",
-  "repository": {
-    "type": "git",
-    "url": "https://github.com/sindresorhus/os-homedir"
-  },
-  "author": {
-    "name": "Sindre Sorhus",
-    "email": "sindresorhus@gmail.com",
-    "url": "sindresorhus.com"
-  },
-  "engines": {
-    "node": ">=0.10.0"
-  },
-  "scripts": {
-    "test": "node test.js"
-  },
-  "files": [
-    "index.js"
-  ],
-  "keywords": [
-    "built-in",
-    "core",
-    "ponyfill",
-    "polyfill",
-    "shim",
-    "os",
-    "homedir",
-    "home",
-    "dir",
-    "directory",
-    "folder",
-    "user",
-    "path"
-  ],
-  "devDependencies": {
-    "ava": "0.0.4",
-    "path-exists": "^1.0.0"
-  },
-  "gitHead": "13ff83fbd13ebe286a6092286b2c634ab4534c5f",
-  "bugs": {
-    "url": "https://github.com/sindresorhus/os-homedir/issues"
-  },
-  "homepage": "https://github.com/sindresorhus/os-homedir",
-  "_id": "os-homedir@1.0.1",
-  "_shasum": "0d62bdf44b916fd3bbdcf2cab191948fb094f007",
-  "_from": "os-homedir@^1.0.0",
-  "_npmVersion": "2.11.2",
-  "_nodeVersion": "0.12.5",
-  "_npmUser": {
-    "name": "sindresorhus",
-    "email": "sindresorhus@gmail.com"
-  },
-  "dist": {
-    "shasum": "0d62bdf44b916fd3bbdcf2cab191948fb094f007",
-    "tarball": "http://registry.npmjs.org/os-homedir/-/os-homedir-1.0.1.tgz"
-  },
-  "maintainers": [
-    {
-      "name": "sindresorhus",
-      "email": "sindresorhus@gmail.com"
-    }
-  ],
-  "directories": {},
-  "_resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.1.tgz",
-  "readme": "ERROR: No README data found!"
-}
diff --git a/bin/node_modules/cordova-common/node_modules/osenv/node_modules/os-homedir/readme.md b/bin/node_modules/cordova-common/node_modules/osenv/node_modules/os-homedir/readme.md
deleted file mode 100644
index 4851f10..0000000
--- a/bin/node_modules/cordova-common/node_modules/osenv/node_modules/os-homedir/readme.md
+++ /dev/null
@@ -1,33 +0,0 @@
-# os-homedir [![Build Status](https://travis-ci.org/sindresorhus/os-homedir.svg?branch=master)](https://travis-ci.org/sindresorhus/os-homedir)
-
-> io.js 2.3.0 [`os.homedir()`](https://iojs.org/api/os.html#os_os_homedir) ponyfill
-
-> Ponyfill: A polyfill that doesn't overwrite the native method
-
-
-## Install
-
-```
-$ npm install --save os-homedir
-```
-
-
-## Usage
-
-```js
-var osHomedir = require('os-homedir');
-
-console.log(osHomedir());
-//=> /Users/sindresorhus
-```
-
-
-## Related
-
-- [user-home](https://github.com/sindresorhus/user-home) - Same as this module but caches the result
-- [home-or-tmp](https://github.com/sindresorhus/home-or-tmp) - Get the user home directory with fallback to the system temp directory
-
-
-## License
-
-MIT © [Sindre Sorhus](http://sindresorhus.com)
diff --git a/bin/node_modules/cordova-common/node_modules/osenv/node_modules/os-tmpdir/index.js b/bin/node_modules/cordova-common/node_modules/osenv/node_modules/os-tmpdir/index.js
deleted file mode 100644
index 52d90bf..0000000
--- a/bin/node_modules/cordova-common/node_modules/osenv/node_modules/os-tmpdir/index.js
+++ /dev/null
@@ -1,25 +0,0 @@
-'use strict';
-var isWindows = process.platform === 'win32';
-var trailingSlashRe = isWindows ? /[^:]\\$/ : /.\/$/;
-
-// https://github.com/nodejs/io.js/blob/3e7a14381497a3b73dda68d05b5130563cdab420/lib/os.js#L25-L43
-module.exports = function () {
-	var path;
-
-	if (isWindows) {
-		path = process.env.TEMP ||
-			process.env.TMP ||
-			(process.env.SystemRoot || process.env.windir) + '\\temp';
-	} else {
-		path = process.env.TMPDIR ||
-			process.env.TMP ||
-			process.env.TEMP ||
-			'/tmp';
-	}
-
-	if (trailingSlashRe.test(path)) {
-		path = path.slice(0, -1);
-	}
-
-	return path;
-};
diff --git a/bin/node_modules/cordova-common/node_modules/osenv/node_modules/os-tmpdir/license b/bin/node_modules/cordova-common/node_modules/osenv/node_modules/os-tmpdir/license
deleted file mode 100644
index 654d0bf..0000000
--- a/bin/node_modules/cordova-common/node_modules/osenv/node_modules/os-tmpdir/license
+++ /dev/null
@@ -1,21 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
-
-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/bin/node_modules/cordova-common/node_modules/osenv/node_modules/os-tmpdir/package.json b/bin/node_modules/cordova-common/node_modules/osenv/node_modules/os-tmpdir/package.json
deleted file mode 100644
index 6a24e0b..0000000
--- a/bin/node_modules/cordova-common/node_modules/osenv/node_modules/os-tmpdir/package.json
+++ /dev/null
@@ -1,70 +0,0 @@
-{
-  "name": "os-tmpdir",
-  "version": "1.0.1",
-  "description": "Node.js os.tmpdir() ponyfill",
-  "license": "MIT",
-  "repository": {
-    "type": "git",
-    "url": "https://github.com/sindresorhus/os-tmpdir"
-  },
-  "author": {
-    "name": "Sindre Sorhus",
-    "email": "sindresorhus@gmail.com",
-    "url": "sindresorhus.com"
-  },
-  "engines": {
-    "node": ">=0.10.0"
-  },
-  "scripts": {
-    "test": "node test.js"
-  },
-  "files": [
-    "index.js"
-  ],
-  "keywords": [
-    "built-in",
-    "core",
-    "ponyfill",
-    "polyfill",
-    "shim",
-    "os",
-    "tmpdir",
-    "tempdir",
-    "tmp",
-    "temp",
-    "dir",
-    "directory",
-    "env",
-    "environment"
-  ],
-  "devDependencies": {
-    "ava": "0.0.4"
-  },
-  "gitHead": "5c5d355f81378980db629d60128ad03e02b1c1e5",
-  "bugs": {
-    "url": "https://github.com/sindresorhus/os-tmpdir/issues"
-  },
-  "homepage": "https://github.com/sindresorhus/os-tmpdir",
-  "_id": "os-tmpdir@1.0.1",
-  "_shasum": "e9b423a1edaf479882562e92ed71d7743a071b6e",
-  "_from": "os-tmpdir@^1.0.0",
-  "_npmVersion": "2.9.1",
-  "_nodeVersion": "0.12.3",
-  "_npmUser": {
-    "name": "sindresorhus",
-    "email": "sindresorhus@gmail.com"
-  },
-  "dist": {
-    "shasum": "e9b423a1edaf479882562e92ed71d7743a071b6e",
-    "tarball": "http://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.1.tgz"
-  },
-  "maintainers": [
-    {
-      "name": "sindresorhus",
-      "email": "sindresorhus@gmail.com"
-    }
-  ],
-  "directories": {},
-  "_resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.1.tgz",
-  "readme": "ERROR: No README data found!"
-}
diff --git a/bin/node_modules/cordova-common/node_modules/osenv/node_modules/os-tmpdir/readme.md b/bin/node_modules/cordova-common/node_modules/osenv/node_modules/os-tmpdir/readme.md
deleted file mode 100644
index 54d4c6e..0000000
--- a/bin/node_modules/cordova-common/node_modules/osenv/node_modules/os-tmpdir/readme.md
+++ /dev/null
@@ -1,36 +0,0 @@
-# os-tmpdir [![Build Status](https://travis-ci.org/sindresorhus/os-tmpdir.svg?branch=master)](https://travis-ci.org/sindresorhus/os-tmpdir)
-
-> Node.js [`os.tmpdir()`](https://nodejs.org/api/os.html#os_os_tmpdir) ponyfill
-
-> Ponyfill: A polyfill that doesn't overwrite the native method
-
-Use this instead of `require('os').tmpdir()` to get a consistent behaviour on different Node.js versions (even 0.8).
-
-*This is actually taken from io.js 2.0.2 as it contains some fixes that haven't bubbled up to Node.js yet.*
-
-
-## Install
-
-```
-$ npm install --save os-tmpdir
-```
-
-
-## Usage
-
-```js
-var osTmpdir = require('os-tmpdir');
-
-osTmpdir();
-//=> /var/folders/m3/5574nnhn0yj488ccryqr7tc80000gn/T
-```
-
-
-## API
-
-See the [`os.tmpdir()` docs](https://nodejs.org/api/os.html#os_os_tmpdir).
-
-
-## License
-
-MIT © [Sindre Sorhus](http://sindresorhus.com)
diff --git a/bin/node_modules/cordova-common/node_modules/osenv/osenv.js b/bin/node_modules/cordova-common/node_modules/osenv/osenv.js
deleted file mode 100644
index 702a95b..0000000
--- a/bin/node_modules/cordova-common/node_modules/osenv/osenv.js
+++ /dev/null
@@ -1,72 +0,0 @@
-var isWindows = process.platform === 'win32'
-var path = require('path')
-var exec = require('child_process').exec
-var osTmpdir = require('os-tmpdir')
-var osHomedir = require('os-homedir')
-
-// looking up envs is a bit costly.
-// Also, sometimes we want to have a fallback
-// Pass in a callback to wait for the fallback on failures
-// After the first lookup, always returns the same thing.
-function memo (key, lookup, fallback) {
-  var fell = false
-  var falling = false
-  exports[key] = function (cb) {
-    var val = lookup()
-    if (!val && !fell && !falling && fallback) {
-      fell = true
-      falling = true
-      exec(fallback, function (er, output, stderr) {
-        falling = false
-        if (er) return // oh well, we tried
-        val = output.trim()
-      })
-    }
-    exports[key] = function (cb) {
-      if (cb) process.nextTick(cb.bind(null, null, val))
-      return val
-    }
-    if (cb && !falling) process.nextTick(cb.bind(null, null, val))
-    return val
-  }
-}
-
-memo('user', function () {
-  return ( isWindows
-         ? process.env.USERDOMAIN + '\\' + process.env.USERNAME
-         : process.env.USER
-         )
-}, 'whoami')
-
-memo('prompt', function () {
-  return isWindows ? process.env.PROMPT : process.env.PS1
-})
-
-memo('hostname', function () {
-  return isWindows ? process.env.COMPUTERNAME : process.env.HOSTNAME
-}, 'hostname')
-
-memo('tmpdir', function () {
-  return osTmpdir()
-})
-
-memo('home', function () {
-  return osHomedir()
-})
-
-memo('path', function () {
-  return (process.env.PATH ||
-          process.env.Path ||
-          process.env.path).split(isWindows ? ';' : ':')
-})
-
-memo('editor', function () {
-  return process.env.EDITOR ||
-         process.env.VISUAL ||
-         (isWindows ? 'notepad.exe' : 'vi')
-})
-
-memo('shell', function () {
-  return isWindows ? process.env.ComSpec || 'cmd'
-         : process.env.SHELL || 'bash'
-})
diff --git a/bin/node_modules/cordova-common/node_modules/osenv/package.json b/bin/node_modules/cordova-common/node_modules/osenv/package.json
deleted file mode 100644
index 4fb1e6c..0000000
--- a/bin/node_modules/cordova-common/node_modules/osenv/package.json
+++ /dev/null
@@ -1,76 +0,0 @@
-{
-  "name": "osenv",
-  "version": "0.1.3",
-  "main": "osenv.js",
-  "directories": {
-    "test": "test"
-  },
-  "dependencies": {
-    "os-homedir": "^1.0.0",
-    "os-tmpdir": "^1.0.0"
-  },
-  "devDependencies": {
-    "tap": "^1.2.0"
-  },
-  "scripts": {
-    "test": "tap test/*.js"
-  },
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/npm/osenv.git"
-  },
-  "keywords": [
-    "environment",
-    "variable",
-    "home",
-    "tmpdir",
-    "path",
-    "prompt",
-    "ps1"
-  ],
-  "author": {
-    "name": "Isaac Z. Schlueter",
-    "email": "i@izs.me",
-    "url": "http://blog.izs.me/"
-  },
-  "license": "ISC",
-  "description": "Look up environment settings specific to different operating systems",
-  "gitHead": "f746b3405d8f9e28054d11b97e1436f6a15016c4",
-  "bugs": {
-    "url": "https://github.com/npm/osenv/issues"
-  },
-  "homepage": "https://github.com/npm/osenv#readme",
-  "_id": "osenv@0.1.3",
-  "_shasum": "83cf05c6d6458fc4d5ac6362ea325d92f2754217",
-  "_from": "osenv@^0.1.3",
-  "_npmVersion": "3.0.0",
-  "_nodeVersion": "2.2.1",
-  "_npmUser": {
-    "name": "isaacs",
-    "email": "isaacs@npmjs.com"
-  },
-  "dist": {
-    "shasum": "83cf05c6d6458fc4d5ac6362ea325d92f2754217",
-    "tarball": "http://registry.npmjs.org/osenv/-/osenv-0.1.3.tgz"
-  },
-  "maintainers": [
-    {
-      "name": "isaacs",
-      "email": "i@izs.me"
-    },
-    {
-      "name": "robertkowalski",
-      "email": "rok@kowalski.gd"
-    },
-    {
-      "name": "othiym23",
-      "email": "ogd@aoaioxxysz.net"
-    },
-    {
-      "name": "iarna",
-      "email": "me@re-becca.org"
-    }
-  ],
-  "_resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.3.tgz",
-  "readme": "ERROR: No README data found!"
-}
diff --git a/bin/node_modules/cordova-common/node_modules/osenv/test/unix.js b/bin/node_modules/cordova-common/node_modules/osenv/test/unix.js
deleted file mode 100644
index f87cbfb..0000000
--- a/bin/node_modules/cordova-common/node_modules/osenv/test/unix.js
+++ /dev/null
@@ -1,71 +0,0 @@
-// only run this test on windows
-// pretending to be another platform is too hacky, since it breaks
-// how the underlying system looks up module paths and runs
-// child processes, and all that stuff is cached.
-if (process.platform === 'win32') {
-  console.log('TAP Version 13\n' +
-              '1..0\n' +
-              '# Skip unix tests, this is not unix\n')
-  return
-}
-var tap = require('tap')
-
-// like unix, but funny
-process.env.USER = 'sirUser'
-process.env.HOME = '/home/sirUser'
-process.env.HOSTNAME = 'my-machine'
-process.env.TMPDIR = '/tmpdir'
-process.env.TMP = '/tmp'
-process.env.TEMP = '/temp'
-process.env.PATH = '/opt/local/bin:/usr/local/bin:/usr/bin/:bin'
-process.env.PS1 = '(o_o) $ '
-process.env.EDITOR = 'edit'
-process.env.VISUAL = 'visualedit'
-process.env.SHELL = 'zsh'
-
-tap.test('basic unix sanity test', function (t) {
-  var osenv = require('../osenv.js')
-
-  t.equal(osenv.user(), process.env.USER)
-  t.equal(osenv.home(), process.env.HOME)
-  t.equal(osenv.hostname(), process.env.HOSTNAME)
-  t.same(osenv.path(), process.env.PATH.split(':'))
-  t.equal(osenv.prompt(), process.env.PS1)
-  t.equal(osenv.tmpdir(), process.env.TMPDIR)
-
-  // mildly evil, but it's for a test.
-  process.env.TMPDIR = ''
-  delete require.cache[require.resolve('../osenv.js')]
-  var osenv = require('../osenv.js')
-  t.equal(osenv.tmpdir(), process.env.TMP)
-
-  process.env.TMP = ''
-  delete require.cache[require.resolve('../osenv.js')]
-  var osenv = require('../osenv.js')
-  t.equal(osenv.tmpdir(), process.env.TEMP)
-
-  process.env.TEMP = ''
-  delete require.cache[require.resolve('../osenv.js')]
-  var osenv = require('../osenv.js')
-  osenv.home = function () { return null }
-  t.equal(osenv.tmpdir(), '/tmp')
-
-  t.equal(osenv.editor(), 'edit')
-  process.env.EDITOR = ''
-  delete require.cache[require.resolve('../osenv.js')]
-  var osenv = require('../osenv.js')
-  t.equal(osenv.editor(), 'visualedit')
-
-  process.env.VISUAL = ''
-  delete require.cache[require.resolve('../osenv.js')]
-  var osenv = require('../osenv.js')
-  t.equal(osenv.editor(), 'vi')
-
-  t.equal(osenv.shell(), 'zsh')
-  process.env.SHELL = ''
-  delete require.cache[require.resolve('../osenv.js')]
-  var osenv = require('../osenv.js')
-  t.equal(osenv.shell(), 'bash')
-
-  t.end()
-})
diff --git a/bin/node_modules/cordova-common/node_modules/osenv/test/windows.js b/bin/node_modules/cordova-common/node_modules/osenv/test/windows.js
deleted file mode 100644
index c9d837a..0000000
--- a/bin/node_modules/cordova-common/node_modules/osenv/test/windows.js
+++ /dev/null
@@ -1,74 +0,0 @@
-// only run this test on windows
-// pretending to be another platform is too hacky, since it breaks
-// how the underlying system looks up module paths and runs
-// child processes, and all that stuff is cached.
-if (process.platform !== 'win32') {
-  console.log('TAP version 13\n' +
-              '1..0 # Skip windows tests, this is not windows\n')
-  return
-}
-
-// load this before clubbing the platform name.
-var tap = require('tap')
-
-process.env.windir = 'c:\\windows'
-process.env.USERDOMAIN = 'some-domain'
-process.env.USERNAME = 'sirUser'
-process.env.USERPROFILE = 'C:\\Users\\sirUser'
-process.env.COMPUTERNAME = 'my-machine'
-process.env.TMPDIR = 'C:\\tmpdir'
-process.env.TMP = 'C:\\tmp'
-process.env.TEMP = 'C:\\temp'
-process.env.Path = 'C:\\Program Files\\;C:\\Binary Stuff\\bin'
-process.env.PROMPT = '(o_o) $ '
-process.env.EDITOR = 'edit'
-process.env.VISUAL = 'visualedit'
-process.env.ComSpec = 'some-com'
-
-tap.test('basic windows sanity test', function (t) {
-  var osenv = require('../osenv.js')
-
-  t.equal(osenv.user(),
-          process.env.USERDOMAIN + '\\' + process.env.USERNAME)
-  t.equal(osenv.home(), process.env.USERPROFILE)
-  t.equal(osenv.hostname(), process.env.COMPUTERNAME)
-  t.same(osenv.path(), process.env.Path.split(';'))
-  t.equal(osenv.prompt(), process.env.PROMPT)
-  t.equal(osenv.tmpdir(), process.env.TMPDIR)
-
-  // mildly evil, but it's for a test.
-  process.env.TMPDIR = ''
-  delete require.cache[require.resolve('../osenv.js')]
-  var osenv = require('../osenv.js')
-  t.equal(osenv.tmpdir(), process.env.TMP)
-
-  process.env.TMP = ''
-  delete require.cache[require.resolve('../osenv.js')]
-  var osenv = require('../osenv.js')
-  t.equal(osenv.tmpdir(), process.env.TEMP)
-
-  process.env.TEMP = ''
-  delete require.cache[require.resolve('../osenv.js')]
-  var osenv = require('../osenv.js')
-  osenv.home = function () { return null }
-  t.equal(osenv.tmpdir(), 'c:\\windows\\temp')
-
-  t.equal(osenv.editor(), 'edit')
-  process.env.EDITOR = ''
-  delete require.cache[require.resolve('../osenv.js')]
-  var osenv = require('../osenv.js')
-  t.equal(osenv.editor(), 'visualedit')
-
-  process.env.VISUAL = ''
-  delete require.cache[require.resolve('../osenv.js')]
-  var osenv = require('../osenv.js')
-  t.equal(osenv.editor(), 'notepad.exe')
-
-  t.equal(osenv.shell(), 'some-com')
-  process.env.ComSpec = ''
-  delete require.cache[require.resolve('../osenv.js')]
-  var osenv = require('../osenv.js')
-  t.equal(osenv.shell(), 'cmd')
-
-  t.end()
-})
diff --git a/bin/node_modules/cordova-common/node_modules/osenv/x.tap b/bin/node_modules/cordova-common/node_modules/osenv/x.tap
deleted file mode 100644
index 90d8472..0000000
--- a/bin/node_modules/cordova-common/node_modules/osenv/x.tap
+++ /dev/null
@@ -1,39 +0,0 @@
-TAP version 13
-    # Subtest: test/unix.js
-    TAP version 13
-        # Subtest: basic unix sanity test
-        ok 1 - should be equal
-        ok 2 - should be equal
-        ok 3 - should be equal
-        ok 4 - should be equivalent
-        ok 5 - should be equal
-        ok 6 - should be equal
-        ok 7 - should be equal
-        ok 8 - should be equal
-        ok 9 - should be equal
-        ok 10 - should be equal
-        ok 11 - should be equal
-        ok 12 - should be equal
-        ok 13 - should be equal
-        ok 14 - should be equal
-        1..14
-    ok 1 - basic unix sanity test # time=10.712ms
-
-    1..1
-    # time=18.422ms
-ok 1 - test/unix.js # time=169.827ms
-
-    # Subtest: test/windows.js
-    TAP version 13
-    1..0 # Skip windows tests, this is not windows
-
-ok 2 - test/windows.js # SKIP Skip windows tests, this is not windows
-
-    # Subtest: test/nada.js
-    TAP version 13
-    1..0
-
-ok 2 - test/nada.js
-
-1..3
-# time=274.247ms
diff --git a/bin/node_modules/cordova-common/node_modules/q/CHANGES.md b/bin/node_modules/cordova-common/node_modules/q/CHANGES.md
deleted file mode 100644
index cd351fd..0000000
--- a/bin/node_modules/cordova-common/node_modules/q/CHANGES.md
+++ /dev/null
@@ -1,786 +0,0 @@
-
-## 1.4.1
-
- - Address an issue that prevented Q from being used as a `<script>` for
-   Firefox add-ons. Q can now be used in any environment that provides `window`
-   or `self` globals, favoring `window` since add-ons have an an immutable
-   `self` that is distinct from `window`.
-
-## 1.4.0
-
- - Add `noConflict` support for use in `<script>` (@jahnjw).
-
-## 1.3.0
-
- - Add tracking for unhandled and handled rejections in Node.js (@benjamingr).
-
-## 1.2.1
-
- - Fix Node.js environment detection for modern Browserify (@kahnjw).
-
-## 1.2.0
-
- - Added Q.any(promisesArray) method (@vergara).
-   Returns a promise fulfilled with the value of the first resolved promise in
-   promisesArray. If all promises in promisesArray are rejected, it returns
-   a rejected promise.
-
-## 1.1.2
-
- - Removed extraneous files from the npm package by using the "files"
-   whitelist in package.json instead of the .npmignore blacklist.
-   (@anton-rudeshko)
-
-## 1.1.1
-
- - Fix a pair of regressions in bootstrapping, one which precluded
-   WebWorker support, and another that precluded support in
-   ``<script>`` usage outright. #607
-
-## 1.1.0
-
- - Adds support for enabling long stack traces in node.js by setting
-   environment variable `Q_DEBUG=1`.
- - Introduces the `tap` method to promises, which will see a value
-   pass through without alteration.
- - Use instanceof to recognize own promise instances as opposed to
-   thenables.
- - Construct timeout errors with `code === ETIMEDOUT` (Kornel Lesiński)
- - More descriminant CommonJS module environment detection.
- - Dropped continuous integration for Node.js 0.6 and 0.8 because of
-   changes to npm that preclude the use of new `^` version predicate
-   operator in any transitive dependency.
- - Users can now override `Q.nextTick`.
-
-## 1.0.1
-
- - Adds support for `Q.Promise`, which implements common usage of the
-   ES6 `Promise` constructor and its methods. `Promise` does not have
-   a valid promise constructor and a proper implementation awaits
-   version 2 of Q.
- - Removes the console stopgap for a promise inspector. This no longer
-   works with any degree of reliability.
- - Fixes support for content security policies that forbid eval. Now
-   using the `StopIteration` global to distinguish SpiderMonkey
-   generators from ES6 generators, assuming that they will never
-   coexist.
-
-## 1.0.0
-
-:cake: This is all but a re-release of version 0.9, which has settled
-into a gentle maintenance mode and rightly deserves an official 1.0.
-An ambitious 2.0 release is already around the corner, but 0.9/1.0
-have been distributed far and wide and demand long term support.
-
- - Q will now attempt to post a debug message in browsers regardless
-   of whether window.Touch is defined. Chrome at least now has this
-   property regardless of whether touch is supported by the underlying
-   hardware.
- - Remove deprecation warning from `promise.valueOf`. The function is
-   called by the browser in various ways so there is no way to
-   distinguish usage that should be migrated from usage that cannot be
-   altered.
-
-## 0.9.7
-
- - :warning: `q.min.js` is no longer checked-in.  It is however still
-   created by Grunt and NPM.
- - Fixes a bug that inhibited `Q.async` with implementations of the new
-   ES6 generators.
- - Fixes a bug with `nextTick` affecting Safari 6.0.5 the first time a
-   page loads when an `iframe` is involved.
- - Introduces `passByCopy`, `join`, and `race`.
- - Shows stack traces or error messages on the console, instead of
-   `Error` objects.
- - Elimintates wrapper methods for improved performance.
- - `Q.all` now propagates progress notifications of the form you might
-   expect of ES6 iterations, `{value, index}` where the `value` is the
-   progress notification from the promise at `index`.
-
-## 0.9.6
-
- - Fixes a bug in recognizing the difference between compatible Q
-   promises, and Q promises from before the implementation of "inspect".
-   The latter are now coerced.
- - Fixes an infinite asynchronous coercion cycle introduced by former
-   solution, in two independently sufficient ways.  1.) All promises
-   returned by makePromise now implement "inspect", albeit a default
-   that reports that the promise has an "unknown" state.  2.) The
-   implementation of "then/when" is now in "then" instead of "when", so
-   that the responsibility to "coerce" the given promise rests solely in
-   the "when" method and the "then" method may assume that "this" is a
-   promise of the right type.
- - Refactors `nextTick` to use an unrolled microtask within Q regardless
-   of how new ticks a requested. #316 @rkatic
-
-## 0.9.5
-
- - Introduces `inspect` for getting the state of a promise as
-   `{state: "fulfilled" | "rejected" | "pending", value | reason}`.
- - Introduces `allSettled` which produces an array of promises states
-   for the input promises once they have all "settled".  This is in
-   accordance with a discussion on Promises/A+ that "settled" refers to
-   a promise that is "fulfilled" or "rejected".  "resolved" refers to a
-   deferred promise that has been "resolved" to another promise,
-   "sealing its fate" to the fate of the successor promise.
- - Long stack traces are now off by default.  Set `Q.longStackSupport`
-   to true to enable long stack traces.
- - Long stack traces can now follow the entire asynchronous history of a
-   promise, not just a single jump.
- - Introduces `spawn` for an immediately invoked asychronous generator.
-   @jlongster
- - Support for *experimental* synonyms `mapply`, `mcall`, `nmapply`,
-   `nmcall` for method invocation.
-
-## 0.9.4
-
- - `isPromise` and `isPromiseAlike` now always returns a boolean
-   (even for falsy values). #284 @lfac-pt
- - Support for ES6 Generators in `async` #288 @andywingo
- - Clear duplicate promise rejections from dispatch methods #238 @SLaks
- - Unhandled rejection API #296 @domenic
-   `stopUnhandledRejectionTracking`, `getUnhandledReasons`,
-   `resetUnhandledRejections`.
-
-## 0.9.3
-
- - Add the ability to give `Q.timeout`'s errors a custom error message. #270
-   @jgrenon
- - Fix Q's call-stack busting behavior in Node.js 0.10, by switching from
-   `process.nextTick` to `setImmediate`. #254 #259
- - Fix Q's behavior when used with the Mocha test runner in the browser, since
-   Mocha introduces a fake `process` global without a `nextTick` property. #267
- - Fix some, but not all, cases wherein Q would give false positives in its
-   unhandled rejection detection (#252). A fix for other cases (#238) is
-   hopefully coming soon.
- - Made `Q.promise` throw early if given a non-function.
-
-## 0.9.2
-
- - Pass through progress notifications when using `timeout`. #229 @omares
- - Pass through progress notifications when using `delay`.
- - Fix `nbind` to actually bind the `thisArg`. #232 @davidpadbury
-
-## 0.9.1
-
- - Made the AMD detection compatible with the RequireJS optimizer's `namespace`
-   option. #225 @terinjokes
- - Fix side effects from `valueOf`, and thus from `isFulfilled`, `isRejected`,
-   and `isPending`. #226 @benjamn
-
-## 0.9.0
-
-This release removes many layers of deprecated methods and brings Q closer to
-alignment with Mark Miller’s TC39 [strawman][] for concurrency. At the same
-time, it fixes many bugs and adds a few features around error handling. Finally,
-it comes with an updated and comprehensive [API Reference][].
-
-[strawman]: http://wiki.ecmascript.org/doku.php?id=strawman:concurrency
-[API Reference]: https://github.com/kriskowal/q/wiki/API-Reference
-
-### API Cleanup
-
-The following deprecated or undocumented methods have been removed.
-Their replacements are listed here:
-
-<table>
-   <thead>
-      <tr>
-         <th>0.8.x method</th>
-         <th>0.9 replacement</th>
-      </tr>
-   </thead>
-   <tbody>
-      <tr>
-         <td><code>Q.ref</code></td>
-         <td><code>Q</code></td>
-      </tr>
-      <tr>
-         <td><code>call</code>, <code>apply</code>, <code>bind</code> (*)</td>
-         <td><code>fcall</code>/<code>invoke</code>, <code>fapply</code>/<code>post</code>, <code>fbind</code></td>
-      </tr>
-      <tr>
-         <td><code>ncall</code>, <code>napply</code> (*)</td>
-         <td><code>nfcall</code>/<code>ninvoke</code>, <code>nfapply</code>/<code>npost</code></td>
-      </tr>
-      <tr>
-         <td><code>end</code></td>
-         <td><code>done</code></td>
-      </tr>
-      <tr>
-         <td><code>put</code></td>
-         <td><code>set</code></td>
-      </tr>
-      <tr>
-         <td><code>node</code></td>
-         <td><code>nbind</code></td>
-      </tr>
-      <tr>
-         <td><code>nend</code></td>
-         <td><code>nodeify</code></td>
-      </tr>
-      <tr>
-         <td><code>isResolved</code></td>
-         <td><code>isPending</code></td>
-      </tr>
-      <tr>
-         <td><code>deferred.node</code></td>
-         <td><code>deferred.makeNodeResolver</code></td>
-      </tr>
-      <tr>
-         <td><code>Method</code>, <code>sender</code></td>
-         <td><code>dispatcher</code></td>
-      </tr>
-      <tr>
-         <td><code>send</code></td>
-         <td><code>dispatch</code></td>
-      </tr>
-      <tr>
-         <td><code>view</code>, <code>viewInfo</code></td>
-         <td>(none)</td>
-      </tr>
-   </tbody>
-</table>
-
-
-(*) Use of ``thisp`` is discouraged. For calling methods, use ``post`` or
-``invoke``.
-
-### Alignment with the Concurrency Strawman
-
--   Q now exports a `Q(value)` function, an alias for `resolve`.
-    `Q.call`, `Q.apply`, and `Q.bind` were removed to make room for the
-    same methods on the function prototype.
--   `invoke` has been aliased to `send` in all its forms.
--   `post` with no method name acts like `fapply`.
-
-### Error Handling
-
--   Long stack traces can be turned off by setting `Q.stackJumpLimit` to zero.
-    In the future, this property will be used to fine tune how many stack jumps
-    are retained in long stack traces; for now, anything nonzero is treated as
-    one (since Q only tracks one stack jump at the moment, see #144). #168
--   In Node.js, if there are unhandled rejections when the process exits, they
-    are output to the console. #115
-
-### Other
-
--   `delete` and `set` (née `put`) no longer have a fulfillment value.
--   Q promises are no longer frozen, which
-    [helps with performance](http://code.google.com/p/v8/issues/detail?id=1858).
--   `thenReject` is now included, as a counterpart to `thenResolve`.
--   The included browser `nextTick` shim is now faster. #195 @rkatic.
-
-### Bug Fixes
-
--   Q now works in Internet Explorer 10. #186 @ForbesLindesay
--   `fbind` no longer hard-binds the returned function's `this` to `undefined`.
-    #202
--   `Q.reject` no longer leaks memory. #148
--   `npost` with no arguments now works. #207
--   `allResolved` now works with non-Q promises ("thenables"). #179
--   `keys` behavior is now correct even in browsers without native
-    `Object.keys`. #192 @rkatic
--   `isRejected` and the `exception` property now work correctly if the
-    rejection reason is falsy. #198
-
-### Internals and Advanced
-
--   The internal interface for a promise now uses
-    `dispatchPromise(resolve, op, operands)` instead of `sendPromise(op,
-    resolve, ...operands)`, which reduces the cases where Q needs to do
-    argument slicing.
--   The internal protocol uses different operands. "put" is now "set".
-    "del" is now "delete". "view" and "viewInfo" have been removed.
--   `Q.fulfill` has been added. It is distinct from `Q.resolve` in that
-    it does not pass promises through, nor coerces promises from other
-    systems. The promise becomes the fulfillment value. This is only
-    recommended for use when trying to fulfill a promise with an object that has
-    a `then` function that is at the same time not a promise.
-
-## 0.8.12
-- Treat foreign promises as unresolved in `Q.isFulfilled`; this lets `Q.all`
-  work on arrays containing foreign promises. #154
-- Fix minor incompliances with the [Promises/A+ spec][] and [test suite][]. #157
-  #158
-
-[Promises/A+ spec]: http://promises-aplus.github.com/promises-spec/
-[test suite]: https://github.com/promises-aplus/promises-tests
-
-## 0.8.11
-
- - Added ``nfcall``, ``nfapply``, and ``nfbind`` as ``thisp``-less versions of
-   ``ncall``, ``napply``, and ``nbind``. The latter are now deprecated. #142
- - Long stack traces no longer cause linearly-growing memory usage when chaining
-   promises together. #111
- - Inspecting ``error.stack`` in a rejection handler will now give a long stack
-   trace. #103
- - Fixed ``Q.timeout`` to clear its timeout handle when the promise is rejected;
-   previously, it kept the event loop alive until the timeout period expired.
-   #145 @dfilatov
- - Added `q/queue` module, which exports an infinite promise queue
-   constructor.
-
-## 0.8.10
-
- - Added ``done`` as a replacement for ``end``, taking the usual fulfillment,
-   rejection, and progress handlers. It's essentially equivalent to
-   ``then(f, r, p).end()``.
- - Added ``Q.onerror``, a settable error trap that you can use to get full stack
-   traces for uncaught errors. #94
- - Added ``thenResolve`` as a shortcut for returning a constant value once a
-   promise is fulfilled. #108 @ForbesLindesay
- - Various tweaks to progress notification, including propagation and
-   transformation of progress values and only forwarding a single progress
-   object.
- - Renamed ``nend`` to ``nodeify``. It no longer returns an always-fulfilled
-   promise when a Node callback is passed.
- - ``deferred.resolve`` and ``deferred.reject`` no longer (sometimes) return
-   ``deferred.promise``.
- - Fixed stack traces getting mangled if they hit ``end`` twice. #116 #121 @ef4
- - Fixed ``ninvoke`` and ``npost`` to work on promises for objects with Node
-   methods. #134
- - Fixed accidental coercion of objects with nontrivial ``valueOf`` methods,
-   like ``Date``s, by the promise's ``valueOf`` method. #135
- - Fixed ``spread`` not calling the passed rejection handler if given a rejected
-   promise.
-
-## 0.8.9
-
- - Added ``nend``
- - Added preliminary progress notification support, via
-   ``promise.then(onFulfilled, onRejected, onProgress)``,
-   ``promise.progress(onProgress)``, and ``deferred.notify(...progressData)``.
- - Made ``put`` and ``del`` return the object acted upon for easier chaining.
-   #84
- - Fixed coercion cycles with cooperating promises. #106
-
-## 0.8.7
-
- - Support [Montage Require](http://github.com/kriskowal/mr)
-
-## 0.8.6
-
- - Fixed ``npost`` and ``ninvoke`` to pass the correct ``thisp``. #74
- - Fixed various cases involving unorthodox rejection reasons. #73 #90
-   @ef4
- - Fixed double-resolving of misbehaved custom promises. #75
- - Sped up ``Q.all`` for arrays contain already-resolved promises or scalar
-   values. @ForbesLindesay
- - Made stack trace filtering work when concatenating assets. #93 @ef4
- - Added warnings for deprecated methods. @ForbesLindesay
- - Added ``.npmignore`` file so that dependent packages get a slimmer
-   ``node_modules`` directory.
-
-## 0.8.5
-
- - Added preliminary support for long traces (@domenic)
- - Added ``fapply``, ``fcall``, ``fbind`` for non-thisp
-   promised function calls.
- - Added ``return`` for async generators, where generators
-   are implemented.
- - Rejected promises now have an "exception" property.  If an object
-   isRejected(object), then object.valueOf().exception will
-   be the wrapped error.
- - Added Jasmine specifications
- - Support Internet Explorers 7–9 (with multiple bug fixes @domenic)
- - Support Firefox 12
- - Support Safari 5.1.5
- - Support Chrome 18
-
-## 0.8.4
-
- - WARNING: ``promise.timeout`` is now rejected with an ``Error`` object
-   and the message now includes the duration of the timeout in
-   miliseconds.  This doesn't constitute (in my opinion) a
-   backward-incompatibility since it is a change of an undocumented and
-   unspecified public behavior, but if you happened to depend on the
-   exception being a string, you will need to revise your code.
- - Added ``deferred.makeNodeResolver()`` to replace the more cryptic
-   ``deferred.node()`` method.
- - Added experimental ``Q.promise(maker(resolve, reject))`` to make a
-   promise inside a callback, such that thrown exceptions in the
-   callback are converted and the resolver and rejecter are arguments.
-   This is a shorthand for making a deferred directly and inspired by
-   @gozala’s stream constructor pattern and the Microsoft Windows Metro
-   Promise constructor interface.
- - Added experimental ``Q.begin()`` that is intended to kick off chains
-   of ``.then`` so that each of these can be reordered without having to
-   edit the new and former first step.
-
-## 0.8.3
-
- - Added ``isFulfilled``, ``isRejected``, and ``isResolved``
-   to the promise prototype.
- - Added ``allResolved`` for waiting for every promise to either be
-   fulfilled or rejected, without propagating an error. @utvara #53
- - Added ``Q.bind`` as a method to transform functions that
-   return and throw into promise-returning functions. See
-   [an example](https://gist.github.com/1782808). @domenic
- - Renamed ``node`` export to ``nbind``, and added ``napply`` to
-   complete the set. ``node`` remains as deprecated. @domenic #58
- - Renamed ``Method`` export to ``sender``.  ``Method``
-   remains as deprecated and will be removed in the next
-   major version since I expect it has very little usage.
- - Added browser console message indicating a live list of
-   unhandled errors.
- - Added support for ``msSetImmediate`` (IE10) or ``setImmediate``
-   (available via [polyfill](https://github.com/NobleJS/setImmediate))
-   as a browser-side ``nextTick`` implementation. #44 #50 #59
- - Stopped using the event-queue dependency, which was in place for
-   Narwhal support: now directly using ``process.nextTick``.
- - WARNING: EXPERIMENTAL: added ``finally`` alias for ``fin``, ``catch``
-   alias for ``fail``, ``try`` alias for ``call``, and ``delete`` alias
-   for ``del``.  These properties are enquoted in the library for
-   cross-browser compatibility, but may be used as property names in
-   modern engines.
-
-## 0.8.2
-
- - Deprecated ``ref`` in favor of ``resolve`` as recommended by
-   @domenic.
- - Update event-queue dependency.
-
-## 0.8.1
-
- - Fixed Opera bug. #35 @cadorn
- - Fixed ``Q.all([])`` #32 @domenic
-
-## 0.8.0
-
- - WARNING: ``enqueue`` removed.  Use ``nextTick`` instead.
-   This is more consistent with NodeJS and (subjectively)
-   more explicit and intuitive.
- - WARNING: ``def`` removed.  Use ``master`` instead.  The
-   term ``def`` was too confusing to new users.
- - WARNING: ``spy`` removed in favor of ``fin``.
- - WARNING: ``wait`` removed. Do ``all(args).get(0)`` instead.
- - WARNING: ``join`` removed. Do ``all(args).spread(callback)`` instead.
- - WARNING: Removed the ``Q`` function module.exports alias
-   for ``Q.ref``. It conflicts with ``Q.apply`` in weird
-   ways, making it uncallable.
- - Revised ``delay`` so that it accepts both ``(value,
-   timeout)`` and ``(timeout)`` variations based on
-   arguments length.
- - Added ``ref().spread(cb(...args))``, a variant of
-   ``then`` that spreads an array across multiple arguments.
-   Useful with ``all()``.
- - Added ``defer().node()`` Node callback generator.  The
-   callback accepts ``(error, value)`` or ``(error,
-   ...values)``.  For multiple value arguments, the
-   fulfillment value is an array, useful in conjunction with
-   ``spread``.
- - Added ``node`` and ``ncall``, both with the signature
-   ``(fun, thisp_opt, ...args)``.  The former is a decorator
-   and the latter calls immediately.  ``node`` optional
-   binds and partially applies.  ``ncall`` can bind and pass
-   arguments.
-
-## 0.7.2
-
- - Fixed thenable promise assimilation.
-
-## 0.7.1
-
- - Stopped shimming ``Array.prototype.reduce``. The
-   enumerable property has bad side-effects.  Libraries that
-   depend on this (for example, QQ) will need to be revised.
-
-## 0.7.0 - BACKWARD INCOMPATIBILITY
-
- - WARNING: Removed ``report`` and ``asap``
- - WARNING: The ``callback`` argument of the ``fin``
-   function no longer receives any arguments. Thus, it can
-   be used to call functions that should not receive
-   arguments on resolution.  Use ``when``, ``then``, or
-   ``fail`` if you need a value.
- - IMPORTANT: Fixed a bug in the use of ``MessageChannel``
-   for ``nextTick``.
- - Renamed ``enqueue`` to ``nextTick``.
- - Added experimental ``view`` and ``viewInfo`` for creating
-   views of promises either when or before they're
-   fulfilled.
- - Shims are now externally applied so subsequent scripts or
-   dependees can use them.
- - Improved minification results.
- - Improved readability.
-
-## 0.6.0 - BACKWARD INCOMPATIBILITY
-
- - WARNING: In practice, the implementation of ``spy`` and
-   the name ``fin`` were useful.  I've removed the old
-   ``fin`` implementation and renamed/aliased ``spy``.
- - The "q" module now exports its ``ref`` function as a "Q"
-   constructor, with module systems that support exports
-   assignment including NodeJS, RequireJS, and when used as
-   a ``<script>`` tag. Notably, strictly compliant CommonJS
-   does not support this, but UncommonJS does.
- - Added ``async`` decorator for generators that use yield
-   to "trampoline" promises. In engines that support
-   generators (SpiderMonkey), this will greatly reduce the
-   need for nested callbacks.
- - Made ``when`` chainable.
- - Made ``all`` chainable.
-
-## 0.5.3
-
- - Added ``all`` and refactored ``join`` and ``wait`` to use
-   it.  All of these will now reject at the earliest
-   rejection.
-
-## 0.5.2
-
- - Minor improvement to ``spy``; now waits for resolution of
-   callback promise.
-
-## 0.5.1
-
- - Made most Q API methods chainable on promise objects, and
-   turned the previous promise-methods of ``join``,
-   ``wait``, and ``report`` into Q API methods.
- - Added ``apply`` and ``call`` to the Q API, and ``apply``
-   as a promise handler.
- - Added ``fail``, ``fin``, and ``spy`` to Q and the promise
-   prototype for convenience when observing rejection,
-   fulfillment and rejection, or just observing without
-   affecting the resolution.
- - Renamed ``def`` (although ``def`` remains shimmed until
-   the next major release) to ``master``.
- - Switched to using ``MessageChannel`` for next tick task
-   enqueue in browsers that support it.
-
-## 0.5.0 - MINOR BACKWARD INCOMPATIBILITY
-
- - Exceptions are no longer reported when consumed.
- - Removed ``error`` from the API.  Since exceptions are
-   getting consumed, throwing them in an errback causes the
-   exception to silently disappear.  Use ``end``.
- - Added ``end`` as both an API method and a promise-chain
-   ending method.  It causes propagated rejections to be
-   thrown, which allows Node to write stack traces and
-   emit ``uncaughtException`` events, and browsers to
-   likewise emit ``onerror`` and log to the console.
- - Added ``join`` and ``wait`` as promise chain functions,
-   so you can wait for variadic promises, returning your own
-   promise back, or join variadic promises, resolving with a
-   callback that receives variadic fulfillment values.
-
-## 0.4.4
-
- - ``end`` no longer returns a promise. It is the end of the
-   promise chain.
- - Stopped reporting thrown exceptions in ``when`` callbacks
-   and errbacks.  These must be explicitly reported through
-   ``.end()``, ``.then(null, Q.error)``, or some other
-   mechanism.
- - Added ``report`` as an API method, which can be used as
-   an errback to report and propagate an error.
- - Added ``report`` as a promise-chain method, so an error
-   can be reported if it passes such a gate.
-
-## 0.4.3
-
- - Fixed ``<script>`` support that regressed with 0.4.2
-   because of "use strict" in the module system
-   multi-plexer.
-
-## 0.4.2
-
- - Added support for RequireJS (jburke)
-
-## 0.4.1
-
- - Added an "end" method to the promise prototype,
-   as a shorthand for waiting for the promise to
-   be resolved gracefully, and failing to do so,
-   to dump an error message.
-
-## 0.4.0 - BACKWARD INCOMPATIBLE*
-
- - *Removed the utility modules. NPM and Node no longer
-   expose any module except the main module.  These have
-   been moved and merged into the "qq" package.
- - *In a non-CommonJS browser, q.js can be used as a script.
-   It now creates a Q global variable.
- - Fixed thenable assimilation.
- - Fixed some issues with asap, when it resolves to
-   undefined, or throws an exception.
-
-## 0.3.0 - BACKWARD-INCOMPATIBLE
-
- - The `post` method has been reverted to its original
-   signature, as provided in Tyler Close's `ref_send` API.
-   That is, `post` accepts two arguments, the second of
-   which is an arbitrary object, but usually invocation
-   arguments as an `Array`.  To provide variadic arguments
-   to `post`, there is a new `invoke` function that posts
-   the variadic arguments to the value given in the first
-   argument.
- - The `defined` method has been moved from `q` to `q/util`
-   since it gets no use in practice but is still
-   theoretically useful.
- - The `Promise` constructor has been renamed to
-   `makePromise` to be consistent with the convention that
-   functions that do not require the `new` keyword to be
-   used as constructors have camelCase names.
- - The `isResolved` function has been renamed to
-   `isFulfilled`.  There is a new `isResolved` function that
-   indicates whether a value is not a promise or, if it is a
-   promise, whether it has been either fulfilled or
-   rejected.  The code has been revised to reflect this
-   nuance in terminology.
-
-## 0.2.10
-
- - Added `join` to `"q/util"` for variadically joining
-   multiple promises.
-
-## 0.2.9
-
- - The future-compatible `invoke` method has been added,
-   to replace `post`, since `post` will become backward-
-   incompatible in the next major release.
- - Exceptions thrown in the callbacks of a `when` call are
-   now emitted to Node's `"uncaughtException"` `process`
-   event in addition to being returned as a rejection reason.
-
-## 0.2.8
-
- - Exceptions thrown in the callbacks of a `when` call
-   are now consumed, warned, and transformed into
-   rejections of the promise returned by `when`.
-
-## 0.2.7
-
- - Fixed a minor bug in thenable assimilation, regressed
-   because of the change in the forwarding protocol.
- - Fixed behavior of "q/util" `deep` method on dates and
-   other primitives. Github issue #11.
-
-## 0.2.6
-
- - Thenables (objects with a "then" method) are accepted
-   and provided, bringing this implementation of Q
-   into conformance with Promises/A, B, and D.
- - Added `makePromise`, to replace the `Promise` function
-   eventually.
- - Rejections are now also duck-typed. A rejection is a
-   promise with a valueOf method that returns a rejection
-   descriptor. A rejection descriptor has a
-   "promiseRejected" property equal to "true" and a
-   "reason" property corresponding to the rejection reason.
- - Altered the `makePromise` API such that the `fallback`
-   method no longer receives a superfluous `resolved` method
-   after the `operator`.  The fallback method is responsible
-   only for returning a resolution.  This breaks an
-   undocumented API, so third-party API's depending on the
-   previous undocumented behavior may break.
-
-## 0.2.5
-
- - Changed promises into a duck-type such that multiple
-   instances of the Q module can exchange promise objects.
-   A promise is now defined as "an object that implements the
-   `promiseSend(op, resolved, ...)` method and `valueOf`".
- - Exceptions in promises are now captured and returned
-   as rejections.
-
-## 0.2.4
-
- - Fixed bug in `ref` that prevented `del` messages from
-   being received (gozala)
- - Fixed a conflict with FireFox 4; constructor property
-   is now read-only.
-
-## 0.2.3
-
- - Added `keys` message to promises and to the promise API.
-
-## 0.2.2
-
- - Added boilerplate to `q/queue` and `q/util`.
- - Fixed missing dependency to `q/queue`.
-
-## 0.2.1
-
- - The `resolve` and `reject` methods of `defer` objects now
-   return the resolution promise for convenience.
- - Added `q/util`, which provides `step`, `delay`, `shallow`,
-   `deep`, and three reduction orders.
- - Added `q/queue` module for a promise `Queue`.
- - Added `q-comm` to the list of compatible libraries.
- - Deprecated `defined` from `q`, with intent to move it to
-   `q/util`.
-
-## 0.2.0 - BACKWARD INCOMPATIBLE
-
- - Changed post(ref, name, args) to variadic
-   post(ref, name, ...args). BACKWARD INCOMPATIBLE
- - Added a def(value) method to annotate an object as being
-   necessarily a local value that cannot be serialized, such
-   that inter-process/worker/vat promise communication
-   libraries will send messages to it, but never send it
-   back.
- - Added a send(value, op, ...args) method to the public API, for
-   forwarding messages to a value or promise in a future turn.
-
-## 0.1.9
-
- - Added isRejected() for testing whether a value is a rejected
-   promise.  isResolved() retains the behavior of stating
-   that rejected promises are not resolved.
-
-## 0.1.8
-
- - Fixed isResolved(null) and isResolved(undefined) [issue #9]
- - Fixed a problem with the Object.create shim
-
-## 0.1.7
-
- - shimmed ES5 Object.create in addition to Object.freeze
-   for compatibility on non-ES5 engines (gozala)
-
-## 0.1.6
-
- - Q.isResolved added
- - promise.valueOf() now returns the value of resolved
-   and near values
- - asap retried
- - promises are frozen when possible
-
-## 0.1.5
-
- - fixed dependency list for Teleport (gozala)
- - all unit tests now pass (gozala)
-
-## 0.1.4
-
- - added support for Teleport as an engine (gozala)
- - simplified and updated methods for getting internal
-   print and enqueue functions universally (gozala)
-
-## 0.1.3
-
- - fixed erroneous link to the q module in package.json
-
-## 0.1.2
-
- - restructured for overlay style package compatibility
-
-## 0.1.0
-
- - removed asap because it was broken, probably down to the
-   philosophy.
-
-## 0.0.3
-
- - removed q-util
- - fixed asap so it returns a value if completed
-
-## 0.0.2
-
- - added q-util
-
-## 0.0.1
-
- - initial version
diff --git a/bin/node_modules/cordova-common/node_modules/q/LICENSE b/bin/node_modules/cordova-common/node_modules/q/LICENSE
deleted file mode 100644
index 8a706b5..0000000
--- a/bin/node_modules/cordova-common/node_modules/q/LICENSE
+++ /dev/null
@@ -1,18 +0,0 @@
-Copyright 2009–2014 Kristopher Michael Kowal. All rights reserved.
-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/bin/node_modules/cordova-common/node_modules/q/README.md b/bin/node_modules/cordova-common/node_modules/q/README.md
deleted file mode 100644
index 9065bfa..0000000
--- a/bin/node_modules/cordova-common/node_modules/q/README.md
+++ /dev/null
@@ -1,881 +0,0 @@
-[![Build Status](https://secure.travis-ci.org/kriskowal/q.png?branch=master)](http://travis-ci.org/kriskowal/q)
-
-<a href="http://promises-aplus.github.com/promises-spec">
-    <img src="http://kriskowal.github.io/q/q.png"
-         align="right" alt="Q logo" />
-</a>
-
-*This is Q version 1, from the `v1` branch in Git. This documentation applies to
-the latest of both the version 1 and version 0.9 release trains. These releases
-are stable. There will be no further releases of 0.9 after 0.9.7 which is nearly
-equivalent to version 1.0.0. All further releases of `q@~1.0` will be backward
-compatible. The version 2 release train introduces significant and
-backward-incompatible changes and is experimental at this time.*
-
-If a function cannot return a value or throw an exception without
-blocking, it can return a promise instead.  A promise is an object
-that represents the return value or the thrown exception that the
-function may eventually provide.  A promise can also be used as a
-proxy for a [remote object][Q-Connection] to overcome latency.
-
-[Q-Connection]: https://github.com/kriskowal/q-connection
-
-On the first pass, promises can mitigate the “[Pyramid of
-Doom][POD]”: the situation where code marches to the right faster
-than it marches forward.
-
-[POD]: http://calculist.org/blog/2011/12/14/why-coroutines-wont-work-on-the-web/
-
-```javascript
-step1(function (value1) {
-    step2(value1, function(value2) {
-        step3(value2, function(value3) {
-            step4(value3, function(value4) {
-                // Do something with value4
-            });
-        });
-    });
-});
-```
-
-With a promise library, you can flatten the pyramid.
-
-```javascript
-Q.fcall(promisedStep1)
-.then(promisedStep2)
-.then(promisedStep3)
-.then(promisedStep4)
-.then(function (value4) {
-    // Do something with value4
-})
-.catch(function (error) {
-    // Handle any error from all above steps
-})
-.done();
-```
-
-With this approach, you also get implicit error propagation, just like `try`,
-`catch`, and `finally`.  An error in `promisedStep1` will flow all the way to
-the `catch` function, where it’s caught and handled.  (Here `promisedStepN` is
-a version of `stepN` that returns a promise.)
-
-The callback approach is called an “inversion of control”.
-A function that accepts a callback instead of a return value
-is saying, “Don’t call me, I’ll call you.”.  Promises
-[un-invert][IOC] the inversion, cleanly separating the input
-arguments from control flow arguments.  This simplifies the
-use and creation of API’s, particularly variadic,
-rest and spread arguments.
-
-[IOC]: http://www.slideshare.net/domenicdenicola/callbacks-promises-and-coroutines-oh-my-the-evolution-of-asynchronicity-in-javascript
-
-
-## Getting Started
-
-The Q module can be loaded as:
-
--   A ``<script>`` tag (creating a ``Q`` global variable): ~2.5 KB minified and
-    gzipped.
--   A Node.js and CommonJS module, available in [npm](https://npmjs.org/) as
-    the [q](https://npmjs.org/package/q) package
--   An AMD module
--   A [component](https://github.com/component/component) as ``microjs/q``
--   Using [bower](http://bower.io/) as `q#1.0.1`
--   Using [NuGet](http://nuget.org/) as [Q](https://nuget.org/packages/q)
-
-Q can exchange promises with jQuery, Dojo, When.js, WinJS, and more.
-
-## Resources
-
-Our [wiki][] contains a number of useful resources, including:
-
-- A method-by-method [Q API reference][reference].
-- A growing [examples gallery][examples], showing how Q can be used to make
-  everything better. From XHR to database access to accessing the Flickr API,
-  Q is there for you.
-- There are many libraries that produce and consume Q promises for everything
-  from file system/database access or RPC to templating. For a list of some of
-  the more popular ones, see [Libraries][].
-- If you want materials that introduce the promise concept generally, and the
-  below tutorial isn't doing it for you, check out our collection of
-  [presentations, blog posts, and podcasts][resources].
-- A guide for those [coming from jQuery's `$.Deferred`][jquery].
-
-We'd also love to have you join the Q-Continuum [mailing list][].
-
-[wiki]: https://github.com/kriskowal/q/wiki
-[reference]: https://github.com/kriskowal/q/wiki/API-Reference
-[examples]: https://github.com/kriskowal/q/wiki/Examples-Gallery
-[Libraries]: https://github.com/kriskowal/q/wiki/Libraries
-[resources]: https://github.com/kriskowal/q/wiki/General-Promise-Resources
-[jquery]: https://github.com/kriskowal/q/wiki/Coming-from-jQuery
-[mailing list]: https://groups.google.com/forum/#!forum/q-continuum
-
-
-## Tutorial
-
-Promises have a ``then`` method, which you can use to get the eventual
-return value (fulfillment) or thrown exception (rejection).
-
-```javascript
-promiseMeSomething()
-.then(function (value) {
-}, function (reason) {
-});
-```
-
-If ``promiseMeSomething`` returns a promise that gets fulfilled later
-with a return value, the first function (the fulfillment handler) will be
-called with the value.  However, if the ``promiseMeSomething`` function
-gets rejected later by a thrown exception, the second function (the
-rejection handler) will be called with the exception.
-
-Note that resolution of a promise is always asynchronous: that is, the
-fulfillment or rejection handler will always be called in the next turn of the
-event loop (i.e. `process.nextTick` in Node). This gives you a nice
-guarantee when mentally tracing the flow of your code, namely that
-``then`` will always return before either handler is executed.
-
-In this tutorial, we begin with how to consume and work with promises. We'll
-talk about how to create them, and thus create functions like
-`promiseMeSomething` that return promises, [below](#the-beginning).
-
-
-### Propagation
-
-The ``then`` method returns a promise, which in this example, I’m
-assigning to ``outputPromise``.
-
-```javascript
-var outputPromise = getInputPromise()
-.then(function (input) {
-}, function (reason) {
-});
-```
-
-The ``outputPromise`` variable becomes a new promise for the return
-value of either handler.  Since a function can only either return a
-value or throw an exception, only one handler will ever be called and it
-will be responsible for resolving ``outputPromise``.
-
--   If you return a value in a handler, ``outputPromise`` will get
-    fulfilled.
-
--   If you throw an exception in a handler, ``outputPromise`` will get
-    rejected.
-
--   If you return a **promise** in a handler, ``outputPromise`` will
-    “become” that promise.  Being able to become a new promise is useful
-    for managing delays, combining results, or recovering from errors.
-
-If the ``getInputPromise()`` promise gets rejected and you omit the
-rejection handler, the **error** will go to ``outputPromise``:
-
-```javascript
-var outputPromise = getInputPromise()
-.then(function (value) {
-});
-```
-
-If the input promise gets fulfilled and you omit the fulfillment handler, the
-**value** will go to ``outputPromise``:
-
-```javascript
-var outputPromise = getInputPromise()
-.then(null, function (error) {
-});
-```
-
-Q promises provide a ``fail`` shorthand for ``then`` when you are only
-interested in handling the error:
-
-```javascript
-var outputPromise = getInputPromise()
-.fail(function (error) {
-});
-```
-
-If you are writing JavaScript for modern engines only or using
-CoffeeScript, you may use `catch` instead of `fail`.
-
-Promises also have a ``fin`` function that is like a ``finally`` clause.
-The final handler gets called, with no arguments, when the promise
-returned by ``getInputPromise()`` either returns a value or throws an
-error.  The value returned or error thrown by ``getInputPromise()``
-passes directly to ``outputPromise`` unless the final handler fails, and
-may be delayed if the final handler returns a promise.
-
-```javascript
-var outputPromise = getInputPromise()
-.fin(function () {
-    // close files, database connections, stop servers, conclude tests
-});
-```
-
--   If the handler returns a value, the value is ignored
--   If the handler throws an error, the error passes to ``outputPromise``
--   If the handler returns a promise, ``outputPromise`` gets postponed.  The
-    eventual value or error has the same effect as an immediate return
-    value or thrown error: a value would be ignored, an error would be
-    forwarded.
-
-If you are writing JavaScript for modern engines only or using
-CoffeeScript, you may use `finally` instead of `fin`.
-
-### Chaining
-
-There are two ways to chain promises.  You can chain promises either
-inside or outside handlers.  The next two examples are equivalent.
-
-```javascript
-return getUsername()
-.then(function (username) {
-    return getUser(username)
-    .then(function (user) {
-        // if we get here without an error,
-        // the value returned here
-        // or the exception thrown here
-        // resolves the promise returned
-        // by the first line
-    })
-});
-```
-
-```javascript
-return getUsername()
-.then(function (username) {
-    return getUser(username);
-})
-.then(function (user) {
-    // if we get here without an error,
-    // the value returned here
-    // or the exception thrown here
-    // resolves the promise returned
-    // by the first line
-});
-```
-
-The only difference is nesting.  It’s useful to nest handlers if you
-need to capture multiple input values in your closure.
-
-```javascript
-function authenticate() {
-    return getUsername()
-    .then(function (username) {
-        return getUser(username);
-    })
-    // chained because we will not need the user name in the next event
-    .then(function (user) {
-        return getPassword()
-        // nested because we need both user and password next
-        .then(function (password) {
-            if (user.passwordHash !== hash(password)) {
-                throw new Error("Can't authenticate");
-            }
-        });
-    });
-}
-```
-
-
-### Combination
-
-You can turn an array of promises into a promise for the whole,
-fulfilled array using ``all``.
-
-```javascript
-return Q.all([
-    eventualAdd(2, 2),
-    eventualAdd(10, 20)
-]);
-```
-
-If you have a promise for an array, you can use ``spread`` as a
-replacement for ``then``.  The ``spread`` function “spreads” the
-values over the arguments of the fulfillment handler.  The rejection handler
-will get called at the first sign of failure.  That is, whichever of
-the received promises fails first gets handled by the rejection handler.
-
-```javascript
-function eventualAdd(a, b) {
-    return Q.spread([a, b], function (a, b) {
-        return a + b;
-    })
-}
-```
-
-But ``spread`` calls ``all`` initially, so you can skip it in chains.
-
-```javascript
-return getUsername()
-.then(function (username) {
-    return [username, getUser(username)];
-})
-.spread(function (username, user) {
-});
-```
-
-The ``all`` function returns a promise for an array of values.  When this
-promise is fulfilled, the array contains the fulfillment values of the original
-promises, in the same order as those promises.  If one of the given promises
-is rejected, the returned promise is immediately rejected, not waiting for the
-rest of the batch.  If you want to wait for all of the promises to either be
-fulfilled or rejected, you can use ``allSettled``.
-
-```javascript
-Q.allSettled(promises)
-.then(function (results) {
-    results.forEach(function (result) {
-        if (result.state === "fulfilled") {
-            var value = result.value;
-        } else {
-            var reason = result.reason;
-        }
-    });
-});
-```
-
-The ``any`` function accepts an array of promises and returns a promise that is
-fulfilled by the first given promise to be fulfilled, or rejected if all of the
-given promises are rejected.
-
-```javascript
-Q.any(promises)
-.then(function (first) {
-    // Any of the promises was fulfilled.
-}, function (error) {
-    // All of the promises were rejected.
-});
-```
-
-### Sequences
-
-If you have a number of promise-producing functions that need
-to be run sequentially, you can of course do so manually:
-
-```javascript
-return foo(initialVal).then(bar).then(baz).then(qux);
-```
-
-However, if you want to run a dynamically constructed sequence of
-functions, you'll want something like this:
-
-```javascript
-var funcs = [foo, bar, baz, qux];
-
-var result = Q(initialVal);
-funcs.forEach(function (f) {
-    result = result.then(f);
-});
-return result;
-```
-
-You can make this slightly more compact using `reduce`:
-
-```javascript
-return funcs.reduce(function (soFar, f) {
-    return soFar.then(f);
-}, Q(initialVal));
-```
-
-Or, you could use the ultra-compact version:
-
-```javascript
-return funcs.reduce(Q.when, Q(initialVal));
-```
-
-### Handling Errors
-
-One sometimes-unintuive aspect of promises is that if you throw an
-exception in the fulfillment handler, it will not be caught by the error
-handler.
-
-```javascript
-return foo()
-.then(function (value) {
-    throw new Error("Can't bar.");
-}, function (error) {
-    // We only get here if "foo" fails
-});
-```
-
-To see why this is, consider the parallel between promises and
-``try``/``catch``. We are ``try``-ing to execute ``foo()``: the error
-handler represents a ``catch`` for ``foo()``, while the fulfillment handler
-represents code that happens *after* the ``try``/``catch`` block.
-That code then needs its own ``try``/``catch`` block.
-
-In terms of promises, this means chaining your rejection handler:
-
-```javascript
-return foo()
-.then(function (value) {
-    throw new Error("Can't bar.");
-})
-.fail(function (error) {
-    // We get here with either foo's error or bar's error
-});
-```
-
-### Progress Notification
-
-It's possible for promises to report their progress, e.g. for tasks that take a
-long time like a file upload. Not all promises will implement progress
-notifications, but for those that do, you can consume the progress values using
-a third parameter to ``then``:
-
-```javascript
-return uploadFile()
-.then(function () {
-    // Success uploading the file
-}, function (err) {
-    // There was an error, and we get the reason for error
-}, function (progress) {
-    // We get notified of the upload's progress as it is executed
-});
-```
-
-Like `fail`, Q also provides a shorthand for progress callbacks
-called `progress`:
-
-```javascript
-return uploadFile().progress(function (progress) {
-    // We get notified of the upload's progress
-});
-```
-
-### The End
-
-When you get to the end of a chain of promises, you should either
-return the last promise or end the chain.  Since handlers catch
-errors, it’s an unfortunate pattern that the exceptions can go
-unobserved.
-
-So, either return it,
-
-```javascript
-return foo()
-.then(function () {
-    return "bar";
-});
-```
-
-Or, end it.
-
-```javascript
-foo()
-.then(function () {
-    return "bar";
-})
-.done();
-```
-
-Ending a promise chain makes sure that, if an error doesn’t get
-handled before the end, it will get rethrown and reported.
-
-This is a stopgap. We are exploring ways to make unhandled errors
-visible without any explicit handling.
-
-
-### The Beginning
-
-Everything above assumes you get a promise from somewhere else.  This
-is the common case.  Every once in a while, you will need to create a
-promise from scratch.
-
-#### Using ``Q.fcall``
-
-You can create a promise from a value using ``Q.fcall``.  This returns a
-promise for 10.
-
-```javascript
-return Q.fcall(function () {
-    return 10;
-});
-```
-
-You can also use ``fcall`` to get a promise for an exception.
-
-```javascript
-return Q.fcall(function () {
-    throw new Error("Can't do it");
-});
-```
-
-As the name implies, ``fcall`` can call functions, or even promised
-functions.  This uses the ``eventualAdd`` function above to add two
-numbers.
-
-```javascript
-return Q.fcall(eventualAdd, 2, 2);
-```
-
-
-#### Using Deferreds
-
-If you have to interface with asynchronous functions that are callback-based
-instead of promise-based, Q provides a few shortcuts (like ``Q.nfcall`` and
-friends). But much of the time, the solution will be to use *deferreds*.
-
-```javascript
-var deferred = Q.defer();
-FS.readFile("foo.txt", "utf-8", function (error, text) {
-    if (error) {
-        deferred.reject(new Error(error));
-    } else {
-        deferred.resolve(text);
-    }
-});
-return deferred.promise;
-```
-
-Note that a deferred can be resolved with a value or a promise.  The
-``reject`` function is a shorthand for resolving with a rejected
-promise.
-
-```javascript
-// this:
-deferred.reject(new Error("Can't do it"));
-
-// is shorthand for:
-var rejection = Q.fcall(function () {
-    throw new Error("Can't do it");
-});
-deferred.resolve(rejection);
-```
-
-This is a simplified implementation of ``Q.delay``.
-
-```javascript
-function delay(ms) {
-    var deferred = Q.defer();
-    setTimeout(deferred.resolve, ms);
-    return deferred.promise;
-}
-```
-
-This is a simplified implementation of ``Q.timeout``
-
-```javascript
-function timeout(promise, ms) {
-    var deferred = Q.defer();
-    Q.when(promise, deferred.resolve);
-    delay(ms).then(function () {
-        deferred.reject(new Error("Timed out"));
-    });
-    return deferred.promise;
-}
-```
-
-Finally, you can send a progress notification to the promise with
-``deferred.notify``.
-
-For illustration, this is a wrapper for XML HTTP requests in the browser. Note
-that a more [thorough][XHR] implementation would be in order in practice.
-
-[XHR]: https://github.com/montagejs/mr/blob/71e8df99bb4f0584985accd6f2801ef3015b9763/browser.js#L29-L73
-
-```javascript
-function requestOkText(url) {
-    var request = new XMLHttpRequest();
-    var deferred = Q.defer();
-
-    request.open("GET", url, true);
-    request.onload = onload;
-    request.onerror = onerror;
-    request.onprogress = onprogress;
-    request.send();
-
-    function onload() {
-        if (request.status === 200) {
-            deferred.resolve(request.responseText);
-        } else {
-            deferred.reject(new Error("Status code was " + request.status));
-        }
-    }
-
-    function onerror() {
-        deferred.reject(new Error("Can't XHR " + JSON.stringify(url)));
-    }
-
-    function onprogress(event) {
-        deferred.notify(event.loaded / event.total);
-    }
-
-    return deferred.promise;
-}
-```
-
-Below is an example of how to use this ``requestOkText`` function:
-
-```javascript
-requestOkText("http://localhost:3000")
-.then(function (responseText) {
-    // If the HTTP response returns 200 OK, log the response text.
-    console.log(responseText);
-}, function (error) {
-    // If there's an error or a non-200 status code, log the error.
-    console.error(error);
-}, function (progress) {
-    // Log the progress as it comes in.
-    console.log("Request progress: " + Math.round(progress * 100) + "%");
-});
-```
-
-#### Using `Q.Promise`
-
-This is an alternative promise-creation API that has the same power as
-the deferred concept, but without introducing another conceptual entity.
-
-Rewriting the `requestOkText` example above using `Q.Promise`:
-
-```javascript
-function requestOkText(url) {
-    return Q.Promise(function(resolve, reject, notify) {
-        var request = new XMLHttpRequest();
-
-        request.open("GET", url, true);
-        request.onload = onload;
-        request.onerror = onerror;
-        request.onprogress = onprogress;
-        request.send();
-
-        function onload() {
-            if (request.status === 200) {
-                resolve(request.responseText);
-            } else {
-                reject(new Error("Status code was " + request.status));
-            }
-        }
-
-        function onerror() {
-            reject(new Error("Can't XHR " + JSON.stringify(url)));
-        }
-
-        function onprogress(event) {
-            notify(event.loaded / event.total);
-        }
-    });
-}
-```
-
-If `requestOkText` were to throw an exception, the returned promise would be
-rejected with that thrown exception as the rejection reason.
-
-### The Middle
-
-If you are using a function that may return a promise, but just might
-return a value if it doesn’t need to defer, you can use the “static”
-methods of the Q library.
-
-The ``when`` function is the static equivalent for ``then``.
-
-```javascript
-return Q.when(valueOrPromise, function (value) {
-}, function (error) {
-});
-```
-
-All of the other methods on a promise have static analogs with the
-same name.
-
-The following are equivalent:
-
-```javascript
-return Q.all([a, b]);
-```
-
-```javascript
-return Q.fcall(function () {
-    return [a, b];
-})
-.all();
-```
-
-When working with promises provided by other libraries, you should
-convert it to a Q promise.  Not all promise libraries make the same
-guarantees as Q and certainly don’t provide all of the same methods.
-Most libraries only provide a partially functional ``then`` method.
-This thankfully is all we need to turn them into vibrant Q promises.
-
-```javascript
-return Q($.ajax(...))
-.then(function () {
-});
-```
-
-If there is any chance that the promise you receive is not a Q promise
-as provided by your library, you should wrap it using a Q function.
-You can even use ``Q.invoke`` as a shorthand.
-
-```javascript
-return Q.invoke($, 'ajax', ...)
-.then(function () {
-});
-```
-
-
-### Over the Wire
-
-A promise can serve as a proxy for another object, even a remote
-object.  There are methods that allow you to optimistically manipulate
-properties or call functions.  All of these interactions return
-promises, so they can be chained.
-
-```
-direct manipulation         using a promise as a proxy
---------------------------  -------------------------------
-value.foo                   promise.get("foo")
-value.foo = value           promise.put("foo", value)
-delete value.foo            promise.del("foo")
-value.foo(...args)          promise.post("foo", [args])
-value.foo(...args)          promise.invoke("foo", ...args)
-value(...args)              promise.fapply([args])
-value(...args)              promise.fcall(...args)
-```
-
-If the promise is a proxy for a remote object, you can shave
-round-trips by using these functions instead of ``then``.  To take
-advantage of promises for remote objects, check out [Q-Connection][].
-
-[Q-Connection]: https://github.com/kriskowal/q-connection
-
-Even in the case of non-remote objects, these methods can be used as
-shorthand for particularly-simple fulfillment handlers. For example, you
-can replace
-
-```javascript
-return Q.fcall(function () {
-    return [{ foo: "bar" }, { foo: "baz" }];
-})
-.then(function (value) {
-    return value[0].foo;
-});
-```
-
-with
-
-```javascript
-return Q.fcall(function () {
-    return [{ foo: "bar" }, { foo: "baz" }];
-})
-.get(0)
-.get("foo");
-```
-
-
-### Adapting Node
-
-If you're working with functions that make use of the Node.js callback pattern,
-where callbacks are in the form of `function(err, result)`, Q provides a few
-useful utility functions for converting between them. The most straightforward
-are probably `Q.nfcall` and `Q.nfapply` ("Node function call/apply") for calling
-Node.js-style functions and getting back a promise:
-
-```javascript
-return Q.nfcall(FS.readFile, "foo.txt", "utf-8");
-return Q.nfapply(FS.readFile, ["foo.txt", "utf-8"]);
-```
-
-If you are working with methods, instead of simple functions, you can easily
-run in to the usual problems where passing a method to another function—like
-`Q.nfcall`—"un-binds" the method from its owner. To avoid this, you can either
-use `Function.prototype.bind` or some nice shortcut methods we provide:
-
-```javascript
-return Q.ninvoke(redisClient, "get", "user:1:id");
-return Q.npost(redisClient, "get", ["user:1:id"]);
-```
-
-You can also create reusable wrappers with `Q.denodeify` or `Q.nbind`:
-
-```javascript
-var readFile = Q.denodeify(FS.readFile);
-return readFile("foo.txt", "utf-8");
-
-var redisClientGet = Q.nbind(redisClient.get, redisClient);
-return redisClientGet("user:1:id");
-```
-
-Finally, if you're working with raw deferred objects, there is a
-`makeNodeResolver` method on deferreds that can be handy:
-
-```javascript
-var deferred = Q.defer();
-FS.readFile("foo.txt", "utf-8", deferred.makeNodeResolver());
-return deferred.promise;
-```
-
-### Long Stack Traces
-
-Q comes with optional support for “long stack traces,” wherein the `stack`
-property of `Error` rejection reasons is rewritten to be traced along
-asynchronous jumps instead of stopping at the most recent one. As an example:
-
-```js
-function theDepthsOfMyProgram() {
-  Q.delay(100).done(function explode() {
-    throw new Error("boo!");
-  });
-}
-
-theDepthsOfMyProgram();
-```
-
-usually would give a rather unhelpful stack trace looking something like
-
-```
-Error: boo!
-    at explode (/path/to/test.js:3:11)
-    at _fulfilled (/path/to/test.js:q:54)
-    at resolvedValue.promiseDispatch.done (/path/to/q.js:823:30)
-    at makePromise.promise.promiseDispatch (/path/to/q.js:496:13)
-    at pending (/path/to/q.js:397:39)
-    at process.startup.processNextTick.process._tickCallback (node.js:244:9)
-```
-
-But, if you turn this feature on by setting
-
-```js
-Q.longStackSupport = true;
-```
-
-then the above code gives a nice stack trace to the tune of
-
-```
-Error: boo!
-    at explode (/path/to/test.js:3:11)
-From previous event:
-    at theDepthsOfMyProgram (/path/to/test.js:2:16)
-    at Object.<anonymous> (/path/to/test.js:7:1)
-```
-
-Note how you can see the function that triggered the async operation in the
-stack trace! This is very helpful for debugging, as otherwise you end up getting
-only the first line, plus a bunch of Q internals, with no sign of where the
-operation started.
-
-In node.js, this feature can also be enabled through the Q_DEBUG environment
-variable:
-
-```
-Q_DEBUG=1 node server.js
-```
-
-This will enable long stack support in every instance of Q.
-
-This feature does come with somewhat-serious performance and memory overhead,
-however. If you're working with lots of promises, or trying to scale a server
-to many users, you should probably keep it off. But in development, go for it!
-
-## Tests
-
-You can view the results of the Q test suite [in your browser][tests]!
-
-[tests]: https://rawgithub.com/kriskowal/q/v1/spec/q-spec.html
-
-## License
-
-Copyright 2009–2015 Kristopher Michael Kowal and contributors
-MIT License (enclosed)
-
diff --git a/bin/node_modules/cordova-common/node_modules/q/package.json b/bin/node_modules/cordova-common/node_modules/q/package.json
deleted file mode 100644
index acbcb75..0000000
--- a/bin/node_modules/cordova-common/node_modules/q/package.json
+++ /dev/null
@@ -1,120 +0,0 @@
-{
-  "name": "q",
-  "version": "1.4.1",
-  "description": "A library for promises (CommonJS/Promises/A,B,D)",
-  "homepage": "https://github.com/kriskowal/q",
-  "author": {
-    "name": "Kris Kowal",
-    "email": "kris@cixar.com",
-    "url": "https://github.com/kriskowal"
-  },
-  "keywords": [
-    "q",
-    "promise",
-    "promises",
-    "promises-a",
-    "promises-aplus",
-    "deferred",
-    "future",
-    "async",
-    "flow control",
-    "fluent",
-    "browser",
-    "node"
-  ],
-  "contributors": [
-    {
-      "name": "Kris Kowal",
-      "email": "kris@cixar.com",
-      "url": "https://github.com/kriskowal"
-    },
-    {
-      "name": "Irakli Gozalishvili",
-      "email": "rfobic@gmail.com",
-      "url": "http://jeditoolkit.com"
-    },
-    {
-      "name": "Domenic Denicola",
-      "email": "domenic@domenicdenicola.com",
-      "url": "http://domenicdenicola.com"
-    }
-  ],
-  "bugs": {
-    "url": "http://github.com/kriskowal/q/issues"
-  },
-  "license": {
-    "type": "MIT",
-    "url": "http://github.com/kriskowal/q/raw/master/LICENSE"
-  },
-  "main": "q.js",
-  "files": [
-    "LICENSE",
-    "q.js",
-    "queue.js"
-  ],
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/kriskowal/q.git"
-  },
-  "engines": {
-    "node": ">=0.6.0",
-    "teleport": ">=0.2.0"
-  },
-  "dependencies": {},
-  "devDependencies": {
-    "cover": "*",
-    "grunt": "~0.4.1",
-    "grunt-cli": "~0.1.9",
-    "grunt-contrib-uglify": "~0.9.1",
-    "jasmine-node": "1.11.0",
-    "jshint": "~2.1.9",
-    "matcha": "~0.2.0",
-    "opener": "*",
-    "promises-aplus-tests": "1.x"
-  },
-  "scripts": {
-    "test": "jasmine-node spec && promises-aplus-tests spec/aplus-adapter",
-    "test-browser": "opener spec/q-spec.html",
-    "benchmark": "matcha",
-    "lint": "jshint q.js",
-    "cover": "cover run jasmine-node spec && cover report html && opener cover_html/index.html",
-    "minify": "grunt",
-    "prepublish": "grunt"
-  },
-  "overlay": {
-    "teleport": {
-      "dependencies": {
-        "system": ">=0.0.4"
-      }
-    }
-  },
-  "directories": {
-    "test": "./spec"
-  },
-  "gitHead": "d373079d3620152e3d60e82f27265a09ee0e81bd",
-  "_id": "q@1.4.1",
-  "_shasum": "55705bcd93c5f3673530c2c2cbc0c2b3addc286e",
-  "_from": "q@^1.4.1",
-  "_npmVersion": "2.8.3",
-  "_nodeVersion": "1.8.1",
-  "_npmUser": {
-    "name": "kriskowal",
-    "email": "kris.kowal@cixar.com"
-  },
-  "maintainers": [
-    {
-      "name": "kriskowal",
-      "email": "kris.kowal@cixar.com"
-    },
-    {
-      "name": "domenic",
-      "email": "domenic@domenicdenicola.com"
-    }
-  ],
-  "dist": {
-    "shasum": "55705bcd93c5f3673530c2c2cbc0c2b3addc286e",
-    "tarball": "http://registry.npmjs.org/q/-/q-1.4.1.tgz"
-  },
-  "_resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz",
-  "readme": "ERROR: No README data found!"
-}
diff --git a/bin/node_modules/cordova-common/node_modules/q/q.js b/bin/node_modules/cordova-common/node_modules/q/q.js
deleted file mode 100644
index cf5339e..0000000
--- a/bin/node_modules/cordova-common/node_modules/q/q.js
+++ /dev/null
@@ -1,2048 +0,0 @@
-// vim:ts=4:sts=4:sw=4:
-/*!
- *
- * Copyright 2009-2012 Kris Kowal under the terms of the MIT
- * license found at http://github.com/kriskowal/q/raw/master/LICENSE
- *
- * With parts by Tyler Close
- * Copyright 2007-2009 Tyler Close under the terms of the MIT X license found
- * at http://www.opensource.org/licenses/mit-license.html
- * Forked at ref_send.js version: 2009-05-11
- *
- * With parts by Mark Miller
- * Copyright (C) 2011 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-(function (definition) {
-    "use strict";
-
-    // This file will function properly as a <script> tag, or a module
-    // using CommonJS and NodeJS or RequireJS module formats.  In
-    // Common/Node/RequireJS, the module exports the Q API and when
-    // executed as a simple <script>, it creates a Q global instead.
-
-    // Montage Require
-    if (typeof bootstrap === "function") {
-        bootstrap("promise", definition);
-
-    // CommonJS
-    } else if (typeof exports === "object" && typeof module === "object") {
-        module.exports = definition();
-
-    // RequireJS
-    } else if (typeof define === "function" && define.amd) {
-        define(definition);
-
-    // SES (Secure EcmaScript)
-    } else if (typeof ses !== "undefined") {
-        if (!ses.ok()) {
-            return;
-        } else {
-            ses.makeQ = definition;
-        }
-
-    // <script>
-    } else if (typeof window !== "undefined" || typeof self !== "undefined") {
-        // Prefer window over self for add-on scripts. Use self for
-        // non-windowed contexts.
-        var global = typeof window !== "undefined" ? window : self;
-
-        // Get the `window` object, save the previous Q global
-        // and initialize Q as a global.
-        var previousQ = global.Q;
-        global.Q = definition();
-
-        // Add a noConflict function so Q can be removed from the
-        // global namespace.
-        global.Q.noConflict = function () {
-            global.Q = previousQ;
-            return this;
-        };
-
-    } else {
-        throw new Error("This environment was not anticipated by Q. Please file a bug.");
-    }
-
-})(function () {
-"use strict";
-
-var hasStacks = false;
-try {
-    throw new Error();
-} catch (e) {
-    hasStacks = !!e.stack;
-}
-
-// All code after this point will be filtered from stack traces reported
-// by Q.
-var qStartingLine = captureLine();
-var qFileName;
-
-// shims
-
-// used for fallback in "allResolved"
-var noop = function () {};
-
-// Use the fastest possible means to execute a task in a future turn
-// of the event loop.
-var nextTick =(function () {
-    // linked list of tasks (single, with head node)
-    var head = {task: void 0, next: null};
-    var tail = head;
-    var flushing = false;
-    var requestTick = void 0;
-    var isNodeJS = false;
-    // queue for late tasks, used by unhandled rejection tracking
-    var laterQueue = [];
-
-    function flush() {
-        /* jshint loopfunc: true */
-        var task, domain;
-
-        while (head.next) {
-            head = head.next;
-            task = head.task;
-            head.task = void 0;
-            domain = head.domain;
-
-            if (domain) {
-                head.domain = void 0;
-                domain.enter();
-            }
-            runSingle(task, domain);
-
-        }
-        while (laterQueue.length) {
-            task = laterQueue.pop();
-            runSingle(task);
-        }
-        flushing = false;
-    }
-    // runs a single function in the async queue
-    function runSingle(task, domain) {
-        try {
-            task();
-
-        } catch (e) {
-            if (isNodeJS) {
-                // In node, uncaught exceptions are considered fatal errors.
-                // Re-throw them synchronously to interrupt flushing!
-
-                // Ensure continuation if the uncaught exception is suppressed
-                // listening "uncaughtException" events (as domains does).
-                // Continue in next event to avoid tick recursion.
-                if (domain) {
-                    domain.exit();
-                }
-                setTimeout(flush, 0);
-                if (domain) {
-                    domain.enter();
-                }
-
-                throw e;
-
-            } else {
-                // In browsers, uncaught exceptions are not fatal.
-                // Re-throw them asynchronously to avoid slow-downs.
-                setTimeout(function () {
-                    throw e;
-                }, 0);
-            }
-        }
-
-        if (domain) {
-            domain.exit();
-        }
-    }
-
-    nextTick = function (task) {
-        tail = tail.next = {
-            task: task,
-            domain: isNodeJS && process.domain,
-            next: null
-        };
-
-        if (!flushing) {
-            flushing = true;
-            requestTick();
-        }
-    };
-
-    if (typeof process === "object" &&
-        process.toString() === "[object process]" && process.nextTick) {
-        // Ensure Q is in a real Node environment, with a `process.nextTick`.
-        // To see through fake Node environments:
-        // * Mocha test runner - exposes a `process` global without a `nextTick`
-        // * Browserify - exposes a `process.nexTick` function that uses
-        //   `setTimeout`. In this case `setImmediate` is preferred because
-        //    it is faster. Browserify's `process.toString()` yields
-        //   "[object Object]", while in a real Node environment
-        //   `process.nextTick()` yields "[object process]".
-        isNodeJS = true;
-
-        requestTick = function () {
-            process.nextTick(flush);
-        };
-
-    } else if (typeof setImmediate === "function") {
-        // In IE10, Node.js 0.9+, or https://github.com/NobleJS/setImmediate
-        if (typeof window !== "undefined") {
-            requestTick = setImmediate.bind(window, flush);
-        } else {
-            requestTick = function () {
-                setImmediate(flush);
-            };
-        }
-
-    } else if (typeof MessageChannel !== "undefined") {
-        // modern browsers
-        // http://www.nonblocking.io/2011/06/windownexttick.html
-        var channel = new MessageChannel();
-        // At least Safari Version 6.0.5 (8536.30.1) intermittently cannot create
-        // working message ports the first time a page loads.
-        channel.port1.onmessage = function () {
-            requestTick = requestPortTick;
-            channel.port1.onmessage = flush;
-            flush();
-        };
-        var requestPortTick = function () {
-            // Opera requires us to provide a message payload, regardless of
-            // whether we use it.
-            channel.port2.postMessage(0);
-        };
-        requestTick = function () {
-            setTimeout(flush, 0);
-            requestPortTick();
-        };
-
-    } else {
-        // old browsers
-        requestTick = function () {
-            setTimeout(flush, 0);
-        };
-    }
-    // runs a task after all other tasks have been run
-    // this is useful for unhandled rejection tracking that needs to happen
-    // after all `then`d tasks have been run.
-    nextTick.runAfter = function (task) {
-        laterQueue.push(task);
-        if (!flushing) {
-            flushing = true;
-            requestTick();
-        }
-    };
-    return nextTick;
-})();
-
-// Attempt to make generics safe in the face of downstream
-// modifications.
-// There is no situation where this is necessary.
-// If you need a security guarantee, these primordials need to be
-// deeply frozen anyway, and if you don’t need a security guarantee,
-// this is just plain paranoid.
-// However, this **might** have the nice side-effect of reducing the size of
-// the minified code by reducing x.call() to merely x()
-// See Mark Miller’s explanation of what this does.
-// http://wiki.ecmascript.org/doku.php?id=conventions:safe_meta_programming
-var call = Function.call;
-function uncurryThis(f) {
-    return function () {
-        return call.apply(f, arguments);
-    };
-}
-// This is equivalent, but slower:
-// uncurryThis = Function_bind.bind(Function_bind.call);
-// http://jsperf.com/uncurrythis
-
-var array_slice = uncurryThis(Array.prototype.slice);
-
-var array_reduce = uncurryThis(
-    Array.prototype.reduce || function (callback, basis) {
-        var index = 0,
-            length = this.length;
-        // concerning the initial value, if one is not provided
-        if (arguments.length === 1) {
-            // seek to the first value in the array, accounting
-            // for the possibility that is is a sparse array
-            do {
-                if (index in this) {
-                    basis = this[index++];
-                    break;
-                }
-                if (++index >= length) {
-                    throw new TypeError();
-                }
-            } while (1);
-        }
-        // reduce
-        for (; index < length; index++) {
-            // account for the possibility that the array is sparse
-            if (index in this) {
-                basis = callback(basis, this[index], index);
-            }
-        }
-        return basis;
-    }
-);
-
-var array_indexOf = uncurryThis(
-    Array.prototype.indexOf || function (value) {
-        // not a very good shim, but good enough for our one use of it
-        for (var i = 0; i < this.length; i++) {
-            if (this[i] === value) {
-                return i;
-            }
-        }
-        return -1;
-    }
-);
-
-var array_map = uncurryThis(
-    Array.prototype.map || function (callback, thisp) {
-        var self = this;
-        var collect = [];
-        array_reduce(self, function (undefined, value, index) {
-            collect.push(callback.call(thisp, value, index, self));
-        }, void 0);
-        return collect;
-    }
-);
-
-var object_create = Object.create || function (prototype) {
-    function Type() { }
-    Type.prototype = prototype;
-    return new Type();
-};
-
-var object_hasOwnProperty = uncurryThis(Object.prototype.hasOwnProperty);
-
-var object_keys = Object.keys || function (object) {
-    var keys = [];
-    for (var key in object) {
-        if (object_hasOwnProperty(object, key)) {
-            keys.push(key);
-        }
-    }
-    return keys;
-};
-
-var object_toString = uncurryThis(Object.prototype.toString);
-
-function isObject(value) {
-    return value === Object(value);
-}
-
-// generator related shims
-
-// FIXME: Remove this function once ES6 generators are in SpiderMonkey.
-function isStopIteration(exception) {
-    return (
-        object_toString(exception) === "[object StopIteration]" ||
-        exception instanceof QReturnValue
-    );
-}
-
-// FIXME: Remove this helper and Q.return once ES6 generators are in
-// SpiderMonkey.
-var QReturnValue;
-if (typeof ReturnValue !== "undefined") {
-    QReturnValue = ReturnValue;
-} else {
-    QReturnValue = function (value) {
-        this.value = value;
-    };
-}
-
-// long stack traces
-
-var STACK_JUMP_SEPARATOR = "From previous event:";
-
-function makeStackTraceLong(error, promise) {
-    // If possible, transform the error stack trace by removing Node and Q
-    // cruft, then concatenating with the stack trace of `promise`. See #57.
-    if (hasStacks &&
-        promise.stack &&
-        typeof error === "object" &&
-        error !== null &&
-        error.stack &&
-        error.stack.indexOf(STACK_JUMP_SEPARATOR) === -1
-    ) {
-        var stacks = [];
-        for (var p = promise; !!p; p = p.source) {
-            if (p.stack) {
-                stacks.unshift(p.stack);
-            }
-        }
-        stacks.unshift(error.stack);
-
-        var concatedStacks = stacks.join("\n" + STACK_JUMP_SEPARATOR + "\n");
-        error.stack = filterStackString(concatedStacks);
-    }
-}
-
-function filterStackString(stackString) {
-    var lines = stackString.split("\n");
-    var desiredLines = [];
-    for (var i = 0; i < lines.length; ++i) {
-        var line = lines[i];
-
-        if (!isInternalFrame(line) && !isNodeFrame(line) && line) {
-            desiredLines.push(line);
-        }
-    }
-    return desiredLines.join("\n");
-}
-
-function isNodeFrame(stackLine) {
-    return stackLine.indexOf("(module.js:") !== -1 ||
-           stackLine.indexOf("(node.js:") !== -1;
-}
-
-function getFileNameAndLineNumber(stackLine) {
-    // Named functions: "at functionName (filename:lineNumber:columnNumber)"
-    // In IE10 function name can have spaces ("Anonymous function") O_o
-    var attempt1 = /at .+ \((.+):(\d+):(?:\d+)\)$/.exec(stackLine);
-    if (attempt1) {
-        return [attempt1[1], Number(attempt1[2])];
-    }
-
-    // Anonymous functions: "at filename:lineNumber:columnNumber"
-    var attempt2 = /at ([^ ]+):(\d+):(?:\d+)$/.exec(stackLine);
-    if (attempt2) {
-        return [attempt2[1], Number(attempt2[2])];
-    }
-
-    // Firefox style: "function@filename:lineNumber or @filename:lineNumber"
-    var attempt3 = /.*@(.+):(\d+)$/.exec(stackLine);
-    if (attempt3) {
-        return [attempt3[1], Number(attempt3[2])];
-    }
-}
-
-function isInternalFrame(stackLine) {
-    var fileNameAndLineNumber = getFileNameAndLineNumber(stackLine);
-
-    if (!fileNameAndLineNumber) {
-        return false;
-    }
-
-    var fileName = fileNameAndLineNumber[0];
-    var lineNumber = fileNameAndLineNumber[1];
-
-    return fileName === qFileName &&
-        lineNumber >= qStartingLine &&
-        lineNumber <= qEndingLine;
-}
-
-// discover own file name and line number range for filtering stack
-// traces
-function captureLine() {
-    if (!hasStacks) {
-        return;
-    }
-
-    try {
-        throw new Error();
-    } catch (e) {
-        var lines = e.stack.split("\n");
-        var firstLine = lines[0].indexOf("@") > 0 ? lines[1] : lines[2];
-        var fileNameAndLineNumber = getFileNameAndLineNumber(firstLine);
-        if (!fileNameAndLineNumber) {
-            return;
-        }
-
-        qFileName = fileNameAndLineNumber[0];
-        return fileNameAndLineNumber[1];
-    }
-}
-
-function deprecate(callback, name, alternative) {
-    return function () {
-        if (typeof console !== "undefined" &&
-            typeof console.warn === "function") {
-            console.warn(name + " is deprecated, use " + alternative +
-                         " instead.", new Error("").stack);
-        }
-        return callback.apply(callback, arguments);
-    };
-}
-
-// end of shims
-// beginning of real work
-
-/**
- * Constructs a promise for an immediate reference, passes promises through, or
- * coerces promises from different systems.
- * @param value immediate reference or promise
- */
-function Q(value) {
-    // If the object is already a Promise, return it directly.  This enables
-    // the resolve function to both be used to created references from objects,
-    // but to tolerably coerce non-promises to promises.
-    if (value instanceof Promise) {
-        return value;
-    }
-
-    // assimilate thenables
-    if (isPromiseAlike(value)) {
-        return coerce(value);
-    } else {
-        return fulfill(value);
-    }
-}
-Q.resolve = Q;
-
-/**
- * Performs a task in a future turn of the event loop.
- * @param {Function} task
- */
-Q.nextTick = nextTick;
-
-/**
- * Controls whether or not long stack traces will be on
- */
-Q.longStackSupport = false;
-
-// enable long stacks if Q_DEBUG is set
-if (typeof process === "object" && process && process.env && process.env.Q_DEBUG) {
-    Q.longStackSupport = true;
-}
-
-/**
- * Constructs a {promise, resolve, reject} object.
- *
- * `resolve` is a callback to invoke with a more resolved value for the
- * promise. To fulfill the promise, invoke `resolve` with any value that is
- * not a thenable. To reject the promise, invoke `resolve` with a rejected
- * thenable, or invoke `reject` with the reason directly. To resolve the
- * promise to another thenable, thus putting it in the same state, invoke
- * `resolve` with that other thenable.
- */
-Q.defer = defer;
-function defer() {
-    // if "messages" is an "Array", that indicates that the promise has not yet
-    // been resolved.  If it is "undefined", it has been resolved.  Each
-    // element of the messages array is itself an array of complete arguments to
-    // forward to the resolved promise.  We coerce the resolution value to a
-    // promise using the `resolve` function because it handles both fully
-    // non-thenable values and other thenables gracefully.
-    var messages = [], progressListeners = [], resolvedPromise;
-
-    var deferred = object_create(defer.prototype);
-    var promise = object_create(Promise.prototype);
-
-    promise.promiseDispatch = function (resolve, op, operands) {
-        var args = array_slice(arguments);
-        if (messages) {
-            messages.push(args);
-            if (op === "when" && operands[1]) { // progress operand
-                progressListeners.push(operands[1]);
-            }
-        } else {
-            Q.nextTick(function () {
-                resolvedPromise.promiseDispatch.apply(resolvedPromise, args);
-            });
-        }
-    };
-
-    // XXX deprecated
-    promise.valueOf = function () {
-        if (messages) {
-            return promise;
-        }
-        var nearerValue = nearer(resolvedPromise);
-        if (isPromise(nearerValue)) {
-            resolvedPromise = nearerValue; // shorten chain
-        }
-        return nearerValue;
-    };
-
-    promise.inspect = function () {
-        if (!resolvedPromise) {
-            return { state: "pending" };
-        }
-        return resolvedPromise.inspect();
-    };
-
-    if (Q.longStackSupport && hasStacks) {
-        try {
-            throw new Error();
-        } catch (e) {
-            // NOTE: don't try to use `Error.captureStackTrace` or transfer the
-            // accessor around; that causes memory leaks as per GH-111. Just
-            // reify the stack trace as a string ASAP.
-            //
-            // At the same time, cut off the first line; it's always just
-            // "[object Promise]\n", as per the `toString`.
-            promise.stack = e.stack.substring(e.stack.indexOf("\n") + 1);
-        }
-    }
-
-    // NOTE: we do the checks for `resolvedPromise` in each method, instead of
-    // consolidating them into `become`, since otherwise we'd create new
-    // promises with the lines `become(whatever(value))`. See e.g. GH-252.
-
-    function become(newPromise) {
-        resolvedPromise = newPromise;
-        promise.source = newPromise;
-
-        array_reduce(messages, function (undefined, message) {
-            Q.nextTick(function () {
-                newPromise.promiseDispatch.apply(newPromise, message);
-            });
-        }, void 0);
-
-        messages = void 0;
-        progressListeners = void 0;
-    }
-
-    deferred.promise = promise;
-    deferred.resolve = function (value) {
-        if (resolvedPromise) {
-            return;
-        }
-
-        become(Q(value));
-    };
-
-    deferred.fulfill = function (value) {
-        if (resolvedPromise) {
-            return;
-        }
-
-        become(fulfill(value));
-    };
-    deferred.reject = function (reason) {
-        if (resolvedPromise) {
-            return;
-        }
-
-        become(reject(reason));
-    };
-    deferred.notify = function (progress) {
-        if (resolvedPromise) {
-            return;
-        }
-
-        array_reduce(progressListeners, function (undefined, progressListener) {
-            Q.nextTick(function () {
-                progressListener(progress);
-            });
-        }, void 0);
-    };
-
-    return deferred;
-}
-
-/**
- * Creates a Node-style callback that will resolve or reject the deferred
- * promise.
- * @returns a nodeback
- */
-defer.prototype.makeNodeResolver = function () {
-    var self = this;
-    return function (error, value) {
-        if (error) {
-            self.reject(error);
-        } else if (arguments.length > 2) {
-            self.resolve(array_slice(arguments, 1));
-        } else {
-            self.resolve(value);
-        }
-    };
-};
-
-/**
- * @param resolver {Function} a function that returns nothing and accepts
- * the resolve, reject, and notify functions for a deferred.
- * @returns a promise that may be resolved with the given resolve and reject
- * functions, or rejected by a thrown exception in resolver
- */
-Q.Promise = promise; // ES6
-Q.promise = promise;
-function promise(resolver) {
-    if (typeof resolver !== "function") {
-        throw new TypeError("resolver must be a function.");
-    }
-    var deferred = defer();
-    try {
-        resolver(deferred.resolve, deferred.reject, deferred.notify);
-    } catch (reason) {
-        deferred.reject(reason);
-    }
-    return deferred.promise;
-}
-
-promise.race = race; // ES6
-promise.all = all; // ES6
-promise.reject = reject; // ES6
-promise.resolve = Q; // ES6
-
-// XXX experimental.  This method is a way to denote that a local value is
-// serializable and should be immediately dispatched to a remote upon request,
-// instead of passing a reference.
-Q.passByCopy = function (object) {
-    //freeze(object);
-    //passByCopies.set(object, true);
-    return object;
-};
-
-Promise.prototype.passByCopy = function () {
-    //freeze(object);
-    //passByCopies.set(object, true);
-    return this;
-};
-
-/**
- * If two promises eventually fulfill to the same value, promises that value,
- * but otherwise rejects.
- * @param x {Any*}
- * @param y {Any*}
- * @returns {Any*} a promise for x and y if they are the same, but a rejection
- * otherwise.
- *
- */
-Q.join = function (x, y) {
-    return Q(x).join(y);
-};
-
-Promise.prototype.join = function (that) {
-    return Q([this, that]).spread(function (x, y) {
-        if (x === y) {
-            // TODO: "===" should be Object.is or equiv
-            return x;
-        } else {
-            throw new Error("Can't join: not the same: " + x + " " + y);
-        }
-    });
-};
-
-/**
- * Returns a promise for the first of an array of promises to become settled.
- * @param answers {Array[Any*]} promises to race
- * @returns {Any*} the first promise to be settled
- */
-Q.race = race;
-function race(answerPs) {
-    return promise(function (resolve, reject) {
-        // Switch to this once we can assume at least ES5
-        // answerPs.forEach(function (answerP) {
-        //     Q(answerP).then(resolve, reject);
-        // });
-        // Use this in the meantime
-        for (var i = 0, len = answerPs.length; i < len; i++) {
-            Q(answerPs[i]).then(resolve, reject);
-        }
-    });
-}
-
-Promise.prototype.race = function () {
-    return this.then(Q.race);
-};
-
-/**
- * Constructs a Promise with a promise descriptor object and optional fallback
- * function.  The descriptor contains methods like when(rejected), get(name),
- * set(name, value), post(name, args), and delete(name), which all
- * return either a value, a promise for a value, or a rejection.  The fallback
- * accepts the operation name, a resolver, and any further arguments that would
- * have been forwarded to the appropriate method above had a method been
- * provided with the proper name.  The API makes no guarantees about the nature
- * of the returned object, apart from that it is usable whereever promises are
- * bought and sold.
- */
-Q.makePromise = Promise;
-function Promise(descriptor, fallback, inspect) {
-    if (fallback === void 0) {
-        fallback = function (op) {
-            return reject(new Error(
-                "Promise does not support operation: " + op
-            ));
-        };
-    }
-    if (inspect === void 0) {
-        inspect = function () {
-            return {state: "unknown"};
-        };
-    }
-
-    var promise = object_create(Promise.prototype);
-
-    promise.promiseDispatch = function (resolve, op, args) {
-        var result;
-        try {
-            if (descriptor[op]) {
-                result = descriptor[op].apply(promise, args);
-            } else {
-                result = fallback.call(promise, op, args);
-            }
-        } catch (exception) {
-            result = reject(exception);
-        }
-        if (resolve) {
-            resolve(result);
-        }
-    };
-
-    promise.inspect = inspect;
-
-    // XXX deprecated `valueOf` and `exception` support
-    if (inspect) {
-        var inspected = inspect();
-        if (inspected.state === "rejected") {
-            promise.exception = inspected.reason;
-        }
-
-        promise.valueOf = function () {
-            var inspected = inspect();
-            if (inspected.state === "pending" ||
-                inspected.state === "rejected") {
-                return promise;
-            }
-            return inspected.value;
-        };
-    }
-
-    return promise;
-}
-
-Promise.prototype.toString = function () {
-    return "[object Promise]";
-};
-
-Promise.prototype.then = function (fulfilled, rejected, progressed) {
-    var self = this;
-    var deferred = defer();
-    var done = false;   // ensure the untrusted promise makes at most a
-                        // single call to one of the callbacks
-
-    function _fulfilled(value) {
-        try {
-            return typeof fulfilled === "function" ? fulfilled(value) : value;
-        } catch (exception) {
-            return reject(exception);
-        }
-    }
-
-    function _rejected(exception) {
-        if (typeof rejected === "function") {
-            makeStackTraceLong(exception, self);
-            try {
-                return rejected(exception);
-            } catch (newException) {
-                return reject(newException);
-            }
-        }
-        return reject(exception);
-    }
-
-    function _progressed(value) {
-        return typeof progressed === "function" ? progressed(value) : value;
-    }
-
-    Q.nextTick(function () {
-        self.promiseDispatch(function (value) {
-            if (done) {
-                return;
-            }
-            done = true;
-
-            deferred.resolve(_fulfilled(value));
-        }, "when", [function (exception) {
-            if (done) {
-                return;
-            }
-            done = true;
-
-            deferred.resolve(_rejected(exception));
-        }]);
-    });
-
-    // Progress propagator need to be attached in the current tick.
-    self.promiseDispatch(void 0, "when", [void 0, function (value) {
-        var newValue;
-        var threw = false;
-        try {
-            newValue = _progressed(value);
-        } catch (e) {
-            threw = true;
-            if (Q.onerror) {
-                Q.onerror(e);
-            } else {
-                throw e;
-            }
-        }
-
-        if (!threw) {
-            deferred.notify(newValue);
-        }
-    }]);
-
-    return deferred.promise;
-};
-
-Q.tap = function (promise, callback) {
-    return Q(promise).tap(callback);
-};
-
-/**
- * Works almost like "finally", but not called for rejections.
- * Original resolution value is passed through callback unaffected.
- * Callback may return a promise that will be awaited for.
- * @param {Function} callback
- * @returns {Q.Promise}
- * @example
- * doSomething()
- *   .then(...)
- *   .tap(console.log)
- *   .then(...);
- */
-Promise.prototype.tap = function (callback) {
-    callback = Q(callback);
-
-    return this.then(function (value) {
-        return callback.fcall(value).thenResolve(value);
-    });
-};
-
-/**
- * Registers an observer on a promise.
- *
- * Guarantees:
- *
- * 1. that fulfilled and rejected will be called only once.
- * 2. that either the fulfilled callback or the rejected callback will be
- *    called, but not both.
- * 3. that fulfilled and rejected will not be called in this turn.
- *
- * @param value      promise or immediate reference to observe
- * @param fulfilled  function to be called with the fulfilled value
- * @param rejected   function to be called with the rejection exception
- * @param progressed function to be called on any progress notifications
- * @return promise for the return value from the invoked callback
- */
-Q.when = when;
-function when(value, fulfilled, rejected, progressed) {
-    return Q(value).then(fulfilled, rejected, progressed);
-}
-
-Promise.prototype.thenResolve = function (value) {
-    return this.then(function () { return value; });
-};
-
-Q.thenResolve = function (promise, value) {
-    return Q(promise).thenResolve(value);
-};
-
-Promise.prototype.thenReject = function (reason) {
-    return this.then(function () { throw reason; });
-};
-
-Q.thenReject = function (promise, reason) {
-    return Q(promise).thenReject(reason);
-};
-
-/**
- * If an object is not a promise, it is as "near" as possible.
- * If a promise is rejected, it is as "near" as possible too.
- * If it’s a fulfilled promise, the fulfillment value is nearer.
- * If it’s a deferred promise and the deferred has been resolved, the
- * resolution is "nearer".
- * @param object
- * @returns most resolved (nearest) form of the object
- */
-
-// XXX should we re-do this?
-Q.nearer = nearer;
-function nearer(value) {
-    if (isPromise(value)) {
-        var inspected = value.inspect();
-        if (inspected.state === "fulfilled") {
-            return inspected.value;
-        }
-    }
-    return value;
-}
-
-/**
- * @returns whether the given object is a promise.
- * Otherwise it is a fulfilled value.
- */
-Q.isPromise = isPromise;
-function isPromise(object) {
-    return object instanceof Promise;
-}
-
-Q.isPromiseAlike = isPromiseAlike;
-function isPromiseAlike(object) {
-    return isObject(object) && typeof object.then === "function";
-}
-
-/**
- * @returns whether the given object is a pending promise, meaning not
- * fulfilled or rejected.
- */
-Q.isPending = isPending;
-function isPending(object) {
-    return isPromise(object) && object.inspect().state === "pending";
-}
-
-Promise.prototype.isPending = function () {
-    return this.inspect().state === "pending";
-};
-
-/**
- * @returns whether the given object is a value or fulfilled
- * promise.
- */
-Q.isFulfilled = isFulfilled;
-function isFulfilled(object) {
-    return !isPromise(object) || object.inspect().state === "fulfilled";
-}
-
-Promise.prototype.isFulfilled = function () {
-    return this.inspect().state === "fulfilled";
-};
-
-/**
- * @returns whether the given object is a rejected promise.
- */
-Q.isRejected = isRejected;
-function isRejected(object) {
-    return isPromise(object) && object.inspect().state === "rejected";
-}
-
-Promise.prototype.isRejected = function () {
-    return this.inspect().state === "rejected";
-};
-
-//// BEGIN UNHANDLED REJECTION TRACKING
-
-// This promise library consumes exceptions thrown in handlers so they can be
-// handled by a subsequent promise.  The exceptions get added to this array when
-// they are created, and removed when they are handled.  Note that in ES6 or
-// shimmed environments, this would naturally be a `Set`.
-var unhandledReasons = [];
-var unhandledRejections = [];
-var reportedUnhandledRejections = [];
-var trackUnhandledRejections = true;
-
-function resetUnhandledRejections() {
-    unhandledReasons.length = 0;
-    unhandledRejections.length = 0;
-
-    if (!trackUnhandledRejections) {
-        trackUnhandledRejections = true;
-    }
-}
-
-function trackRejection(promise, reason) {
-    if (!trackUnhandledRejections) {
-        return;
-    }
-    if (typeof process === "object" && typeof process.emit === "function") {
-        Q.nextTick.runAfter(function () {
-            if (array_indexOf(unhandledRejections, promise) !== -1) {
-                process.emit("unhandledRejection", reason, promise);
-                reportedUnhandledRejections.push(promise);
-            }
-        });
-    }
-
-    unhandledRejections.push(promise);
-    if (reason && typeof reason.stack !== "undefined") {
-        unhandledReasons.push(reason.stack);
-    } else {
-        unhandledReasons.push("(no stack) " + reason);
-    }
-}
-
-function untrackRejection(promise) {
-    if (!trackUnhandledRejections) {
-        return;
-    }
-
-    var at = array_indexOf(unhandledRejections, promise);
-    if (at !== -1) {
-        if (typeof process === "object" && typeof process.emit === "function") {
-            Q.nextTick.runAfter(function () {
-                var atReport = array_indexOf(reportedUnhandledRejections, promise);
-                if (atReport !== -1) {
-                    process.emit("rejectionHandled", unhandledReasons[at], promise);
-                    reportedUnhandledRejections.splice(atReport, 1);
-                }
-            });
-        }
-        unhandledRejections.splice(at, 1);
-        unhandledReasons.splice(at, 1);
-    }
-}
-
-Q.resetUnhandledRejections = resetUnhandledRejections;
-
-Q.getUnhandledReasons = function () {
-    // Make a copy so that consumers can't interfere with our internal state.
-    return unhandledReasons.slice();
-};
-
-Q.stopUnhandledRejectionTracking = function () {
-    resetUnhandledRejections();
-    trackUnhandledRejections = false;
-};
-
-resetUnhandledRejections();
-
-//// END UNHANDLED REJECTION TRACKING
-
-/**
- * Constructs a rejected promise.
- * @param reason value describing the failure
- */
-Q.reject = reject;
-function reject(reason) {
-    var rejection = Promise({
-        "when": function (rejected) {
-            // note that the error has been handled
-            if (rejected) {
-                untrackRejection(this);
-            }
-            return rejected ? rejected(reason) : this;
-        }
-    }, function fallback() {
-        return this;
-    }, function inspect() {
-        return { state: "rejected", reason: reason };
-    });
-
-    // Note that the reason has not been handled.
-    trackRejection(rejection, reason);
-
-    return rejection;
-}
-
-/**
- * Constructs a fulfilled promise for an immediate reference.
- * @param value immediate reference
- */
-Q.fulfill = fulfill;
-function fulfill(value) {
-    return Promise({
-        "when": function () {
-            return value;
-        },
-        "get": function (name) {
-            return value[name];
-        },
-        "set": function (name, rhs) {
-            value[name] = rhs;
-        },
-        "delete": function (name) {
-            delete value[name];
-        },
-        "post": function (name, args) {
-            // Mark Miller proposes that post with no name should apply a
-            // promised function.
-            if (name === null || name === void 0) {
-                return value.apply(void 0, args);
-            } else {
-                return value[name].apply(value, args);
-            }
-        },
-        "apply": function (thisp, args) {
-            return value.apply(thisp, args);
-        },
-        "keys": function () {
-            return object_keys(value);
-        }
-    }, void 0, function inspect() {
-        return { state: "fulfilled", value: value };
-    });
-}
-
-/**
- * Converts thenables to Q promises.
- * @param promise thenable promise
- * @returns a Q promise
- */
-function coerce(promise) {
-    var deferred = defer();
-    Q.nextTick(function () {
-        try {
-            promise.then(deferred.resolve, deferred.reject, deferred.notify);
-        } catch (exception) {
-            deferred.reject(exception);
-        }
-    });
-    return deferred.promise;
-}
-
-/**
- * Annotates an object such that it will never be
- * transferred away from this process over any promise
- * communication channel.
- * @param object
- * @returns promise a wrapping of that object that
- * additionally responds to the "isDef" message
- * without a rejection.
- */
-Q.master = master;
-function master(object) {
-    return Promise({
-        "isDef": function () {}
-    }, function fallback(op, args) {
-        return dispatch(object, op, args);
-    }, function () {
-        return Q(object).inspect();
-    });
-}
-
-/**
- * Spreads the values of a promised array of arguments into the
- * fulfillment callback.
- * @param fulfilled callback that receives variadic arguments from the
- * promised array
- * @param rejected callback that receives the exception if the promise
- * is rejected.
- * @returns a promise for the return value or thrown exception of
- * either callback.
- */
-Q.spread = spread;
-function spread(value, fulfilled, rejected) {
-    return Q(value).spread(fulfilled, rejected);
-}
-
-Promise.prototype.spread = function (fulfilled, rejected) {
-    return this.all().then(function (array) {
-        return fulfilled.apply(void 0, array);
-    }, rejected);
-};
-
-/**
- * The async function is a decorator for generator functions, turning
- * them into asynchronous generators.  Although generators are only part
- * of the newest ECMAScript 6 drafts, this code does not cause syntax
- * errors in older engines.  This code should continue to work and will
- * in fact improve over time as the language improves.
- *
- * ES6 generators are currently part of V8 version 3.19 with the
- * --harmony-generators runtime flag enabled.  SpiderMonkey has had them
- * for longer, but under an older Python-inspired form.  This function
- * works on both kinds of generators.
- *
- * Decorates a generator function such that:
- *  - it may yield promises
- *  - execution will continue when that promise is fulfilled
- *  - the value of the yield expression will be the fulfilled value
- *  - it returns a promise for the return value (when the generator
- *    stops iterating)
- *  - the decorated function returns a promise for the return value
- *    of the generator or the first rejected promise among those
- *    yielded.
- *  - if an error is thrown in the generator, it propagates through
- *    every following yield until it is caught, or until it escapes
- *    the generator function altogether, and is translated into a
- *    rejection for the promise returned by the decorated generator.
- */
-Q.async = async;
-function async(makeGenerator) {
-    return function () {
-        // when verb is "send", arg is a value
-        // when verb is "throw", arg is an exception
-        function continuer(verb, arg) {
-            var result;
-
-            // Until V8 3.19 / Chromium 29 is released, SpiderMonkey is the only
-            // engine that has a deployed base of browsers that support generators.
-            // However, SM's generators use the Python-inspired semantics of
-            // outdated ES6 drafts.  We would like to support ES6, but we'd also
-            // like to make it possible to use generators in deployed browsers, so
-            // we also support Python-style generators.  At some point we can remove
-            // this block.
-
-            if (typeof StopIteration === "undefined") {
-                // ES6 Generators
-                try {
-                    result = generator[verb](arg);
-                } catch (exception) {
-                    return reject(exception);
-                }
-                if (result.done) {
-                    return Q(result.value);
-                } else {
-                    return when(result.value, callback, errback);
-                }
-            } else {
-                // SpiderMonkey Generators
-                // FIXME: Remove this case when SM does ES6 generators.
-                try {
-                    result = generator[verb](arg);
-                } catch (exception) {
-                    if (isStopIteration(exception)) {
-                        return Q(exception.value);
-                    } else {
-                        return reject(exception);
-                    }
-                }
-                return when(result, callback, errback);
-            }
-        }
-        var generator = makeGenerator.apply(this, arguments);
-        var callback = continuer.bind(continuer, "next");
-        var errback = continuer.bind(continuer, "throw");
-        return callback();
-    };
-}
-
-/**
- * The spawn function is a small wrapper around async that immediately
- * calls the generator and also ends the promise chain, so that any
- * unhandled errors are thrown instead of forwarded to the error
- * handler. This is useful because it's extremely common to run
- * generators at the top-level to work with libraries.
- */
-Q.spawn = spawn;
-function spawn(makeGenerator) {
-    Q.done(Q.async(makeGenerator)());
-}
-
-// FIXME: Remove this interface once ES6 generators are in SpiderMonkey.
-/**
- * Throws a ReturnValue exception to stop an asynchronous generator.
- *
- * This interface is a stop-gap measure to support generator return
- * values in older Firefox/SpiderMonkey.  In browsers that support ES6
- * generators like Chromium 29, just use "return" in your generator
- * functions.
- *
- * @param value the return value for the surrounding generator
- * @throws ReturnValue exception with the value.
- * @example
- * // ES6 style
- * Q.async(function* () {
- *      var foo = yield getFooPromise();
- *      var bar = yield getBarPromise();
- *      return foo + bar;
- * })
- * // Older SpiderMonkey style
- * Q.async(function () {
- *      var foo = yield getFooPromise();
- *      var bar = yield getBarPromise();
- *      Q.return(foo + bar);
- * })
- */
-Q["return"] = _return;
-function _return(value) {
-    throw new QReturnValue(value);
-}
-
-/**
- * The promised function decorator ensures that any promise arguments
- * are settled and passed as values (`this` is also settled and passed
- * as a value).  It will also ensure that the result of a function is
- * always a promise.
- *
- * @example
- * var add = Q.promised(function (a, b) {
- *     return a + b;
- * });
- * add(Q(a), Q(B));
- *
- * @param {function} callback The function to decorate
- * @returns {function} a function that has been decorated.
- */
-Q.promised = promised;
-function promised(callback) {
-    return function () {
-        return spread([this, all(arguments)], function (self, args) {
-            return callback.apply(self, args);
-        });
-    };
-}
-
-/**
- * sends a message to a value in a future turn
- * @param object* the recipient
- * @param op the name of the message operation, e.g., "when",
- * @param args further arguments to be forwarded to the operation
- * @returns result {Promise} a promise for the result of the operation
- */
-Q.dispatch = dispatch;
-function dispatch(object, op, args) {
-    return Q(object).dispatch(op, args);
-}
-
-Promise.prototype.dispatch = function (op, args) {
-    var self = this;
-    var deferred = defer();
-    Q.nextTick(function () {
-        self.promiseDispatch(deferred.resolve, op, args);
-    });
-    return deferred.promise;
-};
-
-/**
- * Gets the value of a property in a future turn.
- * @param object    promise or immediate reference for target object
- * @param name      name of property to get
- * @return promise for the property value
- */
-Q.get = function (object, key) {
-    return Q(object).dispatch("get", [key]);
-};
-
-Promise.prototype.get = function (key) {
-    return this.dispatch("get", [key]);
-};
-
-/**
- * Sets the value of a property in a future turn.
- * @param object    promise or immediate reference for object object
- * @param name      name of property to set
- * @param value     new value of property
- * @return promise for the return value
- */
-Q.set = function (object, key, value) {
-    return Q(object).dispatch("set", [key, value]);
-};
-
-Promise.prototype.set = function (key, value) {
-    return this.dispatch("set", [key, value]);
-};
-
-/**
- * Deletes a property in a future turn.
- * @param object    promise or immediate reference for target object
- * @param name      name of property to delete
- * @return promise for the return value
- */
-Q.del = // XXX legacy
-Q["delete"] = function (object, key) {
-    return Q(object).dispatch("delete", [key]);
-};
-
-Promise.prototype.del = // XXX legacy
-Promise.prototype["delete"] = function (key) {
-    return this.dispatch("delete", [key]);
-};
-
-/**
- * Invokes a method in a future turn.
- * @param object    promise or immediate reference for target object
- * @param name      name of method to invoke
- * @param value     a value to post, typically an array of
- *                  invocation arguments for promises that
- *                  are ultimately backed with `resolve` values,
- *                  as opposed to those backed with URLs
- *                  wherein the posted value can be any
- *                  JSON serializable object.
- * @return promise for the return value
- */
-// bound locally because it is used by other methods
-Q.mapply = // XXX As proposed by "Redsandro"
-Q.post = function (object, name, args) {
-    return Q(object).dispatch("post", [name, args]);
-};
-
-Promise.prototype.mapply = // XXX As proposed by "Redsandro"
-Promise.prototype.post = function (name, args) {
-    return this.dispatch("post", [name, args]);
-};
-
-/**
- * Invokes a method in a future turn.
- * @param object    promise or immediate reference for target object
- * @param name      name of method to invoke
- * @param ...args   array of invocation arguments
- * @return promise for the return value
- */
-Q.send = // XXX Mark Miller's proposed parlance
-Q.mcall = // XXX As proposed by "Redsandro"
-Q.invoke = function (object, name /*...args*/) {
-    return Q(object).dispatch("post", [name, array_slice(arguments, 2)]);
-};
-
-Promise.prototype.send = // XXX Mark Miller's proposed parlance
-Promise.prototype.mcall = // XXX As proposed by "Redsandro"
-Promise.prototype.invoke = function (name /*...args*/) {
-    return this.dispatch("post", [name, array_slice(arguments, 1)]);
-};
-
-/**
- * Applies the promised function in a future turn.
- * @param object    promise or immediate reference for target function
- * @param args      array of application arguments
- */
-Q.fapply = function (object, args) {
-    return Q(object).dispatch("apply", [void 0, args]);
-};
-
-Promise.prototype.fapply = function (args) {
-    return this.dispatch("apply", [void 0, args]);
-};
-
-/**
- * Calls the promised function in a future turn.
- * @param object    promise or immediate reference for target function
- * @param ...args   array of application arguments
- */
-Q["try"] =
-Q.fcall = function (object /* ...args*/) {
-    return Q(object).dispatch("apply", [void 0, array_slice(arguments, 1)]);
-};
-
-Promise.prototype.fcall = function (/*...args*/) {
-    return this.dispatch("apply", [void 0, array_slice(arguments)]);
-};
-
-/**
- * Binds the promised function, transforming return values into a fulfilled
- * promise and thrown errors into a rejected one.
- * @param object    promise or immediate reference for target function
- * @param ...args   array of application arguments
- */
-Q.fbind = function (object /*...args*/) {
-    var promise = Q(object);
-    var args = array_slice(arguments, 1);
-    return function fbound() {
-        return promise.dispatch("apply", [
-            this,
-            args.concat(array_slice(arguments))
-        ]);
-    };
-};
-Promise.prototype.fbind = function (/*...args*/) {
-    var promise = this;
-    var args = array_slice(arguments);
-    return function fbound() {
-        return promise.dispatch("apply", [
-            this,
-            args.concat(array_slice(arguments))
-        ]);
-    };
-};
-
-/**
- * Requests the names of the owned properties of a promised
- * object in a future turn.
- * @param object    promise or immediate reference for target object
- * @return promise for the keys of the eventually settled object
- */
-Q.keys = function (object) {
-    return Q(object).dispatch("keys", []);
-};
-
-Promise.prototype.keys = function () {
-    return this.dispatch("keys", []);
-};
-
-/**
- * Turns an array of promises into a promise for an array.  If any of
- * the promises gets rejected, the whole array is rejected immediately.
- * @param {Array*} an array (or promise for an array) of values (or
- * promises for values)
- * @returns a promise for an array of the corresponding values
- */
-// By Mark Miller
-// http://wiki.ecmascript.org/doku.php?id=strawman:concurrency&rev=1308776521#allfulfilled
-Q.all = all;
-function all(promises) {
-    return when(promises, function (promises) {
-        var pendingCount = 0;
-        var deferred = defer();
-        array_reduce(promises, function (undefined, promise, index) {
-            var snapshot;
-            if (
-                isPromise(promise) &&
-                (snapshot = promise.inspect()).state === "fulfilled"
-            ) {
-                promises[index] = snapshot.value;
-            } else {
-                ++pendingCount;
-                when(
-                    promise,
-                    function (value) {
-                        promises[index] = value;
-                        if (--pendingCount === 0) {
-                            deferred.resolve(promises);
-                        }
-                    },
-                    deferred.reject,
-                    function (progress) {
-                        deferred.notify({ index: index, value: progress });
-                    }
-                );
-            }
-        }, void 0);
-        if (pendingCount === 0) {
-            deferred.resolve(promises);
-        }
-        return deferred.promise;
-    });
-}
-
-Promise.prototype.all = function () {
-    return all(this);
-};
-
-/**
- * Returns the first resolved promise of an array. Prior rejected promises are
- * ignored.  Rejects only if all promises are rejected.
- * @param {Array*} an array containing values or promises for values
- * @returns a promise fulfilled with the value of the first resolved promise,
- * or a rejected promise if all promises are rejected.
- */
-Q.any = any;
-
-function any(promises) {
-    if (promises.length === 0) {
-        return Q.resolve();
-    }
-
-    var deferred = Q.defer();
-    var pendingCount = 0;
-    array_reduce(promises, function (prev, current, index) {
-        var promise = promises[index];
-
-        pendingCount++;
-
-        when(promise, onFulfilled, onRejected, onProgress);
-        function onFulfilled(result) {
-            deferred.resolve(result);
-        }
-        function onRejected() {
-            pendingCount--;
-            if (pendingCount === 0) {
-                deferred.reject(new Error(
-                    "Can't get fulfillment value from any promise, all " +
-                    "promises were rejected."
-                ));
-            }
-        }
-        function onProgress(progress) {
-            deferred.notify({
-                index: index,
-                value: progress
-            });
-        }
-    }, undefined);
-
-    return deferred.promise;
-}
-
-Promise.prototype.any = function () {
-    return any(this);
-};
-
-/**
- * Waits for all promises to be settled, either fulfilled or
- * rejected.  This is distinct from `all` since that would stop
- * waiting at the first rejection.  The promise returned by
- * `allResolved` will never be rejected.
- * @param promises a promise for an array (or an array) of promises
- * (or values)
- * @return a promise for an array of promises
- */
-Q.allResolved = deprecate(allResolved, "allResolved", "allSettled");
-function allResolved(promises) {
-    return when(promises, function (promises) {
-        promises = array_map(promises, Q);
-        return when(all(array_map(promises, function (promise) {
-            return when(promise, noop, noop);
-        })), function () {
-            return promises;
-        });
-    });
-}
-
-Promise.prototype.allResolved = function () {
-    return allResolved(this);
-};
-
-/**
- * @see Promise#allSettled
- */
-Q.allSettled = allSettled;
-function allSettled(promises) {
-    return Q(promises).allSettled();
-}
-
-/**
- * Turns an array of promises into a promise for an array of their states (as
- * returned by `inspect`) when they have all settled.
- * @param {Array[Any*]} values an array (or promise for an array) of values (or
- * promises for values)
- * @returns {Array[State]} an array of states for the respective values.
- */
-Promise.prototype.allSettled = function () {
-    return this.then(function (promises) {
-        return all(array_map(promises, function (promise) {
-            promise = Q(promise);
-            function regardless() {
-                return promise.inspect();
-            }
-            return promise.then(regardless, regardless);
-        }));
-    });
-};
-
-/**
- * Captures the failure of a promise, giving an oportunity to recover
- * with a callback.  If the given promise is fulfilled, the returned
- * promise is fulfilled.
- * @param {Any*} promise for something
- * @param {Function} callback to fulfill the returned promise if the
- * given promise is rejected
- * @returns a promise for the return value of the callback
- */
-Q.fail = // XXX legacy
-Q["catch"] = function (object, rejected) {
-    return Q(object).then(void 0, rejected);
-};
-
-Promise.prototype.fail = // XXX legacy
-Promise.prototype["catch"] = function (rejected) {
-    return this.then(void 0, rejected);
-};
-
-/**
- * Attaches a listener that can respond to progress notifications from a
- * promise's originating deferred. This listener receives the exact arguments
- * passed to ``deferred.notify``.
- * @param {Any*} promise for something
- * @param {Function} callback to receive any progress notifications
- * @returns the given promise, unchanged
- */
-Q.progress = progress;
-function progress(object, progressed) {
-    return Q(object).then(void 0, void 0, progressed);
-}
-
-Promise.prototype.progress = function (progressed) {
-    return this.then(void 0, void 0, progressed);
-};
-
-/**
- * Provides an opportunity to observe the settling of a promise,
- * regardless of whether the promise is fulfilled or rejected.  Forwards
- * the resolution to the returned promise when the callback is done.
- * The callback can return a promise to defer completion.
- * @param {Any*} promise
- * @param {Function} callback to observe the resolution of the given
- * promise, takes no arguments.
- * @returns a promise for the resolution of the given promise when
- * ``fin`` is done.
- */
-Q.fin = // XXX legacy
-Q["finally"] = function (object, callback) {
-    return Q(object)["finally"](callback);
-};
-
-Promise.prototype.fin = // XXX legacy
-Promise.prototype["finally"] = function (callback) {
-    callback = Q(callback);
-    return this.then(function (value) {
-        return callback.fcall().then(function () {
-            return value;
-        });
-    }, function (reason) {
-        // TODO attempt to recycle the rejection with "this".
-        return callback.fcall().then(function () {
-            throw reason;
-        });
-    });
-};
-
-/**
- * Terminates a chain of promises, forcing rejections to be
- * thrown as exceptions.
- * @param {Any*} promise at the end of a chain of promises
- * @returns nothing
- */
-Q.done = function (object, fulfilled, rejected, progress) {
-    return Q(object).done(fulfilled, rejected, progress);
-};
-
-Promise.prototype.done = function (fulfilled, rejected, progress) {
-    var onUnhandledError = function (error) {
-        // forward to a future turn so that ``when``
-        // does not catch it and turn it into a rejection.
-        Q.nextTick(function () {
-            makeStackTraceLong(error, promise);
-            if (Q.onerror) {
-                Q.onerror(error);
-            } else {
-                throw error;
-            }
-        });
-    };
-
-    // Avoid unnecessary `nextTick`ing via an unnecessary `when`.
-    var promise = fulfilled || rejected || progress ?
-        this.then(fulfilled, rejected, progress) :
-        this;
-
-    if (typeof process === "object" && process && process.domain) {
-        onUnhandledError = process.domain.bind(onUnhandledError);
-    }
-
-    promise.then(void 0, onUnhandledError);
-};
-
-/**
- * Causes a promise to be rejected if it does not get fulfilled before
- * some milliseconds time out.
- * @param {Any*} promise
- * @param {Number} milliseconds timeout
- * @param {Any*} custom error message or Error object (optional)
- * @returns a promise for the resolution of the given promise if it is
- * fulfilled before the timeout, otherwise rejected.
- */
-Q.timeout = function (object, ms, error) {
-    return Q(object).timeout(ms, error);
-};
-
-Promise.prototype.timeout = function (ms, error) {
-    var deferred = defer();
-    var timeoutId = setTimeout(function () {
-        if (!error || "string" === typeof error) {
-            error = new Error(error || "Timed out after " + ms + " ms");
-            error.code = "ETIMEDOUT";
-        }
-        deferred.reject(error);
-    }, ms);
-
-    this.then(function (value) {
-        clearTimeout(timeoutId);
-        deferred.resolve(value);
-    }, function (exception) {
-        clearTimeout(timeoutId);
-        deferred.reject(exception);
-    }, deferred.notify);
-
-    return deferred.promise;
-};
-
-/**
- * Returns a promise for the given value (or promised value), some
- * milliseconds after it resolved. Passes rejections immediately.
- * @param {Any*} promise
- * @param {Number} milliseconds
- * @returns a promise for the resolution of the given promise after milliseconds
- * time has elapsed since the resolution of the given promise.
- * If the given promise rejects, that is passed immediately.
- */
-Q.delay = function (object, timeout) {
-    if (timeout === void 0) {
-        timeout = object;
-        object = void 0;
-    }
-    return Q(object).delay(timeout);
-};
-
-Promise.prototype.delay = function (timeout) {
-    return this.then(function (value) {
-        var deferred = defer();
-        setTimeout(function () {
-            deferred.resolve(value);
-        }, timeout);
-        return deferred.promise;
-    });
-};
-
-/**
- * Passes a continuation to a Node function, which is called with the given
- * arguments provided as an array, and returns a promise.
- *
- *      Q.nfapply(FS.readFile, [__filename])
- *      .then(function (content) {
- *      })
- *
- */
-Q.nfapply = function (callback, args) {
-    return Q(callback).nfapply(args);
-};
-
-Promise.prototype.nfapply = function (args) {
-    var deferred = defer();
-    var nodeArgs = array_slice(args);
-    nodeArgs.push(deferred.makeNodeResolver());
-    this.fapply(nodeArgs).fail(deferred.reject);
-    return deferred.promise;
-};
-
-/**
- * Passes a continuation to a Node function, which is called with the given
- * arguments provided individually, and returns a promise.
- * @example
- * Q.nfcall(FS.readFile, __filename)
- * .then(function (content) {
- * })
- *
- */
-Q.nfcall = function (callback /*...args*/) {
-    var args = array_slice(arguments, 1);
-    return Q(callback).nfapply(args);
-};
-
-Promise.prototype.nfcall = function (/*...args*/) {
-    var nodeArgs = array_slice(arguments);
-    var deferred = defer();
-    nodeArgs.push(deferred.makeNodeResolver());
-    this.fapply(nodeArgs).fail(deferred.reject);
-    return deferred.promise;
-};
-
-/**
- * Wraps a NodeJS continuation passing function and returns an equivalent
- * version that returns a promise.
- * @example
- * Q.nfbind(FS.readFile, __filename)("utf-8")
- * .then(console.log)
- * .done()
- */
-Q.nfbind =
-Q.denodeify = function (callback /*...args*/) {
-    var baseArgs = array_slice(arguments, 1);
-    return function () {
-        var nodeArgs = baseArgs.concat(array_slice(arguments));
-        var deferred = defer();
-        nodeArgs.push(deferred.makeNodeResolver());
-        Q(callback).fapply(nodeArgs).fail(deferred.reject);
-        return deferred.promise;
-    };
-};
-
-Promise.prototype.nfbind =
-Promise.prototype.denodeify = function (/*...args*/) {
-    var args = array_slice(arguments);
-    args.unshift(this);
-    return Q.denodeify.apply(void 0, args);
-};
-
-Q.nbind = function (callback, thisp /*...args*/) {
-    var baseArgs = array_slice(arguments, 2);
-    return function () {
-        var nodeArgs = baseArgs.concat(array_slice(arguments));
-        var deferred = defer();
-        nodeArgs.push(deferred.makeNodeResolver());
-        function bound() {
-            return callback.apply(thisp, arguments);
-        }
-        Q(bound).fapply(nodeArgs).fail(deferred.reject);
-        return deferred.promise;
-    };
-};
-
-Promise.prototype.nbind = function (/*thisp, ...args*/) {
-    var args = array_slice(arguments, 0);
-    args.unshift(this);
-    return Q.nbind.apply(void 0, args);
-};
-
-/**
- * Calls a method of a Node-style object that accepts a Node-style
- * callback with a given array of arguments, plus a provided callback.
- * @param object an object that has the named method
- * @param {String} name name of the method of object
- * @param {Array} args arguments to pass to the method; the callback
- * will be provided by Q and appended to these arguments.
- * @returns a promise for the value or error
- */
-Q.nmapply = // XXX As proposed by "Redsandro"
-Q.npost = function (object, name, args) {
-    return Q(object).npost(name, args);
-};
-
-Promise.prototype.nmapply = // XXX As proposed by "Redsandro"
-Promise.prototype.npost = function (name, args) {
-    var nodeArgs = array_slice(args || []);
-    var deferred = defer();
-    nodeArgs.push(deferred.makeNodeResolver());
-    this.dispatch("post", [name, nodeArgs]).fail(deferred.reject);
-    return deferred.promise;
-};
-
-/**
- * Calls a method of a Node-style object that accepts a Node-style
- * callback, forwarding the given variadic arguments, plus a provided
- * callback argument.
- * @param object an object that has the named method
- * @param {String} name name of the method of object
- * @param ...args arguments to pass to the method; the callback will
- * be provided by Q and appended to these arguments.
- * @returns a promise for the value or error
- */
-Q.nsend = // XXX Based on Mark Miller's proposed "send"
-Q.nmcall = // XXX Based on "Redsandro's" proposal
-Q.ninvoke = function (object, name /*...args*/) {
-    var nodeArgs = array_slice(arguments, 2);
-    var deferred = defer();
-    nodeArgs.push(deferred.makeNodeResolver());
-    Q(object).dispatch("post", [name, nodeArgs]).fail(deferred.reject);
-    return deferred.promise;
-};
-
-Promise.prototype.nsend = // XXX Based on Mark Miller's proposed "send"
-Promise.prototype.nmcall = // XXX Based on "Redsandro's" proposal
-Promise.prototype.ninvoke = function (name /*...args*/) {
-    var nodeArgs = array_slice(arguments, 1);
-    var deferred = defer();
-    nodeArgs.push(deferred.makeNodeResolver());
-    this.dispatch("post", [name, nodeArgs]).fail(deferred.reject);
-    return deferred.promise;
-};
-
-/**
- * If a function would like to support both Node continuation-passing-style and
- * promise-returning-style, it can end its internal promise chain with
- * `nodeify(nodeback)`, forwarding the optional nodeback argument.  If the user
- * elects to use a nodeback, the result will be sent there.  If they do not
- * pass a nodeback, they will receive the result promise.
- * @param object a result (or a promise for a result)
- * @param {Function} nodeback a Node.js-style callback
- * @returns either the promise or nothing
- */
-Q.nodeify = nodeify;
-function nodeify(object, nodeback) {
-    return Q(object).nodeify(nodeback);
-}
-
-Promise.prototype.nodeify = function (nodeback) {
-    if (nodeback) {
-        this.then(function (value) {
-            Q.nextTick(function () {
-                nodeback(null, value);
-            });
-        }, function (error) {
-            Q.nextTick(function () {
-                nodeback(error);
-            });
-        });
-    } else {
-        return this;
-    }
-};
-
-Q.noConflict = function() {
-    throw new Error("Q.noConflict only works when Q is used as a global");
-};
-
-// All code before this point will be filtered from stack traces.
-var qEndingLine = captureLine();
-
-return Q;
-
-});
diff --git a/bin/node_modules/cordova-common/node_modules/q/queue.js b/bin/node_modules/cordova-common/node_modules/q/queue.js
deleted file mode 100644
index 1505fd0..0000000
--- a/bin/node_modules/cordova-common/node_modules/q/queue.js
+++ /dev/null
@@ -1,35 +0,0 @@
-
-var Q = require("./q");
-
-module.exports = Queue;
-function Queue() {
-    var ends = Q.defer();
-    var closed = Q.defer();
-    return {
-        put: function (value) {
-            var next = Q.defer();
-            ends.resolve({
-                head: value,
-                tail: next.promise
-            });
-            ends.resolve = next.resolve;
-        },
-        get: function () {
-            var result = ends.promise.get("head");
-            ends.promise = ends.promise.get("tail");
-            return result.fail(function (error) {
-                closed.resolve(error);
-                throw error;
-            });
-        },
-        closed: closed.promise,
-        close: function (error) {
-            error = error || new Error("Can't get value from closed queue");
-            var end = {head: Q.reject(error)};
-            end.tail = end;
-            ends.resolve(end);
-            return closed.promise;
-        }
-    };
-}
-
diff --git a/bin/node_modules/cordova-common/node_modules/semver/.npmignore b/bin/node_modules/cordova-common/node_modules/semver/.npmignore
deleted file mode 100644
index 534108e..0000000
--- a/bin/node_modules/cordova-common/node_modules/semver/.npmignore
+++ /dev/null
@@ -1,4 +0,0 @@
-node_modules/
-coverage/
-.nyc_output/
-nyc_output/
diff --git a/bin/node_modules/cordova-common/node_modules/semver/.travis.yml b/bin/node_modules/cordova-common/node_modules/semver/.travis.yml
deleted file mode 100644
index 991d04b..0000000
--- a/bin/node_modules/cordova-common/node_modules/semver/.travis.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-language: node_js
-node_js:
-  - '0.10'
-  - '0.12'
-  - 'iojs'
diff --git a/bin/node_modules/cordova-common/node_modules/semver/LICENSE b/bin/node_modules/cordova-common/node_modules/semver/LICENSE
deleted file mode 100644
index 19129e3..0000000
--- a/bin/node_modules/cordova-common/node_modules/semver/LICENSE
+++ /dev/null
@@ -1,15 +0,0 @@
-The ISC License
-
-Copyright (c) Isaac Z. Schlueter and Contributors
-
-Permission to use, copy, modify, and/or distribute this software for any
-purpose with or without fee is hereby granted, provided that the above
-copyright notice and this permission notice appear in all copies.
-
-THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
-WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
-ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
-ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
-IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/bin/node_modules/cordova-common/node_modules/semver/README.md b/bin/node_modules/cordova-common/node_modules/semver/README.md
deleted file mode 100644
index b5e35ff..0000000
--- a/bin/node_modules/cordova-common/node_modules/semver/README.md
+++ /dev/null
@@ -1,303 +0,0 @@
-semver(1) -- The semantic versioner for npm
-===========================================
-
-## Usage
-
-    $ npm install semver
-
-    semver.valid('1.2.3') // '1.2.3'
-    semver.valid('a.b.c') // null
-    semver.clean('  =v1.2.3   ') // '1.2.3'
-    semver.satisfies('1.2.3', '1.x || >=2.5.0 || 5.0.0 - 7.2.3') // true
-    semver.gt('1.2.3', '9.8.7') // false
-    semver.lt('1.2.3', '9.8.7') // true
-
-As a command-line utility:
-
-    $ semver -h
-
-    Usage: semver <version> [<version> [...]] [-r <range> | -i <inc> | --preid <identifier> | -l | -rv]
-    Test if version(s) satisfy the supplied range(s), and sort them.
-
-    Multiple versions or ranges may be supplied, unless increment
-    option is specified.  In that case, only a single version may
-    be used, and it is incremented by the specified level
-
-    Program exits successfully if any valid version satisfies
-    all supplied ranges, and prints all satisfying versions.
-
-    If no versions are valid, or ranges are not satisfied,
-    then exits failure.
-
-    Versions are printed in ascending order, so supplying
-    multiple versions to the utility will just sort them.
-
-## Versions
-
-A "version" is described by the `v2.0.0` specification found at
-<http://semver.org/>.
-
-A leading `"="` or `"v"` character is stripped off and ignored.
-
-## Ranges
-
-A `version range` is a set of `comparators` which specify versions
-that satisfy the range.
-
-A `comparator` is composed of an `operator` and a `version`.  The set
-of primitive `operators` is:
-
-* `<` Less than
-* `<=` Less than or equal to
-* `>` Greater than
-* `>=` Greater than or equal to
-* `=` Equal.  If no operator is specified, then equality is assumed,
-  so this operator is optional, but MAY be included.
-
-For example, the comparator `>=1.2.7` would match the versions
-`1.2.7`, `1.2.8`, `2.5.3`, and `1.3.9`, but not the versions `1.2.6`
-or `1.1.0`.
-
-Comparators can be joined by whitespace to form a `comparator set`,
-which is satisfied by the **intersection** of all of the comparators
-it includes.
-
-A range is composed of one or more comparator sets, joined by `||`.  A
-version matches a range if and only if every comparator in at least
-one of the `||`-separated comparator sets is satisfied by the version.
-
-For example, the range `>=1.2.7 <1.3.0` would match the versions
-`1.2.7`, `1.2.8`, and `1.2.99`, but not the versions `1.2.6`, `1.3.0`,
-or `1.1.0`.
-
-The range `1.2.7 || >=1.2.9 <2.0.0` would match the versions `1.2.7`,
-`1.2.9`, and `1.4.6`, but not the versions `1.2.8` or `2.0.0`.
-
-### Prerelease Tags
-
-If a version has a prerelease tag (for example, `1.2.3-alpha.3`) then
-it will only be allowed to satisfy comparator sets if at least one
-comparator with the same `[major, minor, patch]` tuple also has a
-prerelease tag.
-
-For example, the range `>1.2.3-alpha.3` would be allowed to match the
-version `1.2.3-alpha.7`, but it would *not* be satisfied by
-`3.4.5-alpha.9`, even though `3.4.5-alpha.9` is technically "greater
-than" `1.2.3-alpha.3` according to the SemVer sort rules.  The version
-range only accepts prerelease tags on the `1.2.3` version.  The
-version `3.4.5` *would* satisfy the range, because it does not have a
-prerelease flag, and `3.4.5` is greater than `1.2.3-alpha.7`.
-
-The purpose for this behavior is twofold.  First, prerelease versions
-frequently are updated very quickly, and contain many breaking changes
-that are (by the author's design) not yet fit for public consumption.
-Therefore, by default, they are excluded from range matching
-semantics.
-
-Second, a user who has opted into using a prerelease version has
-clearly indicated the intent to use *that specific* set of
-alpha/beta/rc versions.  By including a prerelease tag in the range,
-the user is indicating that they are aware of the risk.  However, it
-is still not appropriate to assume that they have opted into taking a
-similar risk on the *next* set of prerelease versions.
-
-#### Prerelease Identifiers
-
-The method `.inc` takes an additional `identifier` string argument that
-will append the value of the string as a prerelease identifier:
-
-```javascript
-> semver.inc('1.2.3', 'pre', 'beta')
-'1.2.4-beta.0'
-```
-
-command-line example:
-
-```shell
-$ semver 1.2.3 -i prerelease --preid beta
-1.2.4-beta.0
-```
-
-Which then can be used to increment further:
-
-```shell
-$ semver 1.2.4-beta.0 -i prerelease
-1.2.4-beta.1
-```
-
-### Advanced Range Syntax
-
-Advanced range syntax desugars to primitive comparators in
-deterministic ways.
-
-Advanced ranges may be combined in the same way as primitive
-comparators using white space or `||`.
-
-#### Hyphen Ranges `X.Y.Z - A.B.C`
-
-Specifies an inclusive set.
-
-* `1.2.3 - 2.3.4` := `>=1.2.3 <=2.3.4`
-
-If a partial version is provided as the first version in the inclusive
-range, then the missing pieces are replaced with zeroes.
-
-* `1.2 - 2.3.4` := `>=1.2.0 <=2.3.4`
-
-If a partial version is provided as the second version in the
-inclusive range, then all versions that start with the supplied parts
-of the tuple are accepted, but nothing that would be greater than the
-provided tuple parts.
-
-* `1.2.3 - 2.3` := `>=1.2.3 <2.4.0`
-* `1.2.3 - 2` := `>=1.2.3 <3.0.0`
-
-#### X-Ranges `1.2.x` `1.X` `1.2.*` `*`
-
-Any of `X`, `x`, or `*` may be used to "stand in" for one of the
-numeric values in the `[major, minor, patch]` tuple.
-
-* `*` := `>=0.0.0` (Any version satisfies)
-* `1.x` := `>=1.0.0 <2.0.0` (Matching major version)
-* `1.2.x` := `>=1.2.0 <1.3.0` (Matching major and minor versions)
-
-A partial version range is treated as an X-Range, so the special
-character is in fact optional.
-
-* `""` (empty string) := `*` := `>=0.0.0`
-* `1` := `1.x.x` := `>=1.0.0 <2.0.0`
-* `1.2` := `1.2.x` := `>=1.2.0 <1.3.0`
-
-#### Tilde Ranges `~1.2.3` `~1.2` `~1`
-
-Allows patch-level changes if a minor version is specified on the
-comparator.  Allows minor-level changes if not.
-
-* `~1.2.3` := `>=1.2.3 <1.(2+1).0` := `>=1.2.3 <1.3.0`
-* `~1.2` := `>=1.2.0 <1.(2+1).0` := `>=1.2.0 <1.3.0` (Same as `1.2.x`)
-* `~1` := `>=1.0.0 <(1+1).0.0` := `>=1.0.0 <2.0.0` (Same as `1.x`)
-* `~0.2.3` := `>=0.2.3 <0.(2+1).0` := `>=0.2.3 <0.3.0`
-* `~0.2` := `>=0.2.0 <0.(2+1).0` := `>=0.2.0 <0.3.0` (Same as `0.2.x`)
-* `~0` := `>=0.0.0 <(0+1).0.0` := `>=0.0.0 <1.0.0` (Same as `0.x`)
-* `~1.2.3-beta.2` := `>=1.2.3-beta.2 <1.3.0` Note that prereleases in
-  the `1.2.3` version will be allowed, if they are greater than or
-  equal to `beta.2`.  So, `1.2.3-beta.4` would be allowed, but
-  `1.2.4-beta.2` would not, because it is a prerelease of a
-  different `[major, minor, patch]` tuple.
-
-#### Caret Ranges `^1.2.3` `^0.2.5` `^0.0.4`
-
-Allows changes that do not modify the left-most non-zero digit in the
-`[major, minor, patch]` tuple.  In other words, this allows patch and
-minor updates for versions `1.0.0` and above, patch updates for
-versions `0.X >=0.1.0`, and *no* updates for versions `0.0.X`.
-
-Many authors treat a `0.x` version as if the `x` were the major
-"breaking-change" indicator.
-
-Caret ranges are ideal when an author may make breaking changes
-between `0.2.4` and `0.3.0` releases, which is a common practice.
-However, it presumes that there will *not* be breaking changes between
-`0.2.4` and `0.2.5`.  It allows for changes that are presumed to be
-additive (but non-breaking), according to commonly observed practices.
-
-* `^1.2.3` := `>=1.2.3 <2.0.0`
-* `^0.2.3` := `>=0.2.3 <0.3.0`
-* `^0.0.3` := `>=0.0.3 <0.0.4`
-* `^1.2.3-beta.2` := `>=1.2.3-beta.2 <2.0.0` Note that prereleases in
-  the `1.2.3` version will be allowed, if they are greater than or
-  equal to `beta.2`.  So, `1.2.3-beta.4` would be allowed, but
-  `1.2.4-beta.2` would not, because it is a prerelease of a
-  different `[major, minor, patch]` tuple.
-* `^0.0.3-beta` := `>=0.0.3-beta <0.0.4`  Note that prereleases in the
-  `0.0.3` version *only* will be allowed, if they are greater than or
-  equal to `beta`.  So, `0.0.3-pr.2` would be allowed.
-
-When parsing caret ranges, a missing `patch` value desugars to the
-number `0`, but will allow flexibility within that value, even if the
-major and minor versions are both `0`.
-
-* `^1.2.x` := `>=1.2.0 <2.0.0`
-* `^0.0.x` := `>=0.0.0 <0.1.0`
-* `^0.0` := `>=0.0.0 <0.1.0`
-
-A missing `minor` and `patch` values will desugar to zero, but also
-allow flexibility within those values, even if the major version is
-zero.
-
-* `^1.x` := `>=1.0.0 <2.0.0`
-* `^0.x` := `>=0.0.0 <1.0.0`
-
-## Functions
-
-All methods and classes take a final `loose` boolean argument that, if
-true, will be more forgiving about not-quite-valid semver strings.
-The resulting output will always be 100% strict, of course.
-
-Strict-mode Comparators and Ranges will be strict about the SemVer
-strings that they parse.
-
-* `valid(v)`: Return the parsed version, or null if it's not valid.
-* `inc(v, release)`: Return the version incremented by the release
-  type (`major`,   `premajor`, `minor`, `preminor`, `patch`,
-  `prepatch`, or `prerelease`), or null if it's not valid
-  * `premajor` in one call will bump the version up to the next major
-    version and down to a prerelease of that major version.
-    `preminor`, and `prepatch` work the same way.
-  * If called from a non-prerelease version, the `prerelease` will work the
-    same as `prepatch`. It increments the patch version, then makes a
-    prerelease. If the input version is already a prerelease it simply
-    increments it.
-* `major(v)`: Return the major version number.
-* `minor(v)`: Return the minor version number.
-* `patch(v)`: Return the patch version number.
-
-### Comparison
-
-* `gt(v1, v2)`: `v1 > v2`
-* `gte(v1, v2)`: `v1 >= v2`
-* `lt(v1, v2)`: `v1 < v2`
-* `lte(v1, v2)`: `v1 <= v2`
-* `eq(v1, v2)`: `v1 == v2` This is true if they're logically equivalent,
-  even if they're not the exact same string.  You already know how to
-  compare strings.
-* `neq(v1, v2)`: `v1 != v2` The opposite of `eq`.
-* `cmp(v1, comparator, v2)`: Pass in a comparison string, and it'll call
-  the corresponding function above.  `"==="` and `"!=="` do simple
-  string comparison, but are included for completeness.  Throws if an
-  invalid comparison string is provided.
-* `compare(v1, v2)`: Return `0` if `v1 == v2`, or `1` if `v1` is greater, or `-1` if
-  `v2` is greater.  Sorts in ascending order if passed to `Array.sort()`.
-* `rcompare(v1, v2)`: The reverse of compare.  Sorts an array of versions
-  in descending order when passed to `Array.sort()`.
-* `diff(v1, v2)`: Returns difference between two versions by the release type
-  (`major`, `premajor`, `minor`, `preminor`, `patch`, `prepatch`, or `prerelease`),
-  or null if the versions are the same.
-
-
-### Ranges
-
-* `validRange(range)`: Return the valid range or null if it's not valid
-* `satisfies(version, range)`: Return true if the version satisfies the
-  range.
-* `maxSatisfying(versions, range)`: Return the highest version in the list
-  that satisfies the range, or `null` if none of them do.
-* `gtr(version, range)`: Return `true` if version is greater than all the
-  versions possible in the range.
-* `ltr(version, range)`: Return `true` if version is less than all the
-  versions possible in the range.
-* `outside(version, range, hilo)`: Return true if the version is outside
-  the bounds of the range in either the high or low direction.  The
-  `hilo` argument must be either the string `'>'` or `'<'`.  (This is
-  the function called by `gtr` and `ltr`.)
-
-Note that, since ranges may be non-contiguous, a version might not be
-greater than a range, less than a range, *or* satisfy a range!  For
-example, the range `1.2 <1.2.9 || >2.0.0` would have a hole from `1.2.9`
-until `2.0.0`, so the version `1.2.10` would not be greater than the
-range (because `2.0.1` satisfies, which is higher), nor less than the
-range (since `1.2.8` satisfies, which is lower), and it also does not
-satisfy the range.
-
-If you want to know if a version satisfies or does not satisfy a
-range, use the `satisfies(version, range)` function.
diff --git a/bin/node_modules/cordova-common/node_modules/semver/bin/semver b/bin/node_modules/cordova-common/node_modules/semver/bin/semver
deleted file mode 100644
index c5f2e85..0000000
--- a/bin/node_modules/cordova-common/node_modules/semver/bin/semver
+++ /dev/null
@@ -1,133 +0,0 @@
-#!/usr/bin/env node
-// Standalone semver comparison program.
-// Exits successfully and prints matching version(s) if
-// any supplied version is valid and passes all tests.
-
-var argv = process.argv.slice(2)
-  , versions = []
-  , range = []
-  , gt = []
-  , lt = []
-  , eq = []
-  , inc = null
-  , version = require("../package.json").version
-  , loose = false
-  , identifier = undefined
-  , semver = require("../semver")
-  , reverse = false
-
-main()
-
-function main () {
-  if (!argv.length) return help()
-  while (argv.length) {
-    var a = argv.shift()
-    var i = a.indexOf('=')
-    if (i !== -1) {
-      a = a.slice(0, i)
-      argv.unshift(a.slice(i + 1))
-    }
-    switch (a) {
-      case "-rv": case "-rev": case "--rev": case "--reverse":
-        reverse = true
-        break
-      case "-l": case "--loose":
-        loose = true
-        break
-      case "-v": case "--version":
-        versions.push(argv.shift())
-        break
-      case "-i": case "--inc": case "--increment":
-        switch (argv[0]) {
-          case "major": case "minor": case "patch": case "prerelease":
-          case "premajor": case "preminor": case "prepatch":
-            inc = argv.shift()
-            break
-          default:
-            inc = "patch"
-            break
-        }
-        break
-      case "--preid":
-        identifier = argv.shift()
-        break
-      case "-r": case "--range":
-        range.push(argv.shift())
-        break
-      case "-h": case "--help": case "-?":
-        return help()
-      default:
-        versions.push(a)
-        break
-    }
-  }
-
-  versions = versions.filter(function (v) {
-    return semver.valid(v, loose)
-  })
-  if (!versions.length) return fail()
-  if (inc && (versions.length !== 1 || range.length))
-    return failInc()
-
-  for (var i = 0, l = range.length; i < l ; i ++) {
-    versions = versions.filter(function (v) {
-      return semver.satisfies(v, range[i], loose)
-    })
-    if (!versions.length) return fail()
-  }
-  return success(versions)
-}
-
-function failInc () {
-  console.error("--inc can only be used on a single version with no range")
-  fail()
-}
-
-function fail () { process.exit(1) }
-
-function success () {
-  var compare = reverse ? "rcompare" : "compare"
-  versions.sort(function (a, b) {
-    return semver[compare](a, b, loose)
-  }).map(function (v) {
-    return semver.clean(v, loose)
-  }).map(function (v) {
-    return inc ? semver.inc(v, inc, loose, identifier) : v
-  }).forEach(function (v,i,_) { console.log(v) })
-}
-
-function help () {
-  console.log(["SemVer " + version
-              ,""
-              ,"A JavaScript implementation of the http://semver.org/ specification"
-              ,"Copyright Isaac Z. Schlueter"
-              ,""
-              ,"Usage: semver [options] <version> [<version> [...]]"
-              ,"Prints valid versions sorted by SemVer precedence"
-              ,""
-              ,"Options:"
-              ,"-r --range <range>"
-              ,"        Print versions that match the specified range."
-              ,""
-              ,"-i --increment [<level>]"
-              ,"        Increment a version by the specified level.  Level can"
-              ,"        be one of: major, minor, patch, premajor, preminor,"
-              ,"        prepatch, or prerelease.  Default level is 'patch'."
-              ,"        Only one version may be specified."
-              ,""
-              ,"--preid <identifier>"
-              ,"        Identifier to be used to prefix premajor, preminor,"
-              ,"        prepatch or prerelease version increments."
-              ,""
-              ,"-l --loose"
-              ,"        Interpret versions and ranges loosely"
-              ,""
-              ,"Program exits successfully if any valid version satisfies"
-              ,"all supplied ranges, and prints all satisfying versions."
-              ,""
-              ,"If no satisfying versions are found, then exits failure."
-              ,""
-              ,"Versions are printed in ascending order, so supplying"
-              ,"multiple versions to the utility will just sort them."
-              ].join("\n"))
-}
diff --git a/bin/node_modules/cordova-common/node_modules/semver/package.json b/bin/node_modules/cordova-common/node_modules/semver/package.json
deleted file mode 100644
index 3c48959..0000000
--- a/bin/node_modules/cordova-common/node_modules/semver/package.json
+++ /dev/null
@@ -1,51 +0,0 @@
-{
-  "name": "semver",
-  "version": "5.0.3",
-  "description": "The semantic version parser used by npm.",
-  "main": "semver.js",
-  "scripts": {
-    "test": "tap test/*.js"
-  },
-  "devDependencies": {
-    "tap": "^1.3.4"
-  },
-  "license": "ISC",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/npm/node-semver.git"
-  },
-  "bin": {
-    "semver": "./bin/semver"
-  },
-  "gitHead": "5f89ecbe78145ad0b501cf6279f602a23c89738d",
-  "bugs": {
-    "url": "https://github.com/npm/node-semver/issues"
-  },
-  "homepage": "https://github.com/npm/node-semver#readme",
-  "_id": "semver@5.0.3",
-  "_shasum": "77466de589cd5d3c95f138aa78bc569a3cb5d27a",
-  "_from": "semver@^5.0.1",
-  "_npmVersion": "3.3.2",
-  "_nodeVersion": "4.0.0",
-  "_npmUser": {
-    "name": "isaacs",
-    "email": "isaacs@npmjs.com"
-  },
-  "dist": {
-    "shasum": "77466de589cd5d3c95f138aa78bc569a3cb5d27a",
-    "tarball": "http://registry.npmjs.org/semver/-/semver-5.0.3.tgz"
-  },
-  "maintainers": [
-    {
-      "name": "isaacs",
-      "email": "isaacs@npmjs.com"
-    },
-    {
-      "name": "othiym23",
-      "email": "ogd@aoaioxxysz.net"
-    }
-  ],
-  "directories": {},
-  "_resolved": "https://registry.npmjs.org/semver/-/semver-5.0.3.tgz",
-  "readme": "ERROR: No README data found!"
-}
diff --git a/bin/node_modules/cordova-common/node_modules/semver/semver.js b/bin/node_modules/cordova-common/node_modules/semver/semver.js
deleted file mode 100644
index 19392d8..0000000
--- a/bin/node_modules/cordova-common/node_modules/semver/semver.js
+++ /dev/null
@@ -1,1200 +0,0 @@
-exports = module.exports = SemVer;
-
-// The debug function is excluded entirely from the minified version.
-/* nomin */ var debug;
-/* nomin */ if (typeof process === 'object' &&
-    /* nomin */ process.env &&
-    /* nomin */ process.env.NODE_DEBUG &&
-    /* nomin */ /\bsemver\b/i.test(process.env.NODE_DEBUG))
-  /* nomin */ debug = function() {
-    /* nomin */ var args = Array.prototype.slice.call(arguments, 0);
-    /* nomin */ args.unshift('SEMVER');
-    /* nomin */ console.log.apply(console, args);
-    /* nomin */ };
-/* nomin */ else
-  /* nomin */ debug = function() {};
-
-// Note: this is the semver.org version of the spec that it implements
-// Not necessarily the package version of this code.
-exports.SEMVER_SPEC_VERSION = '2.0.0';
-
-var MAX_LENGTH = 256;
-var MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991;
-
-// The actual regexps go on exports.re
-var re = exports.re = [];
-var src = exports.src = [];
-var R = 0;
-
-// The following Regular Expressions can be used for tokenizing,
-// validating, and parsing SemVer version strings.
-
-// ## Numeric Identifier
-// A single `0`, or a non-zero digit followed by zero or more digits.
-
-var NUMERICIDENTIFIER = R++;
-src[NUMERICIDENTIFIER] = '0|[1-9]\\d*';
-var NUMERICIDENTIFIERLOOSE = R++;
-src[NUMERICIDENTIFIERLOOSE] = '[0-9]+';
-
-
-// ## Non-numeric Identifier
-// Zero or more digits, followed by a letter or hyphen, and then zero or
-// more letters, digits, or hyphens.
-
-var NONNUMERICIDENTIFIER = R++;
-src[NONNUMERICIDENTIFIER] = '\\d*[a-zA-Z-][a-zA-Z0-9-]*';
-
-
-// ## Main Version
-// Three dot-separated numeric identifiers.
-
-var MAINVERSION = R++;
-src[MAINVERSION] = '(' + src[NUMERICIDENTIFIER] + ')\\.' +
-                   '(' + src[NUMERICIDENTIFIER] + ')\\.' +
-                   '(' + src[NUMERICIDENTIFIER] + ')';
-
-var MAINVERSIONLOOSE = R++;
-src[MAINVERSIONLOOSE] = '(' + src[NUMERICIDENTIFIERLOOSE] + ')\\.' +
-                        '(' + src[NUMERICIDENTIFIERLOOSE] + ')\\.' +
-                        '(' + src[NUMERICIDENTIFIERLOOSE] + ')';
-
-// ## Pre-release Version Identifier
-// A numeric identifier, or a non-numeric identifier.
-
-var PRERELEASEIDENTIFIER = R++;
-src[PRERELEASEIDENTIFIER] = '(?:' + src[NUMERICIDENTIFIER] +
-                            '|' + src[NONNUMERICIDENTIFIER] + ')';
-
-var PRERELEASEIDENTIFIERLOOSE = R++;
-src[PRERELEASEIDENTIFIERLOOSE] = '(?:' + src[NUMERICIDENTIFIERLOOSE] +
-                                 '|' + src[NONNUMERICIDENTIFIER] + ')';
-
-
-// ## Pre-release Version
-// Hyphen, followed by one or more dot-separated pre-release version
-// identifiers.
-
-var PRERELEASE = R++;
-src[PRERELEASE] = '(?:-(' + src[PRERELEASEIDENTIFIER] +
-                  '(?:\\.' + src[PRERELEASEIDENTIFIER] + ')*))';
-
-var PRERELEASELOOSE = R++;
-src[PRERELEASELOOSE] = '(?:-?(' + src[PRERELEASEIDENTIFIERLOOSE] +
-                       '(?:\\.' + src[PRERELEASEIDENTIFIERLOOSE] + ')*))';
-
-// ## Build Metadata Identifier
-// Any combination of digits, letters, or hyphens.
-
-var BUILDIDENTIFIER = R++;
-src[BUILDIDENTIFIER] = '[0-9A-Za-z-]+';
-
-// ## Build Metadata
-// Plus sign, followed by one or more period-separated build metadata
-// identifiers.
-
-var BUILD = R++;
-src[BUILD] = '(?:\\+(' + src[BUILDIDENTIFIER] +
-             '(?:\\.' + src[BUILDIDENTIFIER] + ')*))';
-
-
-// ## Full Version String
-// A main version, followed optionally by a pre-release version and
-// build metadata.
-
-// Note that the only major, minor, patch, and pre-release sections of
-// the version string are capturing groups.  The build metadata is not a
-// capturing group, because it should not ever be used in version
-// comparison.
-
-var FULL = R++;
-var FULLPLAIN = 'v?' + src[MAINVERSION] +
-                src[PRERELEASE] + '?' +
-                src[BUILD] + '?';
-
-src[FULL] = '^' + FULLPLAIN + '$';
-
-// like full, but allows v1.2.3 and =1.2.3, which people do sometimes.
-// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty
-// common in the npm registry.
-var LOOSEPLAIN = '[v=\\s]*' + src[MAINVERSIONLOOSE] +
-                 src[PRERELEASELOOSE] + '?' +
-                 src[BUILD] + '?';
-
-var LOOSE = R++;
-src[LOOSE] = '^' + LOOSEPLAIN + '$';
-
-var GTLT = R++;
-src[GTLT] = '((?:<|>)?=?)';
-
-// Something like "2.*" or "1.2.x".
-// Note that "x.x" is a valid xRange identifer, meaning "any version"
-// Only the first item is strictly required.
-var XRANGEIDENTIFIERLOOSE = R++;
-src[XRANGEIDENTIFIERLOOSE] = src[NUMERICIDENTIFIERLOOSE] + '|x|X|\\*';
-var XRANGEIDENTIFIER = R++;
-src[XRANGEIDENTIFIER] = src[NUMERICIDENTIFIER] + '|x|X|\\*';
-
-var XRANGEPLAIN = R++;
-src[XRANGEPLAIN] = '[v=\\s]*(' + src[XRANGEIDENTIFIER] + ')' +
-                   '(?:\\.(' + src[XRANGEIDENTIFIER] + ')' +
-                   '(?:\\.(' + src[XRANGEIDENTIFIER] + ')' +
-                   '(?:' + src[PRERELEASE] + ')?' +
-                   src[BUILD] + '?' +
-                   ')?)?';
-
-var XRANGEPLAINLOOSE = R++;
-src[XRANGEPLAINLOOSE] = '[v=\\s]*(' + src[XRANGEIDENTIFIERLOOSE] + ')' +
-                        '(?:\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' +
-                        '(?:\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' +
-                        '(?:' + src[PRERELEASELOOSE] + ')?' +
-                        src[BUILD] + '?' +
-                        ')?)?';
-
-var XRANGE = R++;
-src[XRANGE] = '^' + src[GTLT] + '\\s*' + src[XRANGEPLAIN] + '$';
-var XRANGELOOSE = R++;
-src[XRANGELOOSE] = '^' + src[GTLT] + '\\s*' + src[XRANGEPLAINLOOSE] + '$';
-
-// Tilde ranges.
-// Meaning is "reasonably at or greater than"
-var LONETILDE = R++;
-src[LONETILDE] = '(?:~>?)';
-
-var TILDETRIM = R++;
-src[TILDETRIM] = '(\\s*)' + src[LONETILDE] + '\\s+';
-re[TILDETRIM] = new RegExp(src[TILDETRIM], 'g');
-var tildeTrimReplace = '$1~';
-
-var TILDE = R++;
-src[TILDE] = '^' + src[LONETILDE] + src[XRANGEPLAIN] + '$';
-var TILDELOOSE = R++;
-src[TILDELOOSE] = '^' + src[LONETILDE] + src[XRANGEPLAINLOOSE] + '$';
-
-// Caret ranges.
-// Meaning is "at least and backwards compatible with"
-var LONECARET = R++;
-src[LONECARET] = '(?:\\^)';
-
-var CARETTRIM = R++;
-src[CARETTRIM] = '(\\s*)' + src[LONECARET] + '\\s+';
-re[CARETTRIM] = new RegExp(src[CARETTRIM], 'g');
-var caretTrimReplace = '$1^';
-
-var CARET = R++;
-src[CARET] = '^' + src[LONECARET] + src[XRANGEPLAIN] + '$';
-var CARETLOOSE = R++;
-src[CARETLOOSE] = '^' + src[LONECARET] + src[XRANGEPLAINLOOSE] + '$';
-
-// A simple gt/lt/eq thing, or just "" to indicate "any version"
-var COMPARATORLOOSE = R++;
-src[COMPARATORLOOSE] = '^' + src[GTLT] + '\\s*(' + LOOSEPLAIN + ')$|^$';
-var COMPARATOR = R++;
-src[COMPARATOR] = '^' + src[GTLT] + '\\s*(' + FULLPLAIN + ')$|^$';
-
-
-// An expression to strip any whitespace between the gtlt and the thing
-// it modifies, so that `> 1.2.3` ==> `>1.2.3`
-var COMPARATORTRIM = R++;
-src[COMPARATORTRIM] = '(\\s*)' + src[GTLT] +
-                      '\\s*(' + LOOSEPLAIN + '|' + src[XRANGEPLAIN] + ')';
-
-// this one has to use the /g flag
-re[COMPARATORTRIM] = new RegExp(src[COMPARATORTRIM], 'g');
-var comparatorTrimReplace = '$1$2$3';
-
-
-// Something like `1.2.3 - 1.2.4`
-// Note that these all use the loose form, because they'll be
-// checked against either the strict or loose comparator form
-// later.
-var HYPHENRANGE = R++;
-src[HYPHENRANGE] = '^\\s*(' + src[XRANGEPLAIN] + ')' +
-                   '\\s+-\\s+' +
-                   '(' + src[XRANGEPLAIN] + ')' +
-                   '\\s*$';
-
-var HYPHENRANGELOOSE = R++;
-src[HYPHENRANGELOOSE] = '^\\s*(' + src[XRANGEPLAINLOOSE] + ')' +
-                        '\\s+-\\s+' +
-                        '(' + src[XRANGEPLAINLOOSE] + ')' +
-                        '\\s*$';
-
-// Star ranges basically just allow anything at all.
-var STAR = R++;
-src[STAR] = '(<|>)?=?\\s*\\*';
-
-// Compile to actual regexp objects.
-// All are flag-free, unless they were created above with a flag.
-for (var i = 0; i < R; i++) {
-  debug(i, src[i]);
-  if (!re[i])
-    re[i] = new RegExp(src[i]);
-}
-
-exports.parse = parse;
-function parse(version, loose) {
-  if (version instanceof SemVer)
-    return version;
-
-  if (typeof version !== 'string')
-    return null;
-
-  if (version.length > MAX_LENGTH)
-    return null;
-
-  var r = loose ? re[LOOSE] : re[FULL];
-  if (!r.test(version))
-    return null;
-
-  try {
-    return new SemVer(version, loose);
-  } catch (er) {
-    return null;
-  }
-}
-
-exports.valid = valid;
-function valid(version, loose) {
-  var v = parse(version, loose);
-  return v ? v.version : null;
-}
-
-
-exports.clean = clean;
-function clean(version, loose) {
-  var s = parse(version.trim().replace(/^[=v]+/, ''), loose);
-  return s ? s.version : null;
-}
-
-exports.SemVer = SemVer;
-
-function SemVer(version, loose) {
-  if (version instanceof SemVer) {
-    if (version.loose === loose)
-      return version;
-    else
-      version = version.version;
-  } else if (typeof version !== 'string') {
-    throw new TypeError('Invalid Version: ' + version);
-  }
-
-  if (version.length > MAX_LENGTH)
-    throw new TypeError('version is longer than ' + MAX_LENGTH + ' characters')
-
-  if (!(this instanceof SemVer))
-    return new SemVer(version, loose);
-
-  debug('SemVer', version, loose);
-  this.loose = loose;
-  var m = version.trim().match(loose ? re[LOOSE] : re[FULL]);
-
-  if (!m)
-    throw new TypeError('Invalid Version: ' + version);
-
-  this.raw = version;
-
-  // these are actually numbers
-  this.major = +m[1];
-  this.minor = +m[2];
-  this.patch = +m[3];
-
-  if (this.major > MAX_SAFE_INTEGER || this.major < 0)
-    throw new TypeError('Invalid major version')
-
-  if (this.minor > MAX_SAFE_INTEGER || this.minor < 0)
-    throw new TypeError('Invalid minor version')
-
-  if (this.patch > MAX_SAFE_INTEGER || this.patch < 0)
-    throw new TypeError('Invalid patch version')
-
-  // numberify any prerelease numeric ids
-  if (!m[4])
-    this.prerelease = [];
-  else
-    this.prerelease = m[4].split('.').map(function(id) {
-      if (/^[0-9]+$/.test(id)) {
-        var num = +id
-        if (num >= 0 && num < MAX_SAFE_INTEGER)
-          return num
-      }
-      return id;
-    });
-
-  this.build = m[5] ? m[5].split('.') : [];
-  this.format();
-}
-
-SemVer.prototype.format = function() {
-  this.version = this.major + '.' + this.minor + '.' + this.patch;
-  if (this.prerelease.length)
-    this.version += '-' + this.prerelease.join('.');
-  return this.version;
-};
-
-SemVer.prototype.inspect = function() {
-  return '<SemVer "' + this + '">';
-};
-
-SemVer.prototype.toString = function() {
-  return this.version;
-};
-
-SemVer.prototype.compare = function(other) {
-  debug('SemVer.compare', this.version, this.loose, other);
-  if (!(other instanceof SemVer))
-    other = new SemVer(other, this.loose);
-
-  return this.compareMain(other) || this.comparePre(other);
-};
-
-SemVer.prototype.compareMain = function(other) {
-  if (!(other instanceof SemVer))
-    other = new SemVer(other, this.loose);
-
-  return compareIdentifiers(this.major, other.major) ||
-         compareIdentifiers(this.minor, other.minor) ||
-         compareIdentifiers(this.patch, other.patch);
-};
-
-SemVer.prototype.comparePre = function(other) {
-  if (!(other instanceof SemVer))
-    other = new SemVer(other, this.loose);
-
-  // NOT having a prerelease is > having one
-  if (this.prerelease.length && !other.prerelease.length)
-    return -1;
-  else if (!this.prerelease.length && other.prerelease.length)
-    return 1;
-  else if (!this.prerelease.length && !other.prerelease.length)
-    return 0;
-
-  var i = 0;
-  do {
-    var a = this.prerelease[i];
-    var b = other.prerelease[i];
-    debug('prerelease compare', i, a, b);
-    if (a === undefined && b === undefined)
-      return 0;
-    else if (b === undefined)
-      return 1;
-    else if (a === undefined)
-      return -1;
-    else if (a === b)
-      continue;
-    else
-      return compareIdentifiers(a, b);
-  } while (++i);
-};
-
-// preminor will bump the version up to the next minor release, and immediately
-// down to pre-release. premajor and prepatch work the same way.
-SemVer.prototype.inc = function(release, identifier) {
-  switch (release) {
-    case 'premajor':
-      this.prerelease.length = 0;
-      this.patch = 0;
-      this.minor = 0;
-      this.major++;
-      this.inc('pre', identifier);
-      break;
-    case 'preminor':
-      this.prerelease.length = 0;
-      this.patch = 0;
-      this.minor++;
-      this.inc('pre', identifier);
-      break;
-    case 'prepatch':
-      // If this is already a prerelease, it will bump to the next version
-      // drop any prereleases that might already exist, since they are not
-      // relevant at this point.
-      this.prerelease.length = 0;
-      this.inc('patch', identifier);
-      this.inc('pre', identifier);
-      break;
-    // If the input is a non-prerelease version, this acts the same as
-    // prepatch.
-    case 'prerelease':
-      if (this.prerelease.length === 0)
-        this.inc('patch', identifier);
-      this.inc('pre', identifier);
-      break;
-
-    case 'major':
-      // If this is a pre-major version, bump up to the same major version.
-      // Otherwise increment major.
-      // 1.0.0-5 bumps to 1.0.0
-      // 1.1.0 bumps to 2.0.0
-      if (this.minor !== 0 || this.patch !== 0 || this.prerelease.length === 0)
-        this.major++;
-      this.minor = 0;
-      this.patch = 0;
-      this.prerelease = [];
-      break;
-    case 'minor':
-      // If this is a pre-minor version, bump up to the same minor version.
-      // Otherwise increment minor.
-      // 1.2.0-5 bumps to 1.2.0
-      // 1.2.1 bumps to 1.3.0
-      if (this.patch !== 0 || this.prerelease.length === 0)
-        this.minor++;
-      this.patch = 0;
-      this.prerelease = [];
-      break;
-    case 'patch':
-      // If this is not a pre-release version, it will increment the patch.
-      // If it is a pre-release it will bump up to the same patch version.
-      // 1.2.0-5 patches to 1.2.0
-      // 1.2.0 patches to 1.2.1
-      if (this.prerelease.length === 0)
-        this.patch++;
-      this.prerelease = [];
-      break;
-    // This probably shouldn't be used publicly.
-    // 1.0.0 "pre" would become 1.0.0-0 which is the wrong direction.
-    case 'pre':
-      if (this.prerelease.length === 0)
-        this.prerelease = [0];
-      else {
-        var i = this.prerelease.length;
-        while (--i >= 0) {
-          if (typeof this.prerelease[i] === 'number') {
-            this.prerelease[i]++;
-            i = -2;
-          }
-        }
-        if (i === -1) // didn't increment anything
-          this.prerelease.push(0);
-      }
-      if (identifier) {
-        // 1.2.0-beta.1 bumps to 1.2.0-beta.2,
-        // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0
-        if (this.prerelease[0] === identifier) {
-          if (isNaN(this.prerelease[1]))
-            this.prerelease = [identifier, 0];
-        } else
-          this.prerelease = [identifier, 0];
-      }
-      break;
-
-    default:
-      throw new Error('invalid increment argument: ' + release);
-  }
-  this.format();
-  this.raw = this.version;
-  return this;
-};
-
-exports.inc = inc;
-function inc(version, release, loose, identifier) {
-  if (typeof(loose) === 'string') {
-    identifier = loose;
-    loose = undefined;
-  }
-
-  try {
-    return new SemVer(version, loose).inc(release, identifier).version;
-  } catch (er) {
-    return null;
-  }
-}
-
-exports.diff = diff;
-function diff(version1, version2) {
-  if (eq(version1, version2)) {
-    return null;
-  } else {
-    var v1 = parse(version1);
-    var v2 = parse(version2);
-    if (v1.prerelease.length || v2.prerelease.length) {
-      for (var key in v1) {
-        if (key === 'major' || key === 'minor' || key === 'patch') {
-          if (v1[key] !== v2[key]) {
-            return 'pre'+key;
-          }
-        }
-      }
-      return 'prerelease';
-    }
-    for (var key in v1) {
-      if (key === 'major' || key === 'minor' || key === 'patch') {
-        if (v1[key] !== v2[key]) {
-          return key;
-        }
-      }
-    }
-  }
-}
-
-exports.compareIdentifiers = compareIdentifiers;
-
-var numeric = /^[0-9]+$/;
-function compareIdentifiers(a, b) {
-  var anum = numeric.test(a);
-  var bnum = numeric.test(b);
-
-  if (anum && bnum) {
-    a = +a;
-    b = +b;
-  }
-
-  return (anum && !bnum) ? -1 :
-         (bnum && !anum) ? 1 :
-         a < b ? -1 :
-         a > b ? 1 :
-         0;
-}
-
-exports.rcompareIdentifiers = rcompareIdentifiers;
-function rcompareIdentifiers(a, b) {
-  return compareIdentifiers(b, a);
-}
-
-exports.major = major;
-function major(a, loose) {
-  return new SemVer(a, loose).major;
-}
-
-exports.minor = minor;
-function minor(a, loose) {
-  return new SemVer(a, loose).minor;
-}
-
-exports.patch = patch;
-function patch(a, loose) {
-  return new SemVer(a, loose).patch;
-}
-
-exports.compare = compare;
-function compare(a, b, loose) {
-  return new SemVer(a, loose).compare(b);
-}
-
-exports.compareLoose = compareLoose;
-function compareLoose(a, b) {
-  return compare(a, b, true);
-}
-
-exports.rcompare = rcompare;
-function rcompare(a, b, loose) {
-  return compare(b, a, loose);
-}
-
-exports.sort = sort;
-function sort(list, loose) {
-  return list.sort(function(a, b) {
-    return exports.compare(a, b, loose);
-  });
-}
-
-exports.rsort = rsort;
-function rsort(list, loose) {
-  return list.sort(function(a, b) {
-    return exports.rcompare(a, b, loose);
-  });
-}
-
-exports.gt = gt;
-function gt(a, b, loose) {
-  return compare(a, b, loose) > 0;
-}
-
-exports.lt = lt;
-function lt(a, b, loose) {
-  return compare(a, b, loose) < 0;
-}
-
-exports.eq = eq;
-function eq(a, b, loose) {
-  return compare(a, b, loose) === 0;
-}
-
-exports.neq = neq;
-function neq(a, b, loose) {
-  return compare(a, b, loose) !== 0;
-}
-
-exports.gte = gte;
-function gte(a, b, loose) {
-  return compare(a, b, loose) >= 0;
-}
-
-exports.lte = lte;
-function lte(a, b, loose) {
-  return compare(a, b, loose) <= 0;
-}
-
-exports.cmp = cmp;
-function cmp(a, op, b, loose) {
-  var ret;
-  switch (op) {
-    case '===':
-      if (typeof a === 'object') a = a.version;
-      if (typeof b === 'object') b = b.version;
-      ret = a === b;
-      break;
-    case '!==':
-      if (typeof a === 'object') a = a.version;
-      if (typeof b === 'object') b = b.version;
-      ret = a !== b;
-      break;
-    case '': case '=': case '==': ret = eq(a, b, loose); break;
-    case '!=': ret = neq(a, b, loose); break;
-    case '>': ret = gt(a, b, loose); break;
-    case '>=': ret = gte(a, b, loose); break;
-    case '<': ret = lt(a, b, loose); break;
-    case '<=': ret = lte(a, b, loose); break;
-    default: throw new TypeError('Invalid operator: ' + op);
-  }
-  return ret;
-}
-
-exports.Comparator = Comparator;
-function Comparator(comp, loose) {
-  if (comp instanceof Comparator) {
-    if (comp.loose === loose)
-      return comp;
-    else
-      comp = comp.value;
-  }
-
-  if (!(this instanceof Comparator))
-    return new Comparator(comp, loose);
-
-  debug('comparator', comp, loose);
-  this.loose = loose;
-  this.parse(comp);
-
-  if (this.semver === ANY)
-    this.value = '';
-  else
-    this.value = this.operator + this.semver.version;
-
-  debug('comp', this);
-}
-
-var ANY = {};
-Comparator.prototype.parse = function(comp) {
-  var r = this.loose ? re[COMPARATORLOOSE] : re[COMPARATOR];
-  var m = comp.match(r);
-
-  if (!m)
-    throw new TypeError('Invalid comparator: ' + comp);
-
-  this.operator = m[1];
-  if (this.operator === '=')
-    this.operator = '';
-
-  // if it literally is just '>' or '' then allow anything.
-  if (!m[2])
-    this.semver = ANY;
-  else
-    this.semver = new SemVer(m[2], this.loose);
-};
-
-Comparator.prototype.inspect = function() {
-  return '<SemVer Comparator "' + this + '">';
-};
-
-Comparator.prototype.toString = function() {
-  return this.value;
-};
-
-Comparator.prototype.test = function(version) {
-  debug('Comparator.test', version, this.loose);
-
-  if (this.semver === ANY)
-    return true;
-
-  if (typeof version === 'string')
-    version = new SemVer(version, this.loose);
-
-  return cmp(version, this.operator, this.semver, this.loose);
-};
-
-
-exports.Range = Range;
-function Range(range, loose) {
-  if ((range instanceof Range) && range.loose === loose)
-    return range;
-
-  if (!(this instanceof Range))
-    return new Range(range, loose);
-
-  this.loose = loose;
-
-  // First, split based on boolean or ||
-  this.raw = range;
-  this.set = range.split(/\s*\|\|\s*/).map(function(range) {
-    return this.parseRange(range.trim());
-  }, this).filter(function(c) {
-    // throw out any that are not relevant for whatever reason
-    return c.length;
-  });
-
-  if (!this.set.length) {
-    throw new TypeError('Invalid SemVer Range: ' + range);
-  }
-
-  this.format();
-}
-
-Range.prototype.inspect = function() {
-  return '<SemVer Range "' + this.range + '">';
-};
-
-Range.prototype.format = function() {
-  this.range = this.set.map(function(comps) {
-    return comps.join(' ').trim();
-  }).join('||').trim();
-  return this.range;
-};
-
-Range.prototype.toString = function() {
-  return this.range;
-};
-
-Range.prototype.parseRange = function(range) {
-  var loose = this.loose;
-  range = range.trim();
-  debug('range', range, loose);
-  // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`
-  var hr = loose ? re[HYPHENRANGELOOSE] : re[HYPHENRANGE];
-  range = range.replace(hr, hyphenReplace);
-  debug('hyphen replace', range);
-  // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`
-  range = range.replace(re[COMPARATORTRIM], comparatorTrimReplace);
-  debug('comparator trim', range, re[COMPARATORTRIM]);
-
-  // `~ 1.2.3` => `~1.2.3`
-  range = range.replace(re[TILDETRIM], tildeTrimReplace);
-
-  // `^ 1.2.3` => `^1.2.3`
-  range = range.replace(re[CARETTRIM], caretTrimReplace);
-
-  // normalize spaces
-  range = range.split(/\s+/).join(' ');
-
-  // At this point, the range is completely trimmed and
-  // ready to be split into comparators.
-
-  var compRe = loose ? re[COMPARATORLOOSE] : re[COMPARATOR];
-  var set = range.split(' ').map(function(comp) {
-    return parseComparator(comp, loose);
-  }).join(' ').split(/\s+/);
-  if (this.loose) {
-    // in loose mode, throw out any that are not valid comparators
-    set = set.filter(function(comp) {
-      return !!comp.match(compRe);
-    });
-  }
-  set = set.map(function(comp) {
-    return new Comparator(comp, loose);
-  });
-
-  return set;
-};
-
-// Mostly just for testing and legacy API reasons
-exports.toComparators = toComparators;
-function toComparators(range, loose) {
-  return new Range(range, loose).set.map(function(comp) {
-    return comp.map(function(c) {
-      return c.value;
-    }).join(' ').trim().split(' ');
-  });
-}
-
-// comprised of xranges, tildes, stars, and gtlt's at this point.
-// already replaced the hyphen ranges
-// turn into a set of JUST comparators.
-function parseComparator(comp, loose) {
-  debug('comp', comp);
-  comp = replaceCarets(comp, loose);
-  debug('caret', comp);
-  comp = replaceTildes(comp, loose);
-  debug('tildes', comp);
-  comp = replaceXRanges(comp, loose);
-  debug('xrange', comp);
-  comp = replaceStars(comp, loose);
-  debug('stars', comp);
-  return comp;
-}
-
-function isX(id) {
-  return !id || id.toLowerCase() === 'x' || id === '*';
-}
-
-// ~, ~> --> * (any, kinda silly)
-// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0
-// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0
-// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0
-// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0
-// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0
-function replaceTildes(comp, loose) {
-  return comp.trim().split(/\s+/).map(function(comp) {
-    return replaceTilde(comp, loose);
-  }).join(' ');
-}
-
-function replaceTilde(comp, loose) {
-  var r = loose ? re[TILDELOOSE] : re[TILDE];
-  return comp.replace(r, function(_, M, m, p, pr) {
-    debug('tilde', comp, _, M, m, p, pr);
-    var ret;
-
-    if (isX(M))
-      ret = '';
-    else if (isX(m))
-      ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0';
-    else if (isX(p))
-      // ~1.2 == >=1.2.0- <1.3.0-
-      ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0';
-    else if (pr) {
-      debug('replaceTilde pr', pr);
-      if (pr.charAt(0) !== '-')
-        pr = '-' + pr;
-      ret = '>=' + M + '.' + m + '.' + p + pr +
-            ' <' + M + '.' + (+m + 1) + '.0';
-    } else
-      // ~1.2.3 == >=1.2.3 <1.3.0
-      ret = '>=' + M + '.' + m + '.' + p +
-            ' <' + M + '.' + (+m + 1) + '.0';
-
-    debug('tilde return', ret);
-    return ret;
-  });
-}
-
-// ^ --> * (any, kinda silly)
-// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0
-// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0
-// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0
-// ^1.2.3 --> >=1.2.3 <2.0.0
-// ^1.2.0 --> >=1.2.0 <2.0.0
-function replaceCarets(comp, loose) {
-  return comp.trim().split(/\s+/).map(function(comp) {
-    return replaceCaret(comp, loose);
-  }).join(' ');
-}
-
-function replaceCaret(comp, loose) {
-  debug('caret', comp, loose);
-  var r = loose ? re[CARETLOOSE] : re[CARET];
-  return comp.replace(r, function(_, M, m, p, pr) {
-    debug('caret', comp, _, M, m, p, pr);
-    var ret;
-
-    if (isX(M))
-      ret = '';
-    else if (isX(m))
-      ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0';
-    else if (isX(p)) {
-      if (M === '0')
-        ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0';
-      else
-        ret = '>=' + M + '.' + m + '.0 <' + (+M + 1) + '.0.0';
-    } else if (pr) {
-      debug('replaceCaret pr', pr);
-      if (pr.charAt(0) !== '-')
-        pr = '-' + pr;
-      if (M === '0') {
-        if (m === '0')
-          ret = '>=' + M + '.' + m + '.' + p + pr +
-                ' <' + M + '.' + m + '.' + (+p + 1);
-        else
-          ret = '>=' + M + '.' + m + '.' + p + pr +
-                ' <' + M + '.' + (+m + 1) + '.0';
-      } else
-        ret = '>=' + M + '.' + m + '.' + p + pr +
-              ' <' + (+M + 1) + '.0.0';
-    } else {
-      debug('no pr');
-      if (M === '0') {
-        if (m === '0')
-          ret = '>=' + M + '.' + m + '.' + p +
-                ' <' + M + '.' + m + '.' + (+p + 1);
-        else
-          ret = '>=' + M + '.' + m + '.' + p +
-                ' <' + M + '.' + (+m + 1) + '.0';
-      } else
-        ret = '>=' + M + '.' + m + '.' + p +
-              ' <' + (+M + 1) + '.0.0';
-    }
-
-    debug('caret return', ret);
-    return ret;
-  });
-}
-
-function replaceXRanges(comp, loose) {
-  debug('replaceXRanges', comp, loose);
-  return comp.split(/\s+/).map(function(comp) {
-    return replaceXRange(comp, loose);
-  }).join(' ');
-}
-
-function replaceXRange(comp, loose) {
-  comp = comp.trim();
-  var r = loose ? re[XRANGELOOSE] : re[XRANGE];
-  return comp.replace(r, function(ret, gtlt, M, m, p, pr) {
-    debug('xRange', comp, ret, gtlt, M, m, p, pr);
-    var xM = isX(M);
-    var xm = xM || isX(m);
-    var xp = xm || isX(p);
-    var anyX = xp;
-
-    if (gtlt === '=' && anyX)
-      gtlt = '';
-
-    if (xM) {
-      if (gtlt === '>' || gtlt === '<') {
-        // nothing is allowed
-        ret = '<0.0.0';
-      } else {
-        // nothing is forbidden
-        ret = '*';
-      }
-    } else if (gtlt && anyX) {
-      // replace X with 0
-      if (xm)
-        m = 0;
-      if (xp)
-        p = 0;
-
-      if (gtlt === '>') {
-        // >1 => >=2.0.0
-        // >1.2 => >=1.3.0
-        // >1.2.3 => >= 1.2.4
-        gtlt = '>=';
-        if (xm) {
-          M = +M + 1;
-          m = 0;
-          p = 0;
-        } else if (xp) {
-          m = +m + 1;
-          p = 0;
-        }
-      } else if (gtlt === '<=') {
-        // <=0.7.x is actually <0.8.0, since any 0.7.x should
-        // pass.  Similarly, <=7.x is actually <8.0.0, etc.
-        gtlt = '<'
-        if (xm)
-          M = +M + 1
-        else
-          m = +m + 1
-      }
-
-      ret = gtlt + M + '.' + m + '.' + p;
-    } else if (xm) {
-      ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0';
-    } else if (xp) {
-      ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0';
-    }
-
-    debug('xRange return', ret);
-
-    return ret;
-  });
-}
-
-// Because * is AND-ed with everything else in the comparator,
-// and '' means "any version", just remove the *s entirely.
-function replaceStars(comp, loose) {
-  debug('replaceStars', comp, loose);
-  // Looseness is ignored here.  star is always as loose as it gets!
-  return comp.trim().replace(re[STAR], '');
-}
-
-// This function is passed to string.replace(re[HYPHENRANGE])
-// M, m, patch, prerelease, build
-// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5
-// 1.2.3 - 3.4 => >=1.2.0 <3.5.0 Any 3.4.x will do
-// 1.2 - 3.4 => >=1.2.0 <3.5.0
-function hyphenReplace($0,
-                       from, fM, fm, fp, fpr, fb,
-                       to, tM, tm, tp, tpr, tb) {
-
-  if (isX(fM))
-    from = '';
-  else if (isX(fm))
-    from = '>=' + fM + '.0.0';
-  else if (isX(fp))
-    from = '>=' + fM + '.' + fm + '.0';
-  else
-    from = '>=' + from;
-
-  if (isX(tM))
-    to = '';
-  else if (isX(tm))
-    to = '<' + (+tM + 1) + '.0.0';
-  else if (isX(tp))
-    to = '<' + tM + '.' + (+tm + 1) + '.0';
-  else if (tpr)
-    to = '<=' + tM + '.' + tm + '.' + tp + '-' + tpr;
-  else
-    to = '<=' + to;
-
-  return (from + ' ' + to).trim();
-}
-
-
-// if ANY of the sets match ALL of its comparators, then pass
-Range.prototype.test = function(version) {
-  if (!version)
-    return false;
-
-  if (typeof version === 'string')
-    version = new SemVer(version, this.loose);
-
-  for (var i = 0; i < this.set.length; i++) {
-    if (testSet(this.set[i], version))
-      return true;
-  }
-  return false;
-};
-
-function testSet(set, version) {
-  for (var i = 0; i < set.length; i++) {
-    if (!set[i].test(version))
-      return false;
-  }
-
-  if (version.prerelease.length) {
-    // Find the set of versions that are allowed to have prereleases
-    // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0
-    // That should allow `1.2.3-pr.2` to pass.
-    // However, `1.2.4-alpha.notready` should NOT be allowed,
-    // even though it's within the range set by the comparators.
-    for (var i = 0; i < set.length; i++) {
-      debug(set[i].semver);
-      if (set[i].semver === ANY)
-        continue;
-
-      if (set[i].semver.prerelease.length > 0) {
-        var allowed = set[i].semver;
-        if (allowed.major === version.major &&
-            allowed.minor === version.minor &&
-            allowed.patch === version.patch)
-          return true;
-      }
-    }
-
-    // Version has a -pre, but it's not one of the ones we like.
-    return false;
-  }
-
-  return true;
-}
-
-exports.satisfies = satisfies;
-function satisfies(version, range, loose) {
-  try {
-    range = new Range(range, loose);
-  } catch (er) {
-    return false;
-  }
-  return range.test(version);
-}
-
-exports.maxSatisfying = maxSatisfying;
-function maxSatisfying(versions, range, loose) {
-  return versions.filter(function(version) {
-    return satisfies(version, range, loose);
-  }).sort(function(a, b) {
-    return rcompare(a, b, loose);
-  })[0] || null;
-}
-
-exports.validRange = validRange;
-function validRange(range, loose) {
-  try {
-    // Return '*' instead of '' so that truthiness works.
-    // This will throw if it's invalid anyway
-    return new Range(range, loose).range || '*';
-  } catch (er) {
-    return null;
-  }
-}
-
-// Determine if version is less than all the versions possible in the range
-exports.ltr = ltr;
-function ltr(version, range, loose) {
-  return outside(version, range, '<', loose);
-}
-
-// Determine if version is greater than all the versions possible in the range.
-exports.gtr = gtr;
-function gtr(version, range, loose) {
-  return outside(version, range, '>', loose);
-}
-
-exports.outside = outside;
-function outside(version, range, hilo, loose) {
-  version = new SemVer(version, loose);
-  range = new Range(range, loose);
-
-  var gtfn, ltefn, ltfn, comp, ecomp;
-  switch (hilo) {
-    case '>':
-      gtfn = gt;
-      ltefn = lte;
-      ltfn = lt;
-      comp = '>';
-      ecomp = '>=';
-      break;
-    case '<':
-      gtfn = lt;
-      ltefn = gte;
-      ltfn = gt;
-      comp = '<';
-      ecomp = '<=';
-      break;
-    default:
-      throw new TypeError('Must provide a hilo val of "<" or ">"');
-  }
-
-  // If it satisifes the range it is not outside
-  if (satisfies(version, range, loose)) {
-    return false;
-  }
-
-  // From now on, variable terms are as if we're in "gtr" mode.
-  // but note that everything is flipped for the "ltr" function.
-
-  for (var i = 0; i < range.set.length; ++i) {
-    var comparators = range.set[i];
-
-    var high = null;
-    var low = null;
-
-    comparators.forEach(function(comparator) {
-      if (comparator.semver === ANY) {
-        comparator = new Comparator('>=0.0.0')
-      }
-      high = high || comparator;
-      low = low || comparator;
-      if (gtfn(comparator.semver, high.semver, loose)) {
-        high = comparator;
-      } else if (ltfn(comparator.semver, low.semver, loose)) {
-        low = comparator;
-      }
-    });
-
-    // If the edge version comparator has a operator then our version
-    // isn't outside it
-    if (high.operator === comp || high.operator === ecomp) {
-      return false;
-    }
-
-    // If the lowest version comparator has an operator and our version
-    // is less than it then it isn't higher than the range
-    if ((!low.operator || low.operator === comp) &&
-        ltefn(version, low.semver)) {
-      return false;
-    } else if (low.operator === ecomp && ltfn(version, low.semver)) {
-      return false;
-    }
-  }
-  return true;
-}
diff --git a/bin/node_modules/cordova-common/node_modules/semver/test/big-numbers.js b/bin/node_modules/cordova-common/node_modules/semver/test/big-numbers.js
deleted file mode 100644
index c051864..0000000
--- a/bin/node_modules/cordova-common/node_modules/semver/test/big-numbers.js
+++ /dev/null
@@ -1,31 +0,0 @@
-var test = require('tap').test
-var semver = require('../')
-
-test('long version is too long', function (t) {
-  var v = '1.2.' + new Array(256).join('1')
-  t.throws(function () {
-    new semver.SemVer(v)
-  })
-  t.equal(semver.valid(v, false), null)
-  t.equal(semver.valid(v, true), null)
-  t.equal(semver.inc(v, 'patch'), null)
-  t.end()
-})
-
-test('big number is like too long version', function (t) {
-  var v = '1.2.' + new Array(100).join('1')
-  t.throws(function () {
-    new semver.SemVer(v)
-  })
-  t.equal(semver.valid(v, false), null)
-  t.equal(semver.valid(v, true), null)
-  t.equal(semver.inc(v, 'patch'), null)
-  t.end()
-})
-
-test('parsing null does not throw', function (t) {
-  t.equal(semver.parse(null), null)
-  t.equal(semver.parse({}), null)
-  t.equal(semver.parse(new semver.SemVer('1.2.3')).version, '1.2.3')
-  t.end()
-})
diff --git a/bin/node_modules/cordova-common/node_modules/semver/test/clean.js b/bin/node_modules/cordova-common/node_modules/semver/test/clean.js
deleted file mode 100644
index 9e268de..0000000
--- a/bin/node_modules/cordova-common/node_modules/semver/test/clean.js
+++ /dev/null
@@ -1,29 +0,0 @@
-var tap = require('tap');
-var test = tap.test;
-var semver = require('../semver.js');
-var clean = semver.clean;
-
-test('\nclean tests', function(t) {
-	// [range, version]
-	// Version should be detectable despite extra characters
-	[
-		['1.2.3', '1.2.3'],
-		[' 1.2.3 ', '1.2.3'],
-		[' 1.2.3-4 ', '1.2.3-4'],
-		[' 1.2.3-pre ', '1.2.3-pre'],
-		['  =v1.2.3   ', '1.2.3'],
-		['v1.2.3', '1.2.3'],
-		[' v1.2.3 ', '1.2.3'],
-		['\t1.2.3', '1.2.3'],
-		['>1.2.3', null],
-		['~1.2.3', null],
-		['<=1.2.3', null],
-		['1.2.x', null]
-	].forEach(function(tuple) {
-			var range = tuple[0];
-			var version = tuple[1];
-			var msg = 'clean(' + range + ') = ' + version;
-			t.equal(clean(range), version, msg);
-		});
-	t.end();
-});
diff --git a/bin/node_modules/cordova-common/node_modules/semver/test/gtr.js b/bin/node_modules/cordova-common/node_modules/semver/test/gtr.js
deleted file mode 100644
index bbb8789..0000000
--- a/bin/node_modules/cordova-common/node_modules/semver/test/gtr.js
+++ /dev/null
@@ -1,173 +0,0 @@
-var tap = require('tap');
-var test = tap.test;
-var semver = require('../semver.js');
-var gtr = semver.gtr;
-
-test('\ngtr tests', function(t) {
-  // [range, version, loose]
-  // Version should be greater than range
-  [
-    ['~1.2.2', '1.3.0'],
-    ['~0.6.1-1', '0.7.1-1'],
-    ['1.0.0 - 2.0.0', '2.0.1'],
-    ['1.0.0', '1.0.1-beta1'],
-    ['1.0.0', '2.0.0'],
-    ['<=2.0.0', '2.1.1'],
-    ['<=2.0.0', '3.2.9'],
-    ['<2.0.0', '2.0.0'],
-    ['0.1.20 || 1.2.4', '1.2.5'],
-    ['2.x.x', '3.0.0'],
-    ['1.2.x', '1.3.0'],
-    ['1.2.x || 2.x', '3.0.0'],
-    ['2.*.*', '5.0.1'],
-    ['1.2.*', '1.3.3'],
-    ['1.2.* || 2.*', '4.0.0'],
-    ['2', '3.0.0'],
-    ['2.3', '2.4.2'],
-    ['~2.4', '2.5.0'], // >=2.4.0 <2.5.0
-    ['~2.4', '2.5.5'],
-    ['~>3.2.1', '3.3.0'], // >=3.2.1 <3.3.0
-    ['~1', '2.2.3'], // >=1.0.0 <2.0.0
-    ['~>1', '2.2.4'],
-    ['~> 1', '3.2.3'],
-    ['~1.0', '1.1.2'], // >=1.0.0 <1.1.0
-    ['~ 1.0', '1.1.0'],
-    ['<1.2', '1.2.0'],
-    ['< 1.2', '1.2.1'],
-    ['1', '2.0.0beta', true],
-    ['~v0.5.4-pre', '0.6.0'],
-    ['~v0.5.4-pre', '0.6.1-pre'],
-    ['=0.7.x', '0.8.0'],
-    ['=0.7.x', '0.8.0-asdf'],
-    ['<0.7.x', '0.7.0'],
-    ['~1.2.2', '1.3.0'],
-    ['1.0.0 - 2.0.0', '2.2.3'],
-    ['1.0.0', '1.0.1'],
-    ['<=2.0.0', '3.0.0'],
-    ['<=2.0.0', '2.9999.9999'],
-    ['<=2.0.0', '2.2.9'],
-    ['<2.0.0', '2.9999.9999'],
-    ['<2.0.0', '2.2.9'],
-    ['2.x.x', '3.1.3'],
-    ['1.2.x', '1.3.3'],
-    ['1.2.x || 2.x', '3.1.3'],
-    ['2.*.*', '3.1.3'],
-    ['1.2.*', '1.3.3'],
-    ['1.2.* || 2.*', '3.1.3'],
-    ['2', '3.1.2'],
-    ['2.3', '2.4.1'],
-    ['~2.4', '2.5.0'], // >=2.4.0 <2.5.0
-    ['~>3.2.1', '3.3.2'], // >=3.2.1 <3.3.0
-    ['~1', '2.2.3'], // >=1.0.0 <2.0.0
-    ['~>1', '2.2.3'],
-    ['~1.0', '1.1.0'], // >=1.0.0 <1.1.0
-    ['<1', '1.0.0'],
-    ['1', '2.0.0beta', true],
-    ['<1', '1.0.0beta', true],
-    ['< 1', '1.0.0beta', true],
-    ['=0.7.x', '0.8.2'],
-    ['<0.7.x', '0.7.2']
-  ].forEach(function(tuple) {
-    var range = tuple[0];
-    var version = tuple[1];
-    var loose = tuple[2] || false;
-    var msg = 'gtr(' + version + ', ' + range + ', ' + loose + ')';
-    t.ok(gtr(version, range, loose), msg);
-  });
-  t.end();
-});
-
-test('\nnegative gtr tests', function(t) {
-  // [range, version, loose]
-  // Version should NOT be greater than range
-  [
-    ['~0.6.1-1', '0.6.1-1'],
-    ['1.0.0 - 2.0.0', '1.2.3'],
-    ['1.0.0 - 2.0.0', '0.9.9'],
-    ['1.0.0', '1.0.0'],
-    ['>=*', '0.2.4'],
-    ['', '1.0.0', true],
-    ['*', '1.2.3'],
-    ['*', 'v1.2.3-foo'],
-    ['>=1.0.0', '1.0.0'],
-    ['>=1.0.0', '1.0.1'],
-    ['>=1.0.0', '1.1.0'],
-    ['>1.0.0', '1.0.1'],
-    ['>1.0.0', '1.1.0'],
-    ['<=2.0.0', '2.0.0'],
-    ['<=2.0.0', '1.9999.9999'],
-    ['<=2.0.0', '0.2.9'],
-    ['<2.0.0', '1.9999.9999'],
-    ['<2.0.0', '0.2.9'],
-    ['>= 1.0.0', '1.0.0'],
-    ['>=  1.0.0', '1.0.1'],
-    ['>=   1.0.0', '1.1.0'],
-    ['> 1.0.0', '1.0.1'],
-    ['>  1.0.0', '1.1.0'],
-    ['<=   2.0.0', '2.0.0'],
-    ['<= 2.0.0', '1.9999.9999'],
-    ['<=  2.0.0', '0.2.9'],
-    ['<    2.0.0', '1.9999.9999'],
-    ['<\t2.0.0', '0.2.9'],
-    ['>=0.1.97', 'v0.1.97'],
-    ['>=0.1.97', '0.1.97'],
-    ['0.1.20 || 1.2.4', '1.2.4'],
-    ['0.1.20 || >1.2.4', '1.2.4'],
-    ['0.1.20 || 1.2.4', '1.2.3'],
-    ['0.1.20 || 1.2.4', '0.1.20'],
-    ['>=0.2.3 || <0.0.1', '0.0.0'],
-    ['>=0.2.3 || <0.0.1', '0.2.3'],
-    ['>=0.2.3 || <0.0.1', '0.2.4'],
-    ['||', '1.3.4'],
-    ['2.x.x', '2.1.3'],
-    ['1.2.x', '1.2.3'],
-    ['1.2.x || 2.x', '2.1.3'],
-    ['1.2.x || 2.x', '1.2.3'],
-    ['x', '1.2.3'],
-    ['2.*.*', '2.1.3'],
-    ['1.2.*', '1.2.3'],
-    ['1.2.* || 2.*', '2.1.3'],
-    ['1.2.* || 2.*', '1.2.3'],
-    ['1.2.* || 2.*', '1.2.3'],
-    ['*', '1.2.3'],
-    ['2', '2.1.2'],
-    ['2.3', '2.3.1'],
-    ['~2.4', '2.4.0'], // >=2.4.0 <2.5.0
-    ['~2.4', '2.4.5'],
-    ['~>3.2.1', '3.2.2'], // >=3.2.1 <3.3.0
-    ['~1', '1.2.3'], // >=1.0.0 <2.0.0
-    ['~>1', '1.2.3'],
-    ['~> 1', '1.2.3'],
-    ['~1.0', '1.0.2'], // >=1.0.0 <1.1.0
-    ['~ 1.0', '1.0.2'],
-    ['>=1', '1.0.0'],
-    ['>= 1', '1.0.0'],
-    ['<1.2', '1.1.1'],
-    ['< 1.2', '1.1.1'],
-    ['1', '1.0.0beta', true],
-    ['~v0.5.4-pre', '0.5.5'],
-    ['~v0.5.4-pre', '0.5.4'],
-    ['=0.7.x', '0.7.2'],
-    ['>=0.7.x', '0.7.2'],
-    ['=0.7.x', '0.7.0-asdf'],
-    ['>=0.7.x', '0.7.0-asdf'],
-    ['<=0.7.x', '0.6.2'],
-    ['>0.2.3 >0.2.4 <=0.2.5', '0.2.5'],
-    ['>=0.2.3 <=0.2.4', '0.2.4'],
-    ['1.0.0 - 2.0.0', '2.0.0'],
-    ['^1', '0.0.0-0'],
-    ['^3.0.0', '2.0.0'],
-    ['^1.0.0 || ~2.0.1', '2.0.0'],
-    ['^0.1.0 || ~3.0.1 || 5.0.0', '3.2.0'],
-    ['^0.1.0 || ~3.0.1 || 5.0.0', '1.0.0beta', true],
-    ['^0.1.0 || ~3.0.1 || 5.0.0', '5.0.0-0', true],
-    ['^0.1.0 || ~3.0.1 || >4 <=5.0.0', '3.5.0']
-  ].forEach(function(tuple) {
-    var range = tuple[0];
-    var version = tuple[1];
-    var loose = tuple[2] || false;
-    var msg = '!gtr(' + version + ', ' + range + ', ' + loose + ')';
-    t.notOk(gtr(version, range, loose), msg);
-  });
-  t.end();
-});
diff --git a/bin/node_modules/cordova-common/node_modules/semver/test/index.js b/bin/node_modules/cordova-common/node_modules/semver/test/index.js
deleted file mode 100644
index 47c3f5f..0000000
--- a/bin/node_modules/cordova-common/node_modules/semver/test/index.js
+++ /dev/null
@@ -1,698 +0,0 @@
-'use strict';
-
-var tap = require('tap');
-var test = tap.test;
-var semver = require('../semver.js');
-var eq = semver.eq;
-var gt = semver.gt;
-var lt = semver.lt;
-var neq = semver.neq;
-var cmp = semver.cmp;
-var gte = semver.gte;
-var lte = semver.lte;
-var satisfies = semver.satisfies;
-var validRange = semver.validRange;
-var inc = semver.inc;
-var diff = semver.diff;
-var replaceStars = semver.replaceStars;
-var toComparators = semver.toComparators;
-var SemVer = semver.SemVer;
-var Range = semver.Range;
-
-test('\ncomparison tests', function(t) {
-  // [version1, version2]
-  // version1 should be greater than version2
-  [['0.0.0', '0.0.0-foo'],
-    ['0.0.1', '0.0.0'],
-    ['1.0.0', '0.9.9'],
-    ['0.10.0', '0.9.0'],
-    ['0.99.0', '0.10.0'],
-    ['2.0.0', '1.2.3'],
-    ['v0.0.0', '0.0.0-foo', true],
-    ['v0.0.1', '0.0.0', true],
-    ['v1.0.0', '0.9.9', true],
-    ['v0.10.0', '0.9.0', true],
-    ['v0.99.0', '0.10.0', true],
-    ['v2.0.0', '1.2.3', true],
-    ['0.0.0', 'v0.0.0-foo', true],
-    ['0.0.1', 'v0.0.0', true],
-    ['1.0.0', 'v0.9.9', true],
-    ['0.10.0', 'v0.9.0', true],
-    ['0.99.0', 'v0.10.0', true],
-    ['2.0.0', 'v1.2.3', true],
-    ['1.2.3', '1.2.3-asdf'],
-    ['1.2.3', '1.2.3-4'],
-    ['1.2.3', '1.2.3-4-foo'],
-    ['1.2.3-5-foo', '1.2.3-5'],
-    ['1.2.3-5', '1.2.3-4'],
-    ['1.2.3-5-foo', '1.2.3-5-Foo'],
-    ['3.0.0', '2.7.2+asdf'],
-    ['1.2.3-a.10', '1.2.3-a.5'],
-    ['1.2.3-a.b', '1.2.3-a.5'],
-    ['1.2.3-a.b', '1.2.3-a'],
-    ['1.2.3-a.b.c.10.d.5', '1.2.3-a.b.c.5.d.100'],
-    ['1.2.3-r2', '1.2.3-r100'],
-    ['1.2.3-r100', '1.2.3-R2']
-  ].forEach(function(v) {
-    var v0 = v[0];
-    var v1 = v[1];
-    var loose = v[2];
-    t.ok(gt(v0, v1, loose), "gt('" + v0 + "', '" + v1 + "')");
-    t.ok(lt(v1, v0, loose), "lt('" + v1 + "', '" + v0 + "')");
-    t.ok(!gt(v1, v0, loose), "!gt('" + v1 + "', '" + v0 + "')");
-    t.ok(!lt(v0, v1, loose), "!lt('" + v0 + "', '" + v1 + "')");
-    t.ok(eq(v0, v0, loose), "eq('" + v0 + "', '" + v0 + "')");
-    t.ok(eq(v1, v1, loose), "eq('" + v1 + "', '" + v1 + "')");
-    t.ok(neq(v0, v1, loose), "neq('" + v0 + "', '" + v1 + "')");
-    t.ok(cmp(v1, '==', v1, loose), "cmp('" + v1 + "' == '" + v1 + "')");
-    t.ok(cmp(v0, '>=', v1, loose), "cmp('" + v0 + "' >= '" + v1 + "')");
-    t.ok(cmp(v1, '<=', v0, loose), "cmp('" + v1 + "' <= '" + v0 + "')");
-    t.ok(cmp(v0, '!=', v1, loose), "cmp('" + v0 + "' != '" + v1 + "')");
-  });
-  t.end();
-});
-
-test('\nequality tests', function(t) {
-  // [version1, version2]
-  // version1 should be equivalent to version2
-  [['1.2.3', 'v1.2.3', true],
-    ['1.2.3', '=1.2.3', true],
-    ['1.2.3', 'v 1.2.3', true],
-    ['1.2.3', '= 1.2.3', true],
-    ['1.2.3', ' v1.2.3', true],
-    ['1.2.3', ' =1.2.3', true],
-    ['1.2.3', ' v 1.2.3', true],
-    ['1.2.3', ' = 1.2.3', true],
-    ['1.2.3-0', 'v1.2.3-0', true],
-    ['1.2.3-0', '=1.2.3-0', true],
-    ['1.2.3-0', 'v 1.2.3-0', true],
-    ['1.2.3-0', '= 1.2.3-0', true],
-    ['1.2.3-0', ' v1.2.3-0', true],
-    ['1.2.3-0', ' =1.2.3-0', true],
-    ['1.2.3-0', ' v 1.2.3-0', true],
-    ['1.2.3-0', ' = 1.2.3-0', true],
-    ['1.2.3-1', 'v1.2.3-1', true],
-    ['1.2.3-1', '=1.2.3-1', true],
-    ['1.2.3-1', 'v 1.2.3-1', true],
-    ['1.2.3-1', '= 1.2.3-1', true],
-    ['1.2.3-1', ' v1.2.3-1', true],
-    ['1.2.3-1', ' =1.2.3-1', true],
-    ['1.2.3-1', ' v 1.2.3-1', true],
-    ['1.2.3-1', ' = 1.2.3-1', true],
-    ['1.2.3-beta', 'v1.2.3-beta', true],
-    ['1.2.3-beta', '=1.2.3-beta', true],
-    ['1.2.3-beta', 'v 1.2.3-beta', true],
-    ['1.2.3-beta', '= 1.2.3-beta', true],
-    ['1.2.3-beta', ' v1.2.3-beta', true],
-    ['1.2.3-beta', ' =1.2.3-beta', true],
-    ['1.2.3-beta', ' v 1.2.3-beta', true],
-    ['1.2.3-beta', ' = 1.2.3-beta', true],
-    ['1.2.3-beta+build', ' = 1.2.3-beta+otherbuild', true],
-    ['1.2.3+build', ' = 1.2.3+otherbuild', true],
-    ['1.2.3-beta+build', '1.2.3-beta+otherbuild'],
-    ['1.2.3+build', '1.2.3+otherbuild'],
-    ['  v1.2.3+build', '1.2.3+otherbuild']
-  ].forEach(function(v) {
-    var v0 = v[0];
-    var v1 = v[1];
-    var loose = v[2];
-    t.ok(eq(v0, v1, loose), "eq('" + v0 + "', '" + v1 + "')");
-    t.ok(!neq(v0, v1, loose), "!neq('" + v0 + "', '" + v1 + "')");
-    t.ok(cmp(v0, '==', v1, loose), 'cmp(' + v0 + '==' + v1 + ')');
-    t.ok(!cmp(v0, '!=', v1, loose), '!cmp(' + v0 + '!=' + v1 + ')');
-    t.ok(!cmp(v0, '===', v1, loose), '!cmp(' + v0 + '===' + v1 + ')');
-    t.ok(cmp(v0, '!==', v1, loose), 'cmp(' + v0 + '!==' + v1 + ')');
-    t.ok(!gt(v0, v1, loose), "!gt('" + v0 + "', '" + v1 + "')");
-    t.ok(gte(v0, v1, loose), "gte('" + v0 + "', '" + v1 + "')");
-    t.ok(!lt(v0, v1, loose), "!lt('" + v0 + "', '" + v1 + "')");
-    t.ok(lte(v0, v1, loose), "lte('" + v0 + "', '" + v1 + "')");
-  });
-  t.end();
-});
-
-
-test('\nrange tests', function(t) {
-  // [range, version]
-  // version should be included by range
-  [['1.0.0 - 2.0.0', '1.2.3'],
-    ['^1.2.3+build', '1.2.3'],
-    ['^1.2.3+build', '1.3.0'],
-    ['1.2.3-pre+asdf - 2.4.3-pre+asdf', '1.2.3'],
-    ['1.2.3pre+asdf - 2.4.3-pre+asdf', '1.2.3', true],
-    ['1.2.3-pre+asdf - 2.4.3pre+asdf', '1.2.3', true],
-    ['1.2.3pre+asdf - 2.4.3pre+asdf', '1.2.3', true],
-    ['1.2.3-pre+asdf - 2.4.3-pre+asdf', '1.2.3-pre.2'],
-    ['1.2.3-pre+asdf - 2.4.3-pre+asdf', '2.4.3-alpha'],
-    ['1.2.3+asdf - 2.4.3+asdf', '1.2.3'],
-    ['1.0.0', '1.0.0'],
-    ['>=*', '0.2.4'],
-    ['', '1.0.0'],
-    ['*', '1.2.3'],
-    ['*', 'v1.2.3', true],
-    ['>=1.0.0', '1.0.0'],
-    ['>=1.0.0', '1.0.1'],
-    ['>=1.0.0', '1.1.0'],
-    ['>1.0.0', '1.0.1'],
-    ['>1.0.0', '1.1.0'],
-    ['<=2.0.0', '2.0.0'],
-    ['<=2.0.0', '1.9999.9999'],
-    ['<=2.0.0', '0.2.9'],
-    ['<2.0.0', '1.9999.9999'],
-    ['<2.0.0', '0.2.9'],
-    ['>= 1.0.0', '1.0.0'],
-    ['>=  1.0.0', '1.0.1'],
-    ['>=   1.0.0', '1.1.0'],
-    ['> 1.0.0', '1.0.1'],
-    ['>  1.0.0', '1.1.0'],
-    ['<=   2.0.0', '2.0.0'],
-    ['<= 2.0.0', '1.9999.9999'],
-    ['<=  2.0.0', '0.2.9'],
-    ['<    2.0.0', '1.9999.9999'],
-    ['<\t2.0.0', '0.2.9'],
-    ['>=0.1.97', 'v0.1.97', true],
-    ['>=0.1.97', '0.1.97'],
-    ['0.1.20 || 1.2.4', '1.2.4'],
-    ['>=0.2.3 || <0.0.1', '0.0.0'],
-    ['>=0.2.3 || <0.0.1', '0.2.3'],
-    ['>=0.2.3 || <0.0.1', '0.2.4'],
-    ['||', '1.3.4'],
-    ['2.x.x', '2.1.3'],
-    ['1.2.x', '1.2.3'],
-    ['1.2.x || 2.x', '2.1.3'],
-    ['1.2.x || 2.x', '1.2.3'],
-    ['x', '1.2.3'],
-    ['2.*.*', '2.1.3'],
-    ['1.2.*', '1.2.3'],
-    ['1.2.* || 2.*', '2.1.3'],
-    ['1.2.* || 2.*', '1.2.3'],
-    ['*', '1.2.3'],
-    ['2', '2.1.2'],
-    ['2.3', '2.3.1'],
-    ['~2.4', '2.4.0'], // >=2.4.0 <2.5.0
-    ['~2.4', '2.4.5'],
-    ['~>3.2.1', '3.2.2'], // >=3.2.1 <3.3.0,
-    ['~1', '1.2.3'], // >=1.0.0 <2.0.0
-    ['~>1', '1.2.3'],
-    ['~> 1', '1.2.3'],
-    ['~1.0', '1.0.2'], // >=1.0.0 <1.1.0,
-    ['~ 1.0', '1.0.2'],
-    ['~ 1.0.3', '1.0.12'],
-    ['>=1', '1.0.0'],
-    ['>= 1', '1.0.0'],
-    ['<1.2', '1.1.1'],
-    ['< 1.2', '1.1.1'],
-    ['~v0.5.4-pre', '0.5.5'],
-    ['~v0.5.4-pre', '0.5.4'],
-    ['=0.7.x', '0.7.2'],
-    ['<=0.7.x', '0.7.2'],
-    ['>=0.7.x', '0.7.2'],
-    ['<=0.7.x', '0.6.2'],
-    ['~1.2.1 >=1.2.3', '1.2.3'],
-    ['~1.2.1 =1.2.3', '1.2.3'],
-    ['~1.2.1 1.2.3', '1.2.3'],
-    ['~1.2.1 >=1.2.3 1.2.3', '1.2.3'],
-    ['~1.2.1 1.2.3 >=1.2.3', '1.2.3'],
-    ['~1.2.1 1.2.3', '1.2.3'],
-    ['>=1.2.1 1.2.3', '1.2.3'],
-    ['1.2.3 >=1.2.1', '1.2.3'],
-    ['>=1.2.3 >=1.2.1', '1.2.3'],
-    ['>=1.2.1 >=1.2.3', '1.2.3'],
-    ['>=1.2', '1.2.8'],
-    ['^1.2.3', '1.8.1'],
-    ['^0.1.2', '0.1.2'],
-    ['^0.1', '0.1.2'],
-    ['^1.2', '1.4.2'],
-    ['^1.2 ^1', '1.4.2'],
-    ['^1.2.3-alpha', '1.2.3-pre'],
-    ['^1.2.0-alpha', '1.2.0-pre'],
-    ['^0.0.1-alpha', '0.0.1-beta']
-  ].forEach(function(v) {
-    var range = v[0];
-    var ver = v[1];
-    var loose = v[2];
-    t.ok(satisfies(ver, range, loose), range + ' satisfied by ' + ver);
-  });
-  t.end();
-});
-
-test('\nnegative range tests', function(t) {
-  // [range, version]
-  // version should not be included by range
-  [['1.0.0 - 2.0.0', '2.2.3'],
-    ['1.2.3+asdf - 2.4.3+asdf', '1.2.3-pre.2'],
-    ['1.2.3+asdf - 2.4.3+asdf', '2.4.3-alpha'],
-    ['^1.2.3+build', '2.0.0'],
-    ['^1.2.3+build', '1.2.0'],
-    ['^1.2.3', '1.2.3-pre'],
-    ['^1.2', '1.2.0-pre'],
-    ['>1.2', '1.3.0-beta'],
-    ['<=1.2.3', '1.2.3-beta'],
-    ['^1.2.3', '1.2.3-beta'],
-    ['=0.7.x', '0.7.0-asdf'],
-    ['>=0.7.x', '0.7.0-asdf'],
-    ['1', '1.0.0beta', true],
-    ['<1', '1.0.0beta', true],
-    ['< 1', '1.0.0beta', true],
-    ['1.0.0', '1.0.1'],
-    ['>=1.0.0', '0.0.0'],
-    ['>=1.0.0', '0.0.1'],
-    ['>=1.0.0', '0.1.0'],
-    ['>1.0.0', '0.0.1'],
-    ['>1.0.0', '0.1.0'],
-    ['<=2.0.0', '3.0.0'],
-    ['<=2.0.0', '2.9999.9999'],
-    ['<=2.0.0', '2.2.9'],
-    ['<2.0.0', '2.9999.9999'],
-    ['<2.0.0', '2.2.9'],
-    ['>=0.1.97', 'v0.1.93', true],
-    ['>=0.1.97', '0.1.93'],
-    ['0.1.20 || 1.2.4', '1.2.3'],
-    ['>=0.2.3 || <0.0.1', '0.0.3'],
-    ['>=0.2.3 || <0.0.1', '0.2.2'],
-    ['2.x.x', '1.1.3'],
-    ['2.x.x', '3.1.3'],
-    ['1.2.x', '1.3.3'],
-    ['1.2.x || 2.x', '3.1.3'],
-    ['1.2.x || 2.x', '1.1.3'],
-    ['2.*.*', '1.1.3'],
-    ['2.*.*', '3.1.3'],
-    ['1.2.*', '1.3.3'],
-    ['1.2.* || 2.*', '3.1.3'],
-    ['1.2.* || 2.*', '1.1.3'],
-    ['2', '1.1.2'],
-    ['2.3', '2.4.1'],
-    ['~2.4', '2.5.0'], // >=2.4.0 <2.5.0
-    ['~2.4', '2.3.9'],
-    ['~>3.2.1', '3.3.2'], // >=3.2.1 <3.3.0
-    ['~>3.2.1', '3.2.0'], // >=3.2.1 <3.3.0
-    ['~1', '0.2.3'], // >=1.0.0 <2.0.0
-    ['~>1', '2.2.3'],
-    ['~1.0', '1.1.0'], // >=1.0.0 <1.1.0
-    ['<1', '1.0.0'],
-    ['>=1.2', '1.1.1'],
-    ['1', '2.0.0beta', true],
-    ['~v0.5.4-beta', '0.5.4-alpha'],
-    ['=0.7.x', '0.8.2'],
-    ['>=0.7.x', '0.6.2'],
-    ['<0.7.x', '0.7.2'],
-    ['<1.2.3', '1.2.3-beta'],
-    ['=1.2.3', '1.2.3-beta'],
-    ['>1.2', '1.2.8'],
-    ['^1.2.3', '2.0.0-alpha'],
-    ['^1.2.3', '1.2.2'],
-    ['^1.2', '1.1.9'],
-    ['*', 'v1.2.3-foo', true],
-    // invalid ranges never satisfied!
-    ['blerg', '1.2.3'],
-    ['git+https://user:password0123@github.com/foo', '123.0.0', true],
-    ['^1.2.3', '2.0.0-pre']
-  ].forEach(function(v) {
-    var range = v[0];
-    var ver = v[1];
-    var loose = v[2];
-    var found = satisfies(ver, range, loose);
-    t.ok(!found, ver + ' not satisfied by ' + range);
-  });
-  t.end();
-});
-
-test('\nincrement versions test', function(t) {
-//  [version, inc, result, identifier]
-//  inc(version, inc) -> result
-  [['1.2.3', 'major', '2.0.0'],
-    ['1.2.3', 'minor', '1.3.0'],
-    ['1.2.3', 'patch', '1.2.4'],
-    ['1.2.3tag', 'major', '2.0.0', true],
-    ['1.2.3-tag', 'major', '2.0.0'],
-    ['1.2.3', 'fake', null],
-    ['1.2.0-0', 'patch', '1.2.0'],
-    ['fake', 'major', null],
-    ['1.2.3-4', 'major', '2.0.0'],
-    ['1.2.3-4', 'minor', '1.3.0'],
-    ['1.2.3-4', 'patch', '1.2.3'],
-    ['1.2.3-alpha.0.beta', 'major', '2.0.0'],
-    ['1.2.3-alpha.0.beta', 'minor', '1.3.0'],
-    ['1.2.3-alpha.0.beta', 'patch', '1.2.3'],
-    ['1.2.4', 'prerelease', '1.2.5-0'],
-    ['1.2.3-0', 'prerelease', '1.2.3-1'],
-    ['1.2.3-alpha.0', 'prerelease', '1.2.3-alpha.1'],
-    ['1.2.3-alpha.1', 'prerelease', '1.2.3-alpha.2'],
-    ['1.2.3-alpha.2', 'prerelease', '1.2.3-alpha.3'],
-    ['1.2.3-alpha.0.beta', 'prerelease', '1.2.3-alpha.1.beta'],
-    ['1.2.3-alpha.1.beta', 'prerelease', '1.2.3-alpha.2.beta'],
-    ['1.2.3-alpha.2.beta', 'prerelease', '1.2.3-alpha.3.beta'],
-    ['1.2.3-alpha.10.0.beta', 'prerelease', '1.2.3-alpha.10.1.beta'],
-    ['1.2.3-alpha.10.1.beta', 'prerelease', '1.2.3-alpha.10.2.beta'],
-    ['1.2.3-alpha.10.2.beta', 'prerelease', '1.2.3-alpha.10.3.beta'],
-    ['1.2.3-alpha.10.beta.0', 'prerelease', '1.2.3-alpha.10.beta.1'],
-    ['1.2.3-alpha.10.beta.1', 'prerelease', '1.2.3-alpha.10.beta.2'],
-    ['1.2.3-alpha.10.beta.2', 'prerelease', '1.2.3-alpha.10.beta.3'],
-    ['1.2.3-alpha.9.beta', 'prerelease', '1.2.3-alpha.10.beta'],
-    ['1.2.3-alpha.10.beta', 'prerelease', '1.2.3-alpha.11.beta'],
-    ['1.2.3-alpha.11.beta', 'prerelease', '1.2.3-alpha.12.beta'],
-    ['1.2.0', 'prepatch', '1.2.1-0'],
-    ['1.2.0-1', 'prepatch', '1.2.1-0'],
-    ['1.2.0', 'preminor', '1.3.0-0'],
-    ['1.2.3-1', 'preminor', '1.3.0-0'],
-    ['1.2.0', 'premajor', '2.0.0-0'],
-    ['1.2.3-1', 'premajor', '2.0.0-0'],
-    ['1.2.0-1', 'minor', '1.2.0'],
-    ['1.0.0-1', 'major', '1.0.0'],
-
-    ['1.2.3', 'major', '2.0.0', false, 'dev'],
-    ['1.2.3', 'minor', '1.3.0', false, 'dev'],
-    ['1.2.3', 'patch', '1.2.4', false, 'dev'],
-    ['1.2.3tag', 'major', '2.0.0', true, 'dev'],
-    ['1.2.3-tag', 'major', '2.0.0', false, 'dev'],
-    ['1.2.3', 'fake', null, false, 'dev'],
-    ['1.2.0-0', 'patch', '1.2.0', false, 'dev'],
-    ['fake', 'major', null, false, 'dev'],
-    ['1.2.3-4', 'major', '2.0.0', false, 'dev'],
-    ['1.2.3-4', 'minor', '1.3.0', false, 'dev'],
-    ['1.2.3-4', 'patch', '1.2.3', false, 'dev'],
-    ['1.2.3-alpha.0.beta', 'major', '2.0.0', false, 'dev'],
-    ['1.2.3-alpha.0.beta', 'minor', '1.3.0', false, 'dev'],
-    ['1.2.3-alpha.0.beta', 'patch', '1.2.3', false, 'dev'],
-    ['1.2.4', 'prerelease', '1.2.5-dev.0', false, 'dev'],
-    ['1.2.3-0', 'prerelease', '1.2.3-dev.0', false, 'dev'],
-    ['1.2.3-alpha.0', 'prerelease', '1.2.3-dev.0', false, 'dev'],
-    ['1.2.3-alpha.0', 'prerelease', '1.2.3-alpha.1', false, 'alpha'],
-    ['1.2.3-alpha.0.beta', 'prerelease', '1.2.3-dev.0', false, 'dev'],
-    ['1.2.3-alpha.0.beta', 'prerelease', '1.2.3-alpha.1.beta', false, 'alpha'],
-    ['1.2.3-alpha.10.0.beta', 'prerelease', '1.2.3-dev.0', false, 'dev'],
-    ['1.2.3-alpha.10.0.beta', 'prerelease', '1.2.3-alpha.10.1.beta', false, 'alpha'],
-    ['1.2.3-alpha.10.1.beta', 'prerelease', '1.2.3-alpha.10.2.beta', false, 'alpha'],
-    ['1.2.3-alpha.10.2.beta', 'prerelease', '1.2.3-alpha.10.3.beta', false, 'alpha'],
-    ['1.2.3-alpha.10.beta.0', 'prerelease', '1.2.3-dev.0', false, 'dev'],
-    ['1.2.3-alpha.10.beta.0', 'prerelease', '1.2.3-alpha.10.beta.1', false, 'alpha'],
-    ['1.2.3-alpha.10.beta.1', 'prerelease', '1.2.3-alpha.10.beta.2', false, 'alpha'],
-    ['1.2.3-alpha.10.beta.2', 'prerelease', '1.2.3-alpha.10.beta.3', false, 'alpha'],
-    ['1.2.3-alpha.9.beta', 'prerelease', '1.2.3-dev.0', false, 'dev'],
-    ['1.2.3-alpha.9.beta', 'prerelease', '1.2.3-alpha.10.beta', false, 'alpha'],
-    ['1.2.3-alpha.10.beta', 'prerelease', '1.2.3-alpha.11.beta', false, 'alpha'],
-    ['1.2.3-alpha.11.beta', 'prerelease', '1.2.3-alpha.12.beta', false, 'alpha'],
-    ['1.2.0', 'prepatch', '1.2.1-dev.0', false, 'dev'],
-    ['1.2.0-1', 'prepatch', '1.2.1-dev.0', false, 'dev'],
-    ['1.2.0', 'preminor', '1.3.0-dev.0', false, 'dev'],
-    ['1.2.3-1', 'preminor', '1.3.0-dev.0', false, 'dev'],
-    ['1.2.0', 'premajor', '2.0.0-dev.0', false, 'dev'],
-    ['1.2.3-1', 'premajor', '2.0.0-dev.0', false, 'dev'],
-    ['1.2.0-1', 'minor', '1.2.0', false, 'dev'],
-    ['1.0.0-1', 'major', '1.0.0', false, 'dev'],
-    ['1.2.3-dev.bar', 'prerelease', '1.2.3-dev.0', false, 'dev']
-
-  ].forEach(function(v) {
-    var pre = v[0];
-    var what = v[1];
-    var wanted = v[2];
-    var loose = v[3];
-    var id = v[4];
-    var found = inc(pre, what, loose, id);
-    var cmd = 'inc(' + pre + ', ' + what + ', ' + id + ')';
-    t.equal(found, wanted, cmd + ' === ' + wanted);
-
-    var parsed = semver.parse(pre, loose);
-    if (wanted) {
-      parsed.inc(what, id);
-      t.equal(parsed.version, wanted, cmd + ' object version updated');
-      t.equal(parsed.raw, wanted, cmd + ' object raw field updated');
-    } else if (parsed) {
-      t.throws(function () {
-        parsed.inc(what, id)
-      })
-    } else {
-      t.equal(parsed, null)
-    }
-  });
-
-  t.end();
-});
-
-test('\ndiff versions test', function(t) {
-//  [version1, version2, result]
-//  diff(version1, version2) -> result
-  [['1.2.3', '0.2.3', 'major'],
-    ['1.4.5', '0.2.3', 'major'],
-    ['1.2.3', '2.0.0-pre', 'premajor'],
-    ['1.2.3', '1.3.3', 'minor'],
-    ['1.0.1', '1.1.0-pre', 'preminor'],
-    ['1.2.3', '1.2.4', 'patch'],
-    ['1.2.3', '1.2.4-pre', 'prepatch'],
-    ['0.0.1', '0.0.1-pre', 'prerelease'],
-    ['0.0.1', '0.0.1-pre-2', 'prerelease'],
-    ['1.1.0', '1.1.0-pre', 'prerelease'],
-    ['1.1.0-pre-1', '1.1.0-pre-2', 'prerelease'],
-    ['1.0.0', '1.0.0', null]
-
-  ].forEach(function(v) {
-    var version1 = v[0];
-    var version2 = v[1];
-    var wanted = v[2];
-    var found = diff(version1, version2);
-    var cmd = 'diff(' + version1 + ', ' + version2 + ')';
-    t.equal(found, wanted, cmd + ' === ' + wanted);
-  });
-
-  t.end();
-});
-
-test('\nvalid range test', function(t) {
-  // [range, result]
-  // validRange(range) -> result
-  // translate ranges into their canonical form
-  [['1.0.0 - 2.0.0', '>=1.0.0 <=2.0.0'],
-    ['1.0.0', '1.0.0'],
-    ['>=*', '*'],
-    ['', '*'],
-    ['*', '*'],
-    ['*', '*'],
-    ['>=1.0.0', '>=1.0.0'],
-    ['>1.0.0', '>1.0.0'],
-    ['<=2.0.0', '<=2.0.0'],
-    ['1', '>=1.0.0 <2.0.0'],
-    ['<=2.0.0', '<=2.0.0'],
-    ['<=2.0.0', '<=2.0.0'],
-    ['<2.0.0', '<2.0.0'],
-    ['<2.0.0', '<2.0.0'],
-    ['>= 1.0.0', '>=1.0.0'],
-    ['>=  1.0.0', '>=1.0.0'],
-    ['>=   1.0.0', '>=1.0.0'],
-    ['> 1.0.0', '>1.0.0'],
-    ['>  1.0.0', '>1.0.0'],
-    ['<=   2.0.0', '<=2.0.0'],
-    ['<= 2.0.0', '<=2.0.0'],
-    ['<=  2.0.0', '<=2.0.0'],
-    ['<    2.0.0', '<2.0.0'],
-    ['<	2.0.0', '<2.0.0'],
-    ['>=0.1.97', '>=0.1.97'],
-    ['>=0.1.97', '>=0.1.97'],
-    ['0.1.20 || 1.2.4', '0.1.20||1.2.4'],
-    ['>=0.2.3 || <0.0.1', '>=0.2.3||<0.0.1'],
-    ['>=0.2.3 || <0.0.1', '>=0.2.3||<0.0.1'],
-    ['>=0.2.3 || <0.0.1', '>=0.2.3||<0.0.1'],
-    ['||', '||'],
-    ['2.x.x', '>=2.0.0 <3.0.0'],
-    ['1.2.x', '>=1.2.0 <1.3.0'],
-    ['1.2.x || 2.x', '>=1.2.0 <1.3.0||>=2.0.0 <3.0.0'],
-    ['1.2.x || 2.x', '>=1.2.0 <1.3.0||>=2.0.0 <3.0.0'],
-    ['x', '*'],
-    ['2.*.*', '>=2.0.0 <3.0.0'],
-    ['1.2.*', '>=1.2.0 <1.3.0'],
-    ['1.2.* || 2.*', '>=1.2.0 <1.3.0||>=2.0.0 <3.0.0'],
-    ['*', '*'],
-    ['2', '>=2.0.0 <3.0.0'],
-    ['2.3', '>=2.3.0 <2.4.0'],
-    ['~2.4', '>=2.4.0 <2.5.0'],
-    ['~2.4', '>=2.4.0 <2.5.0'],
-    ['~>3.2.1', '>=3.2.1 <3.3.0'],
-    ['~1', '>=1.0.0 <2.0.0'],
-    ['~>1', '>=1.0.0 <2.0.0'],
-    ['~> 1', '>=1.0.0 <2.0.0'],
-    ['~1.0', '>=1.0.0 <1.1.0'],
-    ['~ 1.0', '>=1.0.0 <1.1.0'],
-    ['^0', '>=0.0.0 <1.0.0'],
-    ['^ 1', '>=1.0.0 <2.0.0'],
-    ['^0.1', '>=0.1.0 <0.2.0'],
-    ['^1.0', '>=1.0.0 <2.0.0'],
-    ['^1.2', '>=1.2.0 <2.0.0'],
-    ['^0.0.1', '>=0.0.1 <0.0.2'],
-    ['^0.0.1-beta', '>=0.0.1-beta <0.0.2'],
-    ['^0.1.2', '>=0.1.2 <0.2.0'],
-    ['^1.2.3', '>=1.2.3 <2.0.0'],
-    ['^1.2.3-beta.4', '>=1.2.3-beta.4 <2.0.0'],
-    ['<1', '<1.0.0'],
-    ['< 1', '<1.0.0'],
-    ['>=1', '>=1.0.0'],
-    ['>= 1', '>=1.0.0'],
-    ['<1.2', '<1.2.0'],
-    ['< 1.2', '<1.2.0'],
-    ['1', '>=1.0.0 <2.0.0'],
-    ['>01.02.03', '>1.2.3', true],
-    ['>01.02.03', null],
-    ['~1.2.3beta', '>=1.2.3-beta <1.3.0', true],
-    ['~1.2.3beta', null],
-    ['^ 1.2 ^ 1', '>=1.2.0 <2.0.0 >=1.0.0 <2.0.0']
-  ].forEach(function(v) {
-    var pre = v[0];
-    var wanted = v[1];
-    var loose = v[2];
-    var found = validRange(pre, loose);
-
-    t.equal(found, wanted, 'validRange(' + pre + ') === ' + wanted);
-  });
-
-  t.end();
-});
-
-test('\ncomparators test', function(t) {
-  // [range, comparators]
-  // turn range into a set of individual comparators
-  [['1.0.0 - 2.0.0', [['>=1.0.0', '<=2.0.0']]],
-    ['1.0.0', [['1.0.0']]],
-    ['>=*', [['']]],
-    ['', [['']]],
-    ['*', [['']]],
-    ['*', [['']]],
-    ['>=1.0.0', [['>=1.0.0']]],
-    ['>=1.0.0', [['>=1.0.0']]],
-    ['>=1.0.0', [['>=1.0.0']]],
-    ['>1.0.0', [['>1.0.0']]],
-    ['>1.0.0', [['>1.0.0']]],
-    ['<=2.0.0', [['<=2.0.0']]],
-    ['1', [['>=1.0.0', '<2.0.0']]],
-    ['<=2.0.0', [['<=2.0.0']]],
-    ['<=2.0.0', [['<=2.0.0']]],
-    ['<2.0.0', [['<2.0.0']]],
-    ['<2.0.0', [['<2.0.0']]],
-    ['>= 1.0.0', [['>=1.0.0']]],
-    ['>=  1.0.0', [['>=1.0.0']]],
-    ['>=   1.0.0', [['>=1.0.0']]],
-    ['> 1.0.0', [['>1.0.0']]],
-    ['>  1.0.0', [['>1.0.0']]],
-    ['<=   2.0.0', [['<=2.0.0']]],
-    ['<= 2.0.0', [['<=2.0.0']]],
-    ['<=  2.0.0', [['<=2.0.0']]],
-    ['<    2.0.0', [['<2.0.0']]],
-    ['<\t2.0.0', [['<2.0.0']]],
-    ['>=0.1.97', [['>=0.1.97']]],
-    ['>=0.1.97', [['>=0.1.97']]],
-    ['0.1.20 || 1.2.4', [['0.1.20'], ['1.2.4']]],
-    ['>=0.2.3 || <0.0.1', [['>=0.2.3'], ['<0.0.1']]],
-    ['>=0.2.3 || <0.0.1', [['>=0.2.3'], ['<0.0.1']]],
-    ['>=0.2.3 || <0.0.1', [['>=0.2.3'], ['<0.0.1']]],
-    ['||', [[''], ['']]],
-    ['2.x.x', [['>=2.0.0', '<3.0.0']]],
-    ['1.2.x', [['>=1.2.0', '<1.3.0']]],
-    ['1.2.x || 2.x', [['>=1.2.0', '<1.3.0'], ['>=2.0.0', '<3.0.0']]],
-    ['1.2.x || 2.x', [['>=1.2.0', '<1.3.0'], ['>=2.0.0', '<3.0.0']]],
-    ['x', [['']]],
-    ['2.*.*', [['>=2.0.0', '<3.0.0']]],
-    ['1.2.*', [['>=1.2.0', '<1.3.0']]],
-    ['1.2.* || 2.*', [['>=1.2.0', '<1.3.0'], ['>=2.0.0', '<3.0.0']]],
-    ['1.2.* || 2.*', [['>=1.2.0', '<1.3.0'], ['>=2.0.0', '<3.0.0']]],
-    ['*', [['']]],
-    ['2', [['>=2.0.0', '<3.0.0']]],
-    ['2.3', [['>=2.3.0', '<2.4.0']]],
-    ['~2.4', [['>=2.4.0', '<2.5.0']]],
-    ['~2.4', [['>=2.4.0', '<2.5.0']]],
-    ['~>3.2.1', [['>=3.2.1', '<3.3.0']]],
-    ['~1', [['>=1.0.0', '<2.0.0']]],
-    ['~>1', [['>=1.0.0', '<2.0.0']]],
-    ['~> 1', [['>=1.0.0', '<2.0.0']]],
-    ['~1.0', [['>=1.0.0', '<1.1.0']]],
-    ['~ 1.0', [['>=1.0.0', '<1.1.0']]],
-    ['~ 1.0.3', [['>=1.0.3', '<1.1.0']]],
-    ['~> 1.0.3', [['>=1.0.3', '<1.1.0']]],
-    ['<1', [['<1.0.0']]],
-    ['< 1', [['<1.0.0']]],
-    ['>=1', [['>=1.0.0']]],
-    ['>= 1', [['>=1.0.0']]],
-    ['<1.2', [['<1.2.0']]],
-    ['< 1.2', [['<1.2.0']]],
-    ['1', [['>=1.0.0', '<2.0.0']]],
-    ['1 2', [['>=1.0.0', '<2.0.0', '>=2.0.0', '<3.0.0']]],
-    ['1.2 - 3.4.5', [['>=1.2.0', '<=3.4.5']]],
-    ['1.2.3 - 3.4', [['>=1.2.3', '<3.5.0']]],
-    ['1.2.3 - 3', [['>=1.2.3', '<4.0.0']]],
-    ['>*', [['<0.0.0']]],
-    ['<*', [['<0.0.0']]]
-  ].forEach(function(v) {
-    var pre = v[0];
-    var wanted = v[1];
-    var found = toComparators(v[0]);
-    var jw = JSON.stringify(wanted);
-    t.equivalent(found, wanted, 'toComparators(' + pre + ') === ' + jw);
-  });
-
-  t.end();
-});
-
-test('\ninvalid version numbers', function(t) {
-  ['1.2.3.4',
-   'NOT VALID',
-   1.2,
-   null,
-   'Infinity.NaN.Infinity'
-  ].forEach(function(v) {
-    t.throws(function() {
-      new SemVer(v);
-    }, {name:'TypeError', message:'Invalid Version: ' + v});
-  });
-
-  t.end();
-});
-
-test('\nstrict vs loose version numbers', function(t) {
-  [['=1.2.3', '1.2.3'],
-    ['01.02.03', '1.2.3'],
-    ['1.2.3-beta.01', '1.2.3-beta.1'],
-    ['   =1.2.3', '1.2.3'],
-    ['1.2.3foo', '1.2.3-foo']
-  ].forEach(function(v) {
-    var loose = v[0];
-    var strict = v[1];
-    t.throws(function() {
-      new SemVer(loose);
-    });
-    var lv = new SemVer(loose, true);
-    t.equal(lv.version, strict);
-    t.ok(eq(loose, strict, true));
-    t.throws(function() {
-      eq(loose, strict);
-    });
-    t.throws(function() {
-      new SemVer(strict).compare(loose);
-    });
-  });
-  t.end();
-});
-
-test('\nstrict vs loose ranges', function(t) {
-  [['>=01.02.03', '>=1.2.3'],
-    ['~1.02.03beta', '>=1.2.3-beta <1.3.0']
-  ].forEach(function(v) {
-    var loose = v[0];
-    var comps = v[1];
-    t.throws(function() {
-      new Range(loose);
-    });
-    t.equal(new Range(loose, true).range, comps);
-  });
-  t.end();
-});
-
-test('\nmax satisfying', function(t) {
-  [[['1.2.3', '1.2.4'], '1.2', '1.2.4'],
-    [['1.2.4', '1.2.3'], '1.2', '1.2.4'],
-    [['1.2.3', '1.2.4', '1.2.5', '1.2.6'], '~1.2.3', '1.2.6'],
-    [['1.1.0', '1.2.0', '1.2.1', '1.3.0', '2.0.0b1', '2.0.0b2', '2.0.0b3', '2.0.0', '2.1.0'], '~2.0.0', '2.0.0', true]
-  ].forEach(function(v) {
-    var versions = v[0];
-    var range = v[1];
-    var expect = v[2];
-    var loose = v[3];
-    var actual = semver.maxSatisfying(versions, range, loose);
-    t.equal(actual, expect);
-  });
-  t.end();
-});
diff --git a/bin/node_modules/cordova-common/node_modules/semver/test/ltr.js b/bin/node_modules/cordova-common/node_modules/semver/test/ltr.js
deleted file mode 100644
index 0f7167d..0000000
--- a/bin/node_modules/cordova-common/node_modules/semver/test/ltr.js
+++ /dev/null
@@ -1,181 +0,0 @@
-var tap = require('tap');
-var test = tap.test;
-var semver = require('../semver.js');
-var ltr = semver.ltr;
-
-test('\nltr tests', function(t) {
-  // [range, version, loose]
-  // Version should be less than range
-  [
-    ['~1.2.2', '1.2.1'],
-    ['~0.6.1-1', '0.6.1-0'],
-    ['1.0.0 - 2.0.0', '0.0.1'],
-    ['1.0.0-beta.2', '1.0.0-beta.1'],
-    ['1.0.0', '0.0.0'],
-    ['>=2.0.0', '1.1.1'],
-    ['>=2.0.0', '1.2.9'],
-    ['>2.0.0', '2.0.0'],
-    ['0.1.20 || 1.2.4', '0.1.5'],
-    ['2.x.x', '1.0.0'],
-    ['1.2.x', '1.1.0'],
-    ['1.2.x || 2.x', '1.0.0'],
-    ['2.*.*', '1.0.1'],
-    ['1.2.*', '1.1.3'],
-    ['1.2.* || 2.*', '1.1.9999'],
-    ['2', '1.0.0'],
-    ['2.3', '2.2.2'],
-    ['~2.4', '2.3.0'], // >=2.4.0 <2.5.0
-    ['~2.4', '2.3.5'],
-    ['~>3.2.1', '3.2.0'], // >=3.2.1 <3.3.0
-    ['~1', '0.2.3'], // >=1.0.0 <2.0.0
-    ['~>1', '0.2.4'],
-    ['~> 1', '0.2.3'],
-    ['~1.0', '0.1.2'], // >=1.0.0 <1.1.0
-    ['~ 1.0', '0.1.0'],
-    ['>1.2', '1.2.0'],
-    ['> 1.2', '1.2.1'],
-    ['1', '0.0.0beta', true],
-    ['~v0.5.4-pre', '0.5.4-alpha'],
-    ['~v0.5.4-pre', '0.5.4-alpha'],
-    ['=0.7.x', '0.6.0'],
-    ['=0.7.x', '0.6.0-asdf'],
-    ['>=0.7.x', '0.6.0'],
-    ['~1.2.2', '1.2.1'],
-    ['1.0.0 - 2.0.0', '0.2.3'],
-    ['1.0.0', '0.0.1'],
-    ['>=2.0.0', '1.0.0'],
-    ['>=2.0.0', '1.9999.9999'],
-    ['>=2.0.0', '1.2.9'],
-    ['>2.0.0', '2.0.0'],
-    ['>2.0.0', '1.2.9'],
-    ['2.x.x', '1.1.3'],
-    ['1.2.x', '1.1.3'],
-    ['1.2.x || 2.x', '1.1.3'],
-    ['2.*.*', '1.1.3'],
-    ['1.2.*', '1.1.3'],
-    ['1.2.* || 2.*', '1.1.3'],
-    ['2', '1.9999.9999'],
-    ['2.3', '2.2.1'],
-    ['~2.4', '2.3.0'], // >=2.4.0 <2.5.0
-    ['~>3.2.1', '2.3.2'], // >=3.2.1 <3.3.0
-    ['~1', '0.2.3'], // >=1.0.0 <2.0.0
-    ['~>1', '0.2.3'],
-    ['~1.0', '0.0.0'], // >=1.0.0 <1.1.0
-    ['>1', '1.0.0'],
-    ['2', '1.0.0beta', true],
-    ['>1', '1.0.0beta', true],
-    ['> 1', '1.0.0beta', true],
-    ['=0.7.x', '0.6.2'],
-    ['=0.7.x', '0.7.0-asdf'],
-    ['^1', '1.0.0-0'],
-    ['>=0.7.x', '0.7.0-asdf'],
-    ['1', '1.0.0beta', true],
-    ['>=0.7.x', '0.6.2'],
-    ['>1.2.3', '1.3.0-alpha']
-  ].forEach(function(tuple) {
-    var range = tuple[0];
-    var version = tuple[1];
-    var loose = tuple[2] || false;
-    var msg = 'ltr(' + version + ', ' + range + ', ' + loose + ')';
-    t.ok(ltr(version, range, loose), msg);
-  });
-  t.end();
-});
-
-test('\nnegative ltr tests', function(t) {
-  // [range, version, loose]
-  // Version should NOT be less than range
-  [
-    ['~ 1.0', '1.1.0'],
-    ['~0.6.1-1', '0.6.1-1'],
-    ['1.0.0 - 2.0.0', '1.2.3'],
-    ['1.0.0 - 2.0.0', '2.9.9'],
-    ['1.0.0', '1.0.0'],
-    ['>=*', '0.2.4'],
-    ['', '1.0.0', true],
-    ['*', '1.2.3'],
-    ['>=1.0.0', '1.0.0'],
-    ['>=1.0.0', '1.0.1'],
-    ['>=1.0.0', '1.1.0'],
-    ['>1.0.0', '1.0.1'],
-    ['>1.0.0', '1.1.0'],
-    ['<=2.0.0', '2.0.0'],
-    ['<=2.0.0', '1.9999.9999'],
-    ['<=2.0.0', '0.2.9'],
-    ['<2.0.0', '1.9999.9999'],
-    ['<2.0.0', '0.2.9'],
-    ['>= 1.0.0', '1.0.0'],
-    ['>=  1.0.0', '1.0.1'],
-    ['>=   1.0.0', '1.1.0'],
-    ['> 1.0.0', '1.0.1'],
-    ['>  1.0.0', '1.1.0'],
-    ['<=   2.0.0', '2.0.0'],
-    ['<= 2.0.0', '1.9999.9999'],
-    ['<=  2.0.0', '0.2.9'],
-    ['<    2.0.0', '1.9999.9999'],
-    ['<\t2.0.0', '0.2.9'],
-    ['>=0.1.97', 'v0.1.97'],
-    ['>=0.1.97', '0.1.97'],
-    ['0.1.20 || 1.2.4', '1.2.4'],
-    ['0.1.20 || >1.2.4', '1.2.4'],
-    ['0.1.20 || 1.2.4', '1.2.3'],
-    ['0.1.20 || 1.2.4', '0.1.20'],
-    ['>=0.2.3 || <0.0.1', '0.0.0'],
-    ['>=0.2.3 || <0.0.1', '0.2.3'],
-    ['>=0.2.3 || <0.0.1', '0.2.4'],
-    ['||', '1.3.4'],
-    ['2.x.x', '2.1.3'],
-    ['1.2.x', '1.2.3'],
-    ['1.2.x || 2.x', '2.1.3'],
-    ['1.2.x || 2.x', '1.2.3'],
-    ['x', '1.2.3'],
-    ['2.*.*', '2.1.3'],
-    ['1.2.*', '1.2.3'],
-    ['1.2.* || 2.*', '2.1.3'],
-    ['1.2.* || 2.*', '1.2.3'],
-    ['1.2.* || 2.*', '1.2.3'],
-    ['*', '1.2.3'],
-    ['2', '2.1.2'],
-    ['2.3', '2.3.1'],
-    ['~2.4', '2.4.0'], // >=2.4.0 <2.5.0
-    ['~2.4', '2.4.5'],
-    ['~>3.2.1', '3.2.2'], // >=3.2.1 <3.3.0
-    ['~1', '1.2.3'], // >=1.0.0 <2.0.0
-    ['~>1', '1.2.3'],
-    ['~> 1', '1.2.3'],
-    ['~1.0', '1.0.2'], // >=1.0.0 <1.1.0
-    ['~ 1.0', '1.0.2'],
-    ['>=1', '1.0.0'],
-    ['>= 1', '1.0.0'],
-    ['<1.2', '1.1.1'],
-    ['< 1.2', '1.1.1'],
-    ['~v0.5.4-pre', '0.5.5'],
-    ['~v0.5.4-pre', '0.5.4'],
-    ['=0.7.x', '0.7.2'],
-    ['>=0.7.x', '0.7.2'],
-    ['<=0.7.x', '0.6.2'],
-    ['>0.2.3 >0.2.4 <=0.2.5', '0.2.5'],
-    ['>=0.2.3 <=0.2.4', '0.2.4'],
-    ['1.0.0 - 2.0.0', '2.0.0'],
-    ['^3.0.0', '4.0.0'],
-    ['^1.0.0 || ~2.0.1', '2.0.0'],
-    ['^0.1.0 || ~3.0.1 || 5.0.0', '3.2.0'],
-    ['^0.1.0 || ~3.0.1 || 5.0.0', '1.0.0beta', true],
-    ['^0.1.0 || ~3.0.1 || 5.0.0', '5.0.0-0', true],
-    ['^0.1.0 || ~3.0.1 || >4 <=5.0.0', '3.5.0'],
-    ['^1.0.0alpha', '1.0.0beta', true],
-    ['~1.0.0alpha', '1.0.0beta', true],
-    ['^1.0.0-alpha', '1.0.0beta', true],
-    ['~1.0.0-alpha', '1.0.0beta', true],
-    ['^1.0.0-alpha', '1.0.0-beta'],
-    ['~1.0.0-alpha', '1.0.0-beta'],
-    ['=0.1.0', '1.0.0']
-  ].forEach(function(tuple) {
-    var range = tuple[0];
-    var version = tuple[1];
-    var loose = tuple[2] || false;
-    var msg = '!ltr(' + version + ', ' + range + ', ' + loose + ')';
-    t.notOk(ltr(version, range, loose), msg);
-  });
-  t.end();
-});
diff --git a/bin/node_modules/cordova-common/node_modules/semver/test/major-minor-patch.js b/bin/node_modules/cordova-common/node_modules/semver/test/major-minor-patch.js
deleted file mode 100644
index e9d4039..0000000
--- a/bin/node_modules/cordova-common/node_modules/semver/test/major-minor-patch.js
+++ /dev/null
@@ -1,72 +0,0 @@
-var tap = require('tap');
-var test = tap.test;
-var semver = require('../semver.js');
-
-test('\nmajor tests', function(t) {
-  // [range, version]
-  // Version should be detectable despite extra characters
-  [
-    ['1.2.3', 1],
-    [' 1.2.3 ', 1],
-    [' 2.2.3-4 ', 2],
-    [' 3.2.3-pre ', 3],
-    ['v5.2.3', 5],
-    [' v8.2.3 ', 8],
-    ['\t13.2.3', 13],
-    ['=21.2.3', 21, true],
-    ['v=34.2.3', 34, true]
-  ].forEach(function(tuple) {
-    var range = tuple[0];
-    var version = tuple[1];
-    var loose = tuple[2] || false;
-    var msg = 'major(' + range + ') = ' + version;
-    t.equal(semver.major(range, loose), version, msg);
-  });
-  t.end();
-});
-
-test('\nminor tests', function(t) {
-  // [range, version]
-  // Version should be detectable despite extra characters
-  [
-    ['1.1.3', 1],
-    [' 1.1.3 ', 1],
-    [' 1.2.3-4 ', 2],
-    [' 1.3.3-pre ', 3],
-    ['v1.5.3', 5],
-    [' v1.8.3 ', 8],
-    ['\t1.13.3', 13],
-    ['=1.21.3', 21, true],
-    ['v=1.34.3', 34, true]
-  ].forEach(function(tuple) {
-    var range = tuple[0];
-    var version = tuple[1];
-    var loose = tuple[2] || false;
-    var msg = 'minor(' + range + ') = ' + version;
-    t.equal(semver.minor(range, loose), version, msg);
-  });
-  t.end();
-});
-
-test('\npatch tests', function(t) {
-  // [range, version]
-  // Version should be detectable despite extra characters
-  [
-    ['1.2.1', 1],
-    [' 1.2.1 ', 1],
-    [' 1.2.2-4 ', 2],
-    [' 1.2.3-pre ', 3],
-    ['v1.2.5', 5],
-    [' v1.2.8 ', 8],
-    ['\t1.2.13', 13],
-    ['=1.2.21', 21, true],
-    ['v=1.2.34', 34, true]
-  ].forEach(function(tuple) {
-    var range = tuple[0];
-    var version = tuple[1];
-    var loose = tuple[2] || false;
-    var msg = 'patch(' + range + ') = ' + version;
-    t.equal(semver.patch(range, loose), version, msg);
-  });
-  t.end();
-});
diff --git a/bin/node_modules/cordova-common/node_modules/shelljs/.documentup.json b/bin/node_modules/cordova-common/node_modules/shelljs/.documentup.json
deleted file mode 100644
index 57fe301..0000000
--- a/bin/node_modules/cordova-common/node_modules/shelljs/.documentup.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
-  "name": "ShellJS",
-  "twitter": [
-    "r2r"
-  ]
-}
diff --git a/bin/node_modules/cordova-common/node_modules/shelljs/.jshintrc b/bin/node_modules/cordova-common/node_modules/shelljs/.jshintrc
deleted file mode 100644
index a80c559..0000000
--- a/bin/node_modules/cordova-common/node_modules/shelljs/.jshintrc
+++ /dev/null
@@ -1,7 +0,0 @@
-{
-  "loopfunc": true,
-  "sub": true,
-  "undef": true,
-  "unused": true,
-  "node": true
-}
\ No newline at end of file
diff --git a/bin/node_modules/cordova-common/node_modules/shelljs/.npmignore b/bin/node_modules/cordova-common/node_modules/shelljs/.npmignore
deleted file mode 100644
index 6b20c38..0000000
--- a/bin/node_modules/cordova-common/node_modules/shelljs/.npmignore
+++ /dev/null
@@ -1,2 +0,0 @@
-test/
-tmp/
\ No newline at end of file
diff --git a/bin/node_modules/cordova-common/node_modules/shelljs/.travis.yml b/bin/node_modules/cordova-common/node_modules/shelljs/.travis.yml
deleted file mode 100644
index 1b3280a..0000000
--- a/bin/node_modules/cordova-common/node_modules/shelljs/.travis.yml
+++ /dev/null
@@ -1,6 +0,0 @@
-language: node_js
-node_js:
-  - "0.10"
-  - "0.11"
-  - "0.12"
-  
diff --git a/bin/node_modules/cordova-common/node_modules/shelljs/LICENSE b/bin/node_modules/cordova-common/node_modules/shelljs/LICENSE
deleted file mode 100644
index 1b35ee9..0000000
--- a/bin/node_modules/cordova-common/node_modules/shelljs/LICENSE
+++ /dev/null
@@ -1,26 +0,0 @@
-Copyright (c) 2012, Artur Adib <aadib@mozilla.com>
-All rights reserved.
-
-You may use this project under the terms of the New BSD license as follows:
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-    * Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above copyright
-      notice, this list of conditions and the following disclaimer in the
-      documentation and/or other materials provided with the distribution.
-    * Neither the name of Artur Adib nor the
-      names of the contributors may be used to endorse or promote products
-      derived from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
-ARE DISCLAIMED. IN NO EVENT SHALL ARTUR ADIB BE LIABLE FOR ANY
-DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 
-THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/bin/node_modules/cordova-common/node_modules/shelljs/README.md b/bin/node_modules/cordova-common/node_modules/shelljs/README.md
deleted file mode 100644
index d08d13e..0000000
--- a/bin/node_modules/cordova-common/node_modules/shelljs/README.md
+++ /dev/null
@@ -1,579 +0,0 @@
-# ShellJS - Unix shell commands for Node.js [![Build Status](https://secure.travis-ci.org/arturadib/shelljs.png)](http://travis-ci.org/arturadib/shelljs)
-
-ShellJS is a portable **(Windows/Linux/OS X)** implementation of Unix shell commands on top of the Node.js API. You can use it to eliminate your shell script's dependency on Unix while still keeping its familiar and powerful commands. You can also install it globally so you can run it from outside Node projects - say goodbye to those gnarly Bash scripts!
-
-The project is [unit-tested](http://travis-ci.org/arturadib/shelljs) and battled-tested in projects like:
-
-+ [PDF.js](http://github.com/mozilla/pdf.js) - Firefox's next-gen PDF reader
-+ [Firebug](http://getfirebug.com/) - Firefox's infamous debugger
-+ [JSHint](http://jshint.com) - Most popular JavaScript linter
-+ [Zepto](http://zeptojs.com) - jQuery-compatible JavaScript library for modern browsers
-+ [Yeoman](http://yeoman.io/) - Web application stack and development tool
-+ [Deployd.com](http://deployd.com) - Open source PaaS for quick API backend generation
-
-and [many more](https://npmjs.org/browse/depended/shelljs).
-
-Connect with [@r2r](http://twitter.com/r2r) on Twitter for questions, suggestions, etc.
-
-## Installing
-
-Via npm:
-
-```bash
-$ npm install [-g] shelljs
-```
-
-If the global option `-g` is specified, the binary `shjs` will be installed. This makes it possible to
-run ShellJS scripts much like any shell script from the command line, i.e. without requiring a `node_modules` folder:
-
-```bash
-$ shjs my_script
-```
-
-You can also just copy `shell.js` into your project's directory, and `require()` accordingly.
-
-
-## Examples
-
-### JavaScript
-
-```javascript
-require('shelljs/global');
-
-if (!which('git')) {
-  echo('Sorry, this script requires git');
-  exit(1);
-}
-
-// Copy files to release dir
-mkdir('-p', 'out/Release');
-cp('-R', 'stuff/*', 'out/Release');
-
-// Replace macros in each .js file
-cd('lib');
-ls('*.js').forEach(function(file) {
-  sed('-i', 'BUILD_VERSION', 'v0.1.2', file);
-  sed('-i', /.*REMOVE_THIS_LINE.*\n/, '', file);
-  sed('-i', /.*REPLACE_LINE_WITH_MACRO.*\n/, cat('macro.js'), file);
-});
-cd('..');
-
-// Run external tool synchronously
-if (exec('git commit -am "Auto-commit"').code !== 0) {
-  echo('Error: Git commit failed');
-  exit(1);
-}
-```
-
-### CoffeeScript
-
-```coffeescript
-require 'shelljs/global'
-
-if not which 'git'
-  echo 'Sorry, this script requires git'
-  exit 1
-
-# Copy files to release dir
-mkdir '-p', 'out/Release'
-cp '-R', 'stuff/*', 'out/Release'
-
-# Replace macros in each .js file
-cd 'lib'
-for file in ls '*.js'
-  sed '-i', 'BUILD_VERSION', 'v0.1.2', file
-  sed '-i', /.*REMOVE_THIS_LINE.*\n/, '', file
-  sed '-i', /.*REPLACE_LINE_WITH_MACRO.*\n/, cat 'macro.js', file
-cd '..'
-
-# Run external tool synchronously
-if (exec 'git commit -am "Auto-commit"').code != 0
-  echo 'Error: Git commit failed'
-  exit 1
-```
-
-## Global vs. Local
-
-The example above uses the convenience script `shelljs/global` to reduce verbosity. If polluting your global namespace is not desirable, simply require `shelljs`.
-
-Example:
-
-```javascript
-var shell = require('shelljs');
-shell.echo('hello world');
-```
-
-## Make tool
-
-A convenience script `shelljs/make` is also provided to mimic the behavior of a Unix Makefile. In this case all shell objects are global, and command line arguments will cause the script to execute only the corresponding function in the global `target` object. To avoid redundant calls, target functions are executed only once per script.
-
-Example (CoffeeScript):
-
-```coffeescript
-require 'shelljs/make'
-
-target.all = ->
-  target.bundle()
-  target.docs()
-
-target.bundle = ->
-  cd __dirname
-  mkdir 'build'
-  cd 'lib'
-  (cat '*.js').to '../build/output.js'
-
-target.docs = ->
-  cd __dirname
-  mkdir 'docs'
-  cd 'lib'
-  for file in ls '*.js'
-    text = grep '//@', file     # extract special comments
-    text.replace '//@', ''      # remove comment tags
-    text.to 'docs/my_docs.md'
-```
-
-To run the target `all`, call the above script without arguments: `$ node make`. To run the target `docs`: `$ node make docs`.
-
-You can also pass arguments to your targets by using the `--` separator. For example, to pass `arg1` and `arg2` to a target `bundle`, do `$ node make bundle -- arg1 arg2`:
-
-```javascript
-require('shelljs/make');
-
-target.bundle = function(argsArray) {
-  // argsArray = ['arg1', 'arg2']
-  /* ... */
-}
-```
-
-
-<!-- DO NOT MODIFY BEYOND THIS POINT - IT'S AUTOMATICALLY GENERATED -->
-
-
-## Command reference
-
-
-All commands run synchronously, unless otherwise stated.
-
-
-### cd('dir')
-Changes to directory `dir` for the duration of the script
-
-
-### pwd()
-Returns the current directory.
-
-
-### ls([options ,] path [,path ...])
-### ls([options ,] path_array)
-Available options:
-
-+ `-R`: recursive
-+ `-A`: all files (include files beginning with `.`, except for `.` and `..`)
-
-Examples:
-
-```javascript
-ls('projs/*.js');
-ls('-R', '/users/me', '/tmp');
-ls('-R', ['/users/me', '/tmp']); // same as above
-```
-
-Returns array of files in the given path, or in current directory if no path provided.
-
-
-### find(path [,path ...])
-### find(path_array)
-Examples:
-
-```javascript
-find('src', 'lib');
-find(['src', 'lib']); // same as above
-find('.').filter(function(file) { return file.match(/\.js$/); });
-```
-
-Returns array of all files (however deep) in the given paths.
-
-The main difference from `ls('-R', path)` is that the resulting file names
-include the base directories, e.g. `lib/resources/file1` instead of just `file1`.
-
-
-### cp([options ,] source [,source ...], dest)
-### cp([options ,] source_array, dest)
-Available options:
-
-+ `-f`: force
-+ `-r, -R`: recursive
-
-Examples:
-
-```javascript
-cp('file1', 'dir1');
-cp('-Rf', '/tmp/*', '/usr/local/*', '/home/tmp');
-cp('-Rf', ['/tmp/*', '/usr/local/*'], '/home/tmp'); // same as above
-```
-
-Copies files. The wildcard `*` is accepted.
-
-
-### rm([options ,] file [, file ...])
-### rm([options ,] file_array)
-Available options:
-
-+ `-f`: force
-+ `-r, -R`: recursive
-
-Examples:
-
-```javascript
-rm('-rf', '/tmp/*');
-rm('some_file.txt', 'another_file.txt');
-rm(['some_file.txt', 'another_file.txt']); // same as above
-```
-
-Removes files. The wildcard `*` is accepted.
-
-
-### mv(source [, source ...], dest')
-### mv(source_array, dest')
-Available options:
-
-+ `f`: force
-
-Examples:
-
-```javascript
-mv('-f', 'file', 'dir/');
-mv('file1', 'file2', 'dir/');
-mv(['file1', 'file2'], 'dir/'); // same as above
-```
-
-Moves files. The wildcard `*` is accepted.
-
-
-### mkdir([options ,] dir [, dir ...])
-### mkdir([options ,] dir_array)
-Available options:
-
-+ `p`: full path (will create intermediate dirs if necessary)
-
-Examples:
-
-```javascript
-mkdir('-p', '/tmp/a/b/c/d', '/tmp/e/f/g');
-mkdir('-p', ['/tmp/a/b/c/d', '/tmp/e/f/g']); // same as above
-```
-
-Creates directories.
-
-
-### test(expression)
-Available expression primaries:
-
-+ `'-b', 'path'`: true if path is a block device
-+ `'-c', 'path'`: true if path is a character device
-+ `'-d', 'path'`: true if path is a directory
-+ `'-e', 'path'`: true if path exists
-+ `'-f', 'path'`: true if path is a regular file
-+ `'-L', 'path'`: true if path is a symbolic link
-+ `'-p', 'path'`: true if path is a pipe (FIFO)
-+ `'-S', 'path'`: true if path is a socket
-
-Examples:
-
-```javascript
-if (test('-d', path)) { /* do something with dir */ };
-if (!test('-f', path)) continue; // skip if it's a regular file
-```
-
-Evaluates expression using the available primaries and returns corresponding value.
-
-
-### cat(file [, file ...])
-### cat(file_array)
-
-Examples:
-
-```javascript
-var str = cat('file*.txt');
-var str = cat('file1', 'file2');
-var str = cat(['file1', 'file2']); // same as above
-```
-
-Returns a string containing the given file, or a concatenated string
-containing the files if more than one file is given (a new line character is
-introduced between each file). Wildcard `*` accepted.
-
-
-### 'string'.to(file)
-
-Examples:
-
-```javascript
-cat('input.txt').to('output.txt');
-```
-
-Analogous to the redirection operator `>` in Unix, but works with JavaScript strings (such as
-those returned by `cat`, `grep`, etc). _Like Unix redirections, `to()` will overwrite any existing file!_
-
-
-### 'string'.toEnd(file)
-
-Examples:
-
-```javascript
-cat('input.txt').toEnd('output.txt');
-```
-
-Analogous to the redirect-and-append operator `>>` in Unix, but works with JavaScript strings (such as
-those returned by `cat`, `grep`, etc).
-
-
-### sed([options ,] search_regex, replacement, file)
-Available options:
-
-+ `-i`: Replace contents of 'file' in-place. _Note that no backups will be created!_
-
-Examples:
-
-```javascript
-sed('-i', 'PROGRAM_VERSION', 'v0.1.3', 'source.js');
-sed(/.*DELETE_THIS_LINE.*\n/, '', 'source.js');
-```
-
-Reads an input string from `file` and performs a JavaScript `replace()` on the input
-using the given search regex and replacement string or function. Returns the new string after replacement.
-
-
-### grep([options ,] regex_filter, file [, file ...])
-### grep([options ,] regex_filter, file_array)
-Available options:
-
-+ `-v`: Inverse the sense of the regex and print the lines not matching the criteria.
-
-Examples:
-
-```javascript
-grep('-v', 'GLOBAL_VARIABLE', '*.js');
-grep('GLOBAL_VARIABLE', '*.js');
-```
-
-Reads input string from given files and returns a string containing all lines of the
-file that match the given `regex_filter`. Wildcard `*` accepted.
-
-
-### which(command)
-
-Examples:
-
-```javascript
-var nodeExec = which('node');
-```
-
-Searches for `command` in the system's PATH. On Windows looks for `.exe`, `.cmd`, and `.bat` extensions.
-Returns string containing the absolute path to the command.
-
-
-### echo(string [,string ...])
-
-Examples:
-
-```javascript
-echo('hello world');
-var str = echo('hello world');
-```
-
-Prints string to stdout, and returns string with additional utility methods
-like `.to()`.
-
-
-### pushd([options,] [dir | '-N' | '+N'])
-
-Available options:
-
-+ `-n`: Suppresses the normal change of directory when adding directories to the stack, so that only the stack is manipulated.
-
-Arguments:
-
-+ `dir`: Makes the current working directory be the top of the stack, and then executes the equivalent of `cd dir`.
-+ `+N`: Brings the Nth directory (counting from the left of the list printed by dirs, starting with zero) to the top of the list by rotating the stack.
-+ `-N`: Brings the Nth directory (counting from the right of the list printed by dirs, starting with zero) to the top of the list by rotating the stack.
-
-Examples:
-
-```javascript
-// process.cwd() === '/usr'
-pushd('/etc'); // Returns /etc /usr
-pushd('+1');   // Returns /usr /etc
-```
-
-Save the current directory on the top of the directory stack and then cd to `dir`. With no arguments, pushd exchanges the top two directories. Returns an array of paths in the stack.
-
-### popd([options,] ['-N' | '+N'])
-
-Available options:
-
-+ `-n`: Suppresses the normal change of directory when removing directories from the stack, so that only the stack is manipulated.
-
-Arguments:
-
-+ `+N`: Removes the Nth directory (counting from the left of the list printed by dirs), starting with zero.
-+ `-N`: Removes the Nth directory (counting from the right of the list printed by dirs), starting with zero.
-
-Examples:
-
-```javascript
-echo(process.cwd()); // '/usr'
-pushd('/etc');       // '/etc /usr'
-echo(process.cwd()); // '/etc'
-popd();              // '/usr'
-echo(process.cwd()); // '/usr'
-```
-
-When no arguments are given, popd removes the top directory from the stack and performs a cd to the new top directory. The elements are numbered from 0 starting at the first directory listed with dirs; i.e., popd is equivalent to popd +0. Returns an array of paths in the stack.
-
-### dirs([options | '+N' | '-N'])
-
-Available options:
-
-+ `-c`: Clears the directory stack by deleting all of the elements.
-
-Arguments:
-
-+ `+N`: Displays the Nth directory (counting from the left of the list printed by dirs when invoked without options), starting with zero.
-+ `-N`: Displays the Nth directory (counting from the right of the list printed by dirs when invoked without options), starting with zero.
-
-Display the list of currently remembered directories. Returns an array of paths in the stack, or a single path if +N or -N was specified.
-
-See also: pushd, popd
-
-
-### ln(options, source, dest)
-### ln(source, dest)
-Available options:
-
-+ `s`: symlink
-+ `f`: force
-
-Examples:
-
-```javascript
-ln('file', 'newlink');
-ln('-sf', 'file', 'existing');
-```
-
-Links source to dest. Use -f to force the link, should dest already exist.
-
-
-### exit(code)
-Exits the current process with the given exit code.
-
-### env['VAR_NAME']
-Object containing environment variables (both getter and setter). Shortcut to process.env.
-
-### exec(command [, options] [, callback])
-Available options (all `false` by default):
-
-+ `async`: Asynchronous execution. Defaults to true if a callback is provided.
-+ `silent`: Do not echo program output to console.
-
-Examples:
-
-```javascript
-var version = exec('node --version', {silent:true}).output;
-
-var child = exec('some_long_running_process', {async:true});
-child.stdout.on('data', function(data) {
-  /* ... do something with data ... */
-});
-
-exec('some_long_running_process', function(code, output) {
-  console.log('Exit code:', code);
-  console.log('Program output:', output);
-});
-```
-
-Executes the given `command` _synchronously_, unless otherwise specified.
-When in synchronous mode returns the object `{ code:..., output:... }`, containing the program's
-`output` (stdout + stderr)  and its exit `code`. Otherwise returns the child process object, and
-the `callback` gets the arguments `(code, output)`.
-
-**Note:** For long-lived processes, it's best to run `exec()` asynchronously as
-the current synchronous implementation uses a lot of CPU. This should be getting
-fixed soon.
-
-
-### chmod(octal_mode || octal_string, file)
-### chmod(symbolic_mode, file)
-
-Available options:
-
-+ `-v`: output a diagnostic for every file processed
-+ `-c`: like verbose but report only when a change is made
-+ `-R`: change files and directories recursively
-
-Examples:
-
-```javascript
-chmod(755, '/Users/brandon');
-chmod('755', '/Users/brandon'); // same as above
-chmod('u+x', '/Users/brandon');
-```
-
-Alters the permissions of a file or directory by either specifying the
-absolute permissions in octal form or expressing the changes in symbols.
-This command tries to mimic the POSIX behavior as much as possible.
-Notable exceptions:
-
-+ In symbolic modes, 'a-r' and '-r' are identical.  No consideration is
-  given to the umask.
-+ There is no "quiet" option since default behavior is to run silent.
-
-
-## Non-Unix commands
-
-
-### tempdir()
-
-Examples:
-
-```javascript
-var tmp = tempdir(); // "/tmp" for most *nix platforms
-```
-
-Searches and returns string containing a writeable, platform-dependent temporary directory.
-Follows Python's [tempfile algorithm](http://docs.python.org/library/tempfile.html#tempfile.tempdir).
-
-
-### error()
-Tests if error occurred in the last command. Returns `null` if no error occurred,
-otherwise returns string explaining the error
-
-
-## Configuration
-
-
-### config.silent
-Example:
-
-```javascript
-var sh = require('shelljs');
-var silentState = sh.config.silent; // save old silent state
-sh.config.silent = true;
-/* ... */
-sh.config.silent = silentState; // restore old silent state
-```
-
-Suppresses all command output if `true`, except for `echo()` calls.
-Default is `false`.
-
-### config.fatal
-Example:
-
-```javascript
-require('shelljs/global');
-config.fatal = true;
-cp('this_file_does_not_exist', '/dev/null'); // dies here
-/* more commands... */
-```
-
-If `true` the script will die on errors. Default is `false`.
diff --git a/bin/node_modules/cordova-common/node_modules/shelljs/RELEASE.md b/bin/node_modules/cordova-common/node_modules/shelljs/RELEASE.md
deleted file mode 100644
index 69ef3fb..0000000
--- a/bin/node_modules/cordova-common/node_modules/shelljs/RELEASE.md
+++ /dev/null
@@ -1,9 +0,0 @@
-# Release steps
-
-* Ensure master passes CI tests
-* Bump version in package.json. Any breaking change or new feature should bump minor (or even major). Non-breaking changes or fixes can just bump patch.
-* Update README manually if the changes are not documented in-code. If so, run `scripts/generate-docs.js`
-* Commit
-* `$ git tag <version>` (see `git tag -l` for latest)
-* `$ git push origin master --tags`
-* `$ npm publish .`
diff --git a/bin/node_modules/cordova-common/node_modules/shelljs/bin/shjs b/bin/node_modules/cordova-common/node_modules/shelljs/bin/shjs
deleted file mode 100644
index d239a7a..0000000
--- a/bin/node_modules/cordova-common/node_modules/shelljs/bin/shjs
+++ /dev/null
@@ -1,51 +0,0 @@
-#!/usr/bin/env node
-require('../global');
-
-if (process.argv.length < 3) {
-  console.log('ShellJS: missing argument (script name)');
-  console.log();
-  process.exit(1);
-}
-
-var args,
-  scriptName = process.argv[2];
-env['NODE_PATH'] = __dirname + '/../..';
-
-if (!scriptName.match(/\.js/) && !scriptName.match(/\.coffee/)) {
-  if (test('-f', scriptName + '.js'))
-    scriptName += '.js';
-  if (test('-f', scriptName + '.coffee'))
-    scriptName += '.coffee';
-}
-
-if (!test('-f', scriptName)) {
-  console.log('ShellJS: script not found ('+scriptName+')');
-  console.log();
-  process.exit(1);
-}
-
-args = process.argv.slice(3);
-
-for (var i = 0, l = args.length; i < l; i++) {
-  if (args[i][0] !== "-"){
-    args[i] = '"' + args[i] + '"'; // fixes arguments with multiple words
-  }
-}
-
-if (scriptName.match(/\.coffee$/)) {
-  //
-  // CoffeeScript
-  //
-  if (which('coffee')) {
-    exec('coffee ' + scriptName + ' ' + args.join(' '), { async: true });
-  } else {
-    console.log('ShellJS: CoffeeScript interpreter not found');
-    console.log();
-    process.exit(1);
-  }
-} else {
-  //
-  // JavaScript
-  //
-  exec('node ' + scriptName + ' ' + args.join(' '), { async: true });
-}
diff --git a/bin/node_modules/cordova-common/node_modules/shelljs/global.js b/bin/node_modules/cordova-common/node_modules/shelljs/global.js
deleted file mode 100644
index 97f0033..0000000
--- a/bin/node_modules/cordova-common/node_modules/shelljs/global.js
+++ /dev/null
@@ -1,3 +0,0 @@
-var shell = require('./shell.js');
-for (var cmd in shell)
-  global[cmd] = shell[cmd];
diff --git a/bin/node_modules/cordova-common/node_modules/shelljs/make.js b/bin/node_modules/cordova-common/node_modules/shelljs/make.js
deleted file mode 100644
index f78b4cf..0000000
--- a/bin/node_modules/cordova-common/node_modules/shelljs/make.js
+++ /dev/null
@@ -1,56 +0,0 @@
-require('./global');
-
-global.config.fatal = true;
-global.target = {};
-
-var args = process.argv.slice(2),
-  targetArgs,
-  dashesLoc = args.indexOf('--');
-
-// split args, everything after -- if only for targets
-if (dashesLoc > -1) {
-  targetArgs = args.slice(dashesLoc + 1, args.length);
-  args = args.slice(0, dashesLoc);
-}
-
-// This ensures we only execute the script targets after the entire script has
-// been evaluated
-setTimeout(function() {
-  var t;
-
-  if (args.length === 1 && args[0] === '--help') {
-    console.log('Available targets:');
-    for (t in global.target)
-      console.log('  ' + t);
-    return;
-  }
-
-  // Wrap targets to prevent duplicate execution
-  for (t in global.target) {
-    (function(t, oldTarget){
-
-      // Wrap it
-      global.target[t] = function() {
-        if (oldTarget.done)
-          return;
-        oldTarget.done = true;
-        return oldTarget.apply(oldTarget, arguments);
-      };
-
-    })(t, global.target[t]);
-  }
-
-  // Execute desired targets
-  if (args.length > 0) {
-    args.forEach(function(arg) {
-      if (arg in global.target)
-        global.target[arg](targetArgs);
-      else {
-        console.log('no such target: ' + arg);
-      }
-    });
-  } else if ('all' in global.target) {
-    global.target.all(targetArgs);
-  }
-
-}, 0);
diff --git a/bin/node_modules/cordova-common/node_modules/shelljs/package.json b/bin/node_modules/cordova-common/node_modules/shelljs/package.json
deleted file mode 100644
index 21c12d3..0000000
--- a/bin/node_modules/cordova-common/node_modules/shelljs/package.json
+++ /dev/null
@@ -1,64 +0,0 @@
-{
-  "name": "shelljs",
-  "version": "0.5.3",
-  "author": {
-    "name": "Artur Adib",
-    "email": "arturadib@gmail.com"
-  },
-  "description": "Portable Unix shell commands for Node.js",
-  "keywords": [
-    "unix",
-    "shell",
-    "makefile",
-    "make",
-    "jake",
-    "synchronous"
-  ],
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/arturadib/shelljs.git"
-  },
-  "license": "BSD*",
-  "homepage": "http://github.com/arturadib/shelljs",
-  "main": "./shell.js",
-  "scripts": {
-    "test": "node scripts/run-tests"
-  },
-  "bin": {
-    "shjs": "./bin/shjs"
-  },
-  "dependencies": {},
-  "devDependencies": {
-    "jshint": "~2.1.11"
-  },
-  "optionalDependencies": {},
-  "engines": {
-    "node": ">=0.8.0"
-  },
-  "gitHead": "22d0975040b9b8234755dc6e692d6869436e8485",
-  "bugs": {
-    "url": "https://github.com/arturadib/shelljs/issues"
-  },
-  "_id": "shelljs@0.5.3",
-  "_shasum": "c54982b996c76ef0c1e6b59fbdc5825f5b713113",
-  "_from": "shelljs@^0.5.1",
-  "_npmVersion": "2.5.1",
-  "_nodeVersion": "1.2.0",
-  "_npmUser": {
-    "name": "artur",
-    "email": "arturadib@gmail.com"
-  },
-  "maintainers": [
-    {
-      "name": "artur",
-      "email": "arturadib@gmail.com"
-    }
-  ],
-  "dist": {
-    "shasum": "c54982b996c76ef0c1e6b59fbdc5825f5b713113",
-    "tarball": "http://registry.npmjs.org/shelljs/-/shelljs-0.5.3.tgz"
-  },
-  "directories": {},
-  "_resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.5.3.tgz",
-  "readme": "ERROR: No README data found!"
-}
diff --git a/bin/node_modules/cordova-common/node_modules/shelljs/scripts/generate-docs.js b/bin/node_modules/cordova-common/node_modules/shelljs/scripts/generate-docs.js
deleted file mode 100644
index 532fed9..0000000
--- a/bin/node_modules/cordova-common/node_modules/shelljs/scripts/generate-docs.js
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/usr/bin/env node
-require('../global');
-
-echo('Appending docs to README.md');
-
-cd(__dirname + '/..');
-
-// Extract docs from shell.js
-var docs = grep('//@', 'shell.js');
-
-docs = docs.replace(/\/\/\@include (.+)/g, function(match, path) {
-  var file = path.match('.js$') ? path : path+'.js';
-  return grep('//@', file);
-});
-
-// Remove '//@'
-docs = docs.replace(/\/\/\@ ?/g, '');
-// Append docs to README
-sed('-i', /## Command reference(.|\n)*/, '## Command reference\n\n' + docs, 'README.md');
-
-echo('All done.');
diff --git a/bin/node_modules/cordova-common/node_modules/shelljs/scripts/run-tests.js b/bin/node_modules/cordova-common/node_modules/shelljs/scripts/run-tests.js
deleted file mode 100644
index f9d31e0..0000000
--- a/bin/node_modules/cordova-common/node_modules/shelljs/scripts/run-tests.js
+++ /dev/null
@@ -1,50 +0,0 @@
-#!/usr/bin/env node
-require('../global');
-
-var path = require('path');
-
-var failed = false;
-
-//
-// Lint
-//
-JSHINT_BIN = './node_modules/jshint/bin/jshint';
-cd(__dirname + '/..');
-
-if (!test('-f', JSHINT_BIN)) {
-  echo('JSHint not found. Run `npm install` in the root dir first.');
-  exit(1);
-}
-
-if (exec(JSHINT_BIN + ' *.js test/*.js').code !== 0) {
-  failed = true;
-  echo('*** JSHINT FAILED! (return code != 0)');
-  echo();
-} else {
-  echo('All JSHint tests passed');
-  echo();
-}
-
-//
-// Unit tests
-//
-cd(__dirname + '/../test');
-ls('*.js').forEach(function(file) {
-  echo('Running test:', file);
-  if (exec('node ' + file).code !== 123) { // 123 avoids false positives (e.g. premature exit)
-    failed = true;
-    echo('*** TEST FAILED! (missing exit code "123")');
-    echo();
-  }
-});
-
-if (failed) {
-  echo();
-  echo('*******************************************************');
-  echo('WARNING: Some tests did not pass!');
-  echo('*******************************************************');
-  exit(1);
-} else {
-  echo();
-  echo('All tests passed.');
-}
diff --git a/bin/node_modules/cordova-common/node_modules/shelljs/shell.js b/bin/node_modules/cordova-common/node_modules/shelljs/shell.js
deleted file mode 100644
index bdeb559..0000000
--- a/bin/node_modules/cordova-common/node_modules/shelljs/shell.js
+++ /dev/null
@@ -1,159 +0,0 @@
-//
-// ShellJS
-// Unix shell commands on top of Node's API
-//
-// Copyright (c) 2012 Artur Adib
-// http://github.com/arturadib/shelljs
-//
-
-var common = require('./src/common');
-
-
-//@
-//@ All commands run synchronously, unless otherwise stated.
-//@
-
-//@include ./src/cd
-var _cd = require('./src/cd');
-exports.cd = common.wrap('cd', _cd);
-
-//@include ./src/pwd
-var _pwd = require('./src/pwd');
-exports.pwd = common.wrap('pwd', _pwd);
-
-//@include ./src/ls
-var _ls = require('./src/ls');
-exports.ls = common.wrap('ls', _ls);
-
-//@include ./src/find
-var _find = require('./src/find');
-exports.find = common.wrap('find', _find);
-
-//@include ./src/cp
-var _cp = require('./src/cp');
-exports.cp = common.wrap('cp', _cp);
-
-//@include ./src/rm
-var _rm = require('./src/rm');
-exports.rm = common.wrap('rm', _rm);
-
-//@include ./src/mv
-var _mv = require('./src/mv');
-exports.mv = common.wrap('mv', _mv);
-
-//@include ./src/mkdir
-var _mkdir = require('./src/mkdir');
-exports.mkdir = common.wrap('mkdir', _mkdir);
-
-//@include ./src/test
-var _test = require('./src/test');
-exports.test = common.wrap('test', _test);
-
-//@include ./src/cat
-var _cat = require('./src/cat');
-exports.cat = common.wrap('cat', _cat);
-
-//@include ./src/to
-var _to = require('./src/to');
-String.prototype.to = common.wrap('to', _to);
-
-//@include ./src/toEnd
-var _toEnd = require('./src/toEnd');
-String.prototype.toEnd = common.wrap('toEnd', _toEnd);
-
-//@include ./src/sed
-var _sed = require('./src/sed');
-exports.sed = common.wrap('sed', _sed);
-
-//@include ./src/grep
-var _grep = require('./src/grep');
-exports.grep = common.wrap('grep', _grep);
-
-//@include ./src/which
-var _which = require('./src/which');
-exports.which = common.wrap('which', _which);
-
-//@include ./src/echo
-var _echo = require('./src/echo');
-exports.echo = _echo; // don't common.wrap() as it could parse '-options'
-
-//@include ./src/dirs
-var _dirs = require('./src/dirs').dirs;
-exports.dirs = common.wrap("dirs", _dirs);
-var _pushd = require('./src/dirs').pushd;
-exports.pushd = common.wrap('pushd', _pushd);
-var _popd = require('./src/dirs').popd;
-exports.popd = common.wrap("popd", _popd);
-
-//@include ./src/ln
-var _ln = require('./src/ln');
-exports.ln = common.wrap('ln', _ln);
-
-//@
-//@ ### exit(code)
-//@ Exits the current process with the given exit code.
-exports.exit = process.exit;
-
-//@
-//@ ### env['VAR_NAME']
-//@ Object containing environment variables (both getter and setter). Shortcut to process.env.
-exports.env = process.env;
-
-//@include ./src/exec
-var _exec = require('./src/exec');
-exports.exec = common.wrap('exec', _exec, {notUnix:true});
-
-//@include ./src/chmod
-var _chmod = require('./src/chmod');
-exports.chmod = common.wrap('chmod', _chmod);
-
-
-
-//@
-//@ ## Non-Unix commands
-//@
-
-//@include ./src/tempdir
-var _tempDir = require('./src/tempdir');
-exports.tempdir = common.wrap('tempdir', _tempDir);
-
-
-//@include ./src/error
-var _error = require('./src/error');
-exports.error = _error;
-
-
-
-//@
-//@ ## Configuration
-//@
-
-exports.config = common.config;
-
-//@
-//@ ### config.silent
-//@ Example:
-//@
-//@ ```javascript
-//@ var sh = require('shelljs');
-//@ var silentState = sh.config.silent; // save old silent state
-//@ sh.config.silent = true;
-//@ /* ... */
-//@ sh.config.silent = silentState; // restore old silent state
-//@ ```
-//@
-//@ Suppresses all command output if `true`, except for `echo()` calls.
-//@ Default is `false`.
-
-//@
-//@ ### config.fatal
-//@ Example:
-//@
-//@ ```javascript
-//@ require('shelljs/global');
-//@ config.fatal = true;
-//@ cp('this_file_does_not_exist', '/dev/null'); // dies here
-//@ /* more commands... */
-//@ ```
-//@
-//@ If `true` the script will die on errors. Default is `false`.
diff --git a/bin/node_modules/cordova-common/node_modules/shelljs/src/cat.js b/bin/node_modules/cordova-common/node_modules/shelljs/src/cat.js
deleted file mode 100644
index f6f4d25..0000000
--- a/bin/node_modules/cordova-common/node_modules/shelljs/src/cat.js
+++ /dev/null
@@ -1,43 +0,0 @@
-var common = require('./common');
-var fs = require('fs');
-
-//@
-//@ ### cat(file [, file ...])
-//@ ### cat(file_array)
-//@
-//@ Examples:
-//@
-//@ ```javascript
-//@ var str = cat('file*.txt');
-//@ var str = cat('file1', 'file2');
-//@ var str = cat(['file1', 'file2']); // same as above
-//@ ```
-//@
-//@ Returns a string containing the given file, or a concatenated string
-//@ containing the files if more than one file is given (a new line character is
-//@ introduced between each file). Wildcard `*` accepted.
-function _cat(options, files) {
-  var cat = '';
-
-  if (!files)
-    common.error('no paths given');
-
-  if (typeof files === 'string')
-    files = [].slice.call(arguments, 1);
-  // if it's array leave it as it is
-
-  files = common.expand(files);
-
-  files.forEach(function(file) {
-    if (!fs.existsSync(file))
-      common.error('no such file or directory: ' + file);
-
-    cat += fs.readFileSync(file, 'utf8') + '\n';
-  });
-
-  if (cat[cat.length-1] === '\n')
-    cat = cat.substring(0, cat.length-1);
-
-  return common.ShellString(cat);
-}
-module.exports = _cat;
diff --git a/bin/node_modules/cordova-common/node_modules/shelljs/src/cd.js b/bin/node_modules/cordova-common/node_modules/shelljs/src/cd.js
deleted file mode 100644
index 230f432..0000000
--- a/bin/node_modules/cordova-common/node_modules/shelljs/src/cd.js
+++ /dev/null
@@ -1,19 +0,0 @@
-var fs = require('fs');
-var common = require('./common');
-
-//@
-//@ ### cd('dir')
-//@ Changes to directory `dir` for the duration of the script
-function _cd(options, dir) {
-  if (!dir)
-    common.error('directory not specified');
-
-  if (!fs.existsSync(dir))
-    common.error('no such file or directory: ' + dir);
-
-  if (!fs.statSync(dir).isDirectory())
-    common.error('not a directory: ' + dir);
-
-  process.chdir(dir);
-}
-module.exports = _cd;
diff --git a/bin/node_modules/cordova-common/node_modules/shelljs/src/chmod.js b/bin/node_modules/cordova-common/node_modules/shelljs/src/chmod.js
deleted file mode 100644
index f288893..0000000
--- a/bin/node_modules/cordova-common/node_modules/shelljs/src/chmod.js
+++ /dev/null
@@ -1,208 +0,0 @@
-var common = require('./common');
-var fs = require('fs');
-var path = require('path');
-
-var PERMS = (function (base) {
-  return {
-    OTHER_EXEC  : base.EXEC,
-    OTHER_WRITE : base.WRITE,
-    OTHER_READ  : base.READ,
-
-    GROUP_EXEC  : base.EXEC  << 3,
-    GROUP_WRITE : base.WRITE << 3,
-    GROUP_READ  : base.READ << 3,
-
-    OWNER_EXEC  : base.EXEC << 6,
-    OWNER_WRITE : base.WRITE << 6,
-    OWNER_READ  : base.READ << 6,
-
-    // Literal octal numbers are apparently not allowed in "strict" javascript.  Using parseInt is
-    // the preferred way, else a jshint warning is thrown.
-    STICKY      : parseInt('01000', 8),
-    SETGID      : parseInt('02000', 8),
-    SETUID      : parseInt('04000', 8),
-
-    TYPE_MASK   : parseInt('0770000', 8)
-  };
-})({
-  EXEC  : 1,
-  WRITE : 2,
-  READ  : 4
-});
-
-//@
-//@ ### chmod(octal_mode || octal_string, file)
-//@ ### chmod(symbolic_mode, file)
-//@
-//@ Available options:
-//@
-//@ + `-v`: output a diagnostic for every file processed//@
-//@ + `-c`: like verbose but report only when a change is made//@
-//@ + `-R`: change files and directories recursively//@
-//@
-//@ Examples:
-//@
-//@ ```javascript
-//@ chmod(755, '/Users/brandon');
-//@ chmod('755', '/Users/brandon'); // same as above
-//@ chmod('u+x', '/Users/brandon');
-//@ ```
-//@
-//@ Alters the permissions of a file or directory by either specifying the
-//@ absolute permissions in octal form or expressing the changes in symbols.
-//@ This command tries to mimic the POSIX behavior as much as possible.
-//@ Notable exceptions:
-//@
-//@ + In symbolic modes, 'a-r' and '-r' are identical.  No consideration is
-//@   given to the umask.
-//@ + There is no "quiet" option since default behavior is to run silent.
-function _chmod(options, mode, filePattern) {
-  if (!filePattern) {
-    if (options.length > 0 && options.charAt(0) === '-') {
-      // Special case where the specified file permissions started with - to subtract perms, which
-      // get picked up by the option parser as command flags.
-      // If we are down by one argument and options starts with -, shift everything over.
-      filePattern = mode;
-      mode = options;
-      options = '';
-    }
-    else {
-      common.error('You must specify a file.');
-    }
-  }
-
-  options = common.parseOptions(options, {
-    'R': 'recursive',
-    'c': 'changes',
-    'v': 'verbose'
-  });
-
-  if (typeof filePattern === 'string') {
-    filePattern = [ filePattern ];
-  }
-
-  var files;
-
-  if (options.recursive) {
-    files = [];
-    common.expand(filePattern).forEach(function addFile(expandedFile) {
-      var stat = fs.lstatSync(expandedFile);
-
-      if (!stat.isSymbolicLink()) {
-        files.push(expandedFile);
-
-        if (stat.isDirectory()) {  // intentionally does not follow symlinks.
-          fs.readdirSync(expandedFile).forEach(function (child) {
-            addFile(expandedFile + '/' + child);
-          });
-        }
-      }
-    });
-  }
-  else {
-    files = common.expand(filePattern);
-  }
-
-  files.forEach(function innerChmod(file) {
-    file = path.resolve(file);
-    if (!fs.existsSync(file)) {
-      common.error('File not found: ' + file);
-    }
-
-    // When recursing, don't follow symlinks.
-    if (options.recursive && fs.lstatSync(file).isSymbolicLink()) {
-      return;
-    }
-
-    var perms = fs.statSync(file).mode;
-    var type = perms & PERMS.TYPE_MASK;
-
-    var newPerms = perms;
-
-    if (isNaN(parseInt(mode, 8))) {
-      // parse options
-      mode.split(',').forEach(function (symbolicMode) {
-        /*jshint regexdash:true */
-        var pattern = /([ugoa]*)([=\+-])([rwxXst]*)/i;
-        var matches = pattern.exec(symbolicMode);
-
-        if (matches) {
-          var applyTo = matches[1];
-          var operator = matches[2];
-          var change = matches[3];
-
-          var changeOwner = applyTo.indexOf('u') != -1 || applyTo === 'a' || applyTo === '';
-          var changeGroup = applyTo.indexOf('g') != -1 || applyTo === 'a' || applyTo === '';
-          var changeOther = applyTo.indexOf('o') != -1 || applyTo === 'a' || applyTo === '';
-
-          var changeRead   = change.indexOf('r') != -1;
-          var changeWrite  = change.indexOf('w') != -1;
-          var changeExec   = change.indexOf('x') != -1;
-          var changeSticky = change.indexOf('t') != -1;
-          var changeSetuid = change.indexOf('s') != -1;
-
-          var mask = 0;
-          if (changeOwner) {
-            mask |= (changeRead ? PERMS.OWNER_READ : 0) + (changeWrite ? PERMS.OWNER_WRITE : 0) + (changeExec ? PERMS.OWNER_EXEC : 0) + (changeSetuid ? PERMS.SETUID : 0);
-          }
-          if (changeGroup) {
-            mask |= (changeRead ? PERMS.GROUP_READ : 0) + (changeWrite ? PERMS.GROUP_WRITE : 0) + (changeExec ? PERMS.GROUP_EXEC : 0) + (changeSetuid ? PERMS.SETGID : 0);
-          }
-          if (changeOther) {
-            mask |= (changeRead ? PERMS.OTHER_READ : 0) + (changeWrite ? PERMS.OTHER_WRITE : 0) + (changeExec ? PERMS.OTHER_EXEC : 0);
-          }
-
-          // Sticky bit is special - it's not tied to user, group or other.
-          if (changeSticky) {
-            mask |= PERMS.STICKY;
-          }
-
-          switch (operator) {
-            case '+':
-              newPerms |= mask;
-              break;
-
-            case '-':
-              newPerms &= ~mask;
-              break;
-
-            case '=':
-              newPerms = type + mask;
-
-              // According to POSIX, when using = to explicitly set the permissions, setuid and setgid can never be cleared.
-              if (fs.statSync(file).isDirectory()) {
-                newPerms |= (PERMS.SETUID + PERMS.SETGID) & perms;
-              }
-              break;
-          }
-
-          if (options.verbose) {
-            log(file + ' -> ' + newPerms.toString(8));
-          }
-
-          if (perms != newPerms) {
-            if (!options.verbose && options.changes) {
-              log(file + ' -> ' + newPerms.toString(8));
-            }
-            fs.chmodSync(file, newPerms);
-          }
-        }
-        else {
-          common.error('Invalid symbolic mode change: ' + symbolicMode);
-        }
-      });
-    }
-    else {
-      // they gave us a full number
-      newPerms = type + parseInt(mode, 8);
-
-      // POSIX rules are that setuid and setgid can only be added using numeric form, but not cleared.
-      if (fs.statSync(file).isDirectory()) {
-        newPerms |= (PERMS.SETUID + PERMS.SETGID) & perms;
-      }
-
-      fs.chmodSync(file, newPerms);
-    }
-  });
-}
-module.exports = _chmod;
diff --git a/bin/node_modules/cordova-common/node_modules/shelljs/src/common.js b/bin/node_modules/cordova-common/node_modules/shelljs/src/common.js
deleted file mode 100644
index d8c2312..0000000
--- a/bin/node_modules/cordova-common/node_modules/shelljs/src/common.js
+++ /dev/null
@@ -1,203 +0,0 @@
-var os = require('os');
-var fs = require('fs');
-var _ls = require('./ls');
-
-// Module globals
-var config = {
-  silent: false,
-  fatal: false
-};
-exports.config = config;
-
-var state = {
-  error: null,
-  currentCmd: 'shell.js',
-  tempDir: null
-};
-exports.state = state;
-
-var platform = os.type().match(/^Win/) ? 'win' : 'unix';
-exports.platform = platform;
-
-function log() {
-  if (!config.silent)
-    console.log.apply(this, arguments);
-}
-exports.log = log;
-
-// Shows error message. Throws unless _continue or config.fatal are true
-function error(msg, _continue) {
-  if (state.error === null)
-    state.error = '';
-  state.error += state.currentCmd + ': ' + msg + '\n';
-
-  if (msg.length > 0)
-    log(state.error);
-
-  if (config.fatal)
-    process.exit(1);
-
-  if (!_continue)
-    throw '';
-}
-exports.error = error;
-
-// In the future, when Proxies are default, we can add methods like `.to()` to primitive strings.
-// For now, this is a dummy function to bookmark places we need such strings
-function ShellString(str) {
-  return str;
-}
-exports.ShellString = ShellString;
-
-// Returns {'alice': true, 'bob': false} when passed a dictionary, e.g.:
-//   parseOptions('-a', {'a':'alice', 'b':'bob'});
-function parseOptions(str, map) {
-  if (!map)
-    error('parseOptions() internal error: no map given');
-
-  // All options are false by default
-  var options = {};
-  for (var letter in map)
-    options[map[letter]] = false;
-
-  if (!str)
-    return options; // defaults
-
-  if (typeof str !== 'string')
-    error('parseOptions() internal error: wrong str');
-
-  // e.g. match[1] = 'Rf' for str = '-Rf'
-  var match = str.match(/^\-(.+)/);
-  if (!match)
-    return options;
-
-  // e.g. chars = ['R', 'f']
-  var chars = match[1].split('');
-
-  chars.forEach(function(c) {
-    if (c in map)
-      options[map[c]] = true;
-    else
-      error('option not recognized: '+c);
-  });
-
-  return options;
-}
-exports.parseOptions = parseOptions;
-
-// Expands wildcards with matching (ie. existing) file names.
-// For example:
-//   expand(['file*.js']) = ['file1.js', 'file2.js', ...]
-//   (if the files 'file1.js', 'file2.js', etc, exist in the current dir)
-function expand(list) {
-  var expanded = [];
-  list.forEach(function(listEl) {
-    // Wildcard present on directory names ?
-    if(listEl.search(/\*[^\/]*\//) > -1 || listEl.search(/\*\*[^\/]*\//) > -1) {
-      var match = listEl.match(/^([^*]+\/|)(.*)/);
-      var root = match[1];
-      var rest = match[2];
-      var restRegex = rest.replace(/\*\*/g, ".*").replace(/\*/g, "[^\\/]*");
-      restRegex = new RegExp(restRegex);
-      
-      _ls('-R', root).filter(function (e) {
-        return restRegex.test(e);
-      }).forEach(function(file) {
-        expanded.push(file);
-      });
-    }
-    // Wildcard present on file names ?
-    else if (listEl.search(/\*/) > -1) {
-      _ls('', listEl).forEach(function(file) {
-        expanded.push(file);
-      });
-    } else {
-      expanded.push(listEl);
-    }
-  });
-  return expanded;
-}
-exports.expand = expand;
-
-// Normalizes _unlinkSync() across platforms to match Unix behavior, i.e.
-// file can be unlinked even if it's read-only, see https://github.com/joyent/node/issues/3006
-function unlinkSync(file) {
-  try {
-    fs.unlinkSync(file);
-  } catch(e) {
-    // Try to override file permission
-    if (e.code === 'EPERM') {
-      fs.chmodSync(file, '0666');
-      fs.unlinkSync(file);
-    } else {
-      throw e;
-    }
-  }
-}
-exports.unlinkSync = unlinkSync;
-
-// e.g. 'shelljs_a5f185d0443ca...'
-function randomFileName() {
-  function randomHash(count) {
-    if (count === 1)
-      return parseInt(16*Math.random(), 10).toString(16);
-    else {
-      var hash = '';
-      for (var i=0; i<count; i++)
-        hash += randomHash(1);
-      return hash;
-    }
-  }
-
-  return 'shelljs_'+randomHash(20);
-}
-exports.randomFileName = randomFileName;
-
-// extend(target_obj, source_obj1 [, source_obj2 ...])
-// Shallow extend, e.g.:
-//    extend({A:1}, {b:2}, {c:3}) returns {A:1, b:2, c:3}
-function extend(target) {
-  var sources = [].slice.call(arguments, 1);
-  sources.forEach(function(source) {
-    for (var key in source)
-      target[key] = source[key];
-  });
-
-  return target;
-}
-exports.extend = extend;
-
-// Common wrapper for all Unix-like commands
-function wrap(cmd, fn, options) {
-  return function() {
-    var retValue = null;
-
-    state.currentCmd = cmd;
-    state.error = null;
-
-    try {
-      var args = [].slice.call(arguments, 0);
-
-      if (options && options.notUnix) {
-        retValue = fn.apply(this, args);
-      } else {
-        if (args.length === 0 || typeof args[0] !== 'string' || args[0][0] !== '-')
-          args.unshift(''); // only add dummy option if '-option' not already present
-        retValue = fn.apply(this, args);
-      }
-    } catch (e) {
-      if (!state.error) {
-        // If state.error hasn't been set it's an error thrown by Node, not us - probably a bug...
-        console.log('shell.js: internal error');
-        console.log(e.stack || e);
-        process.exit(1);
-      }
-      if (config.fatal)
-        throw e;
-    }
-
-    state.currentCmd = 'shell.js';
-    return retValue;
-  };
-} // wrap
-exports.wrap = wrap;
diff --git a/bin/node_modules/cordova-common/node_modules/shelljs/src/cp.js b/bin/node_modules/cordova-common/node_modules/shelljs/src/cp.js
deleted file mode 100644
index ef19f96..0000000
--- a/bin/node_modules/cordova-common/node_modules/shelljs/src/cp.js
+++ /dev/null
@@ -1,204 +0,0 @@
-var fs = require('fs');
-var path = require('path');
-var common = require('./common');
-var os = require('os');
-
-// Buffered file copy, synchronous
-// (Using readFileSync() + writeFileSync() could easily cause a memory overflow
-//  with large files)
-function copyFileSync(srcFile, destFile) {
-  if (!fs.existsSync(srcFile))
-    common.error('copyFileSync: no such file or directory: ' + srcFile);
-
-  var BUF_LENGTH = 64*1024,
-      buf = new Buffer(BUF_LENGTH),
-      bytesRead = BUF_LENGTH,
-      pos = 0,
-      fdr = null,
-      fdw = null;
-
-  try {
-    fdr = fs.openSync(srcFile, 'r');
-  } catch(e) {
-    common.error('copyFileSync: could not read src file ('+srcFile+')');
-  }
-
-  try {
-    fdw = fs.openSync(destFile, 'w');
-  } catch(e) {
-    common.error('copyFileSync: could not write to dest file (code='+e.code+'):'+destFile);
-  }
-
-  while (bytesRead === BUF_LENGTH) {
-    bytesRead = fs.readSync(fdr, buf, 0, BUF_LENGTH, pos);
-    fs.writeSync(fdw, buf, 0, bytesRead);
-    pos += bytesRead;
-  }
-
-  fs.closeSync(fdr);
-  fs.closeSync(fdw);
-
-  fs.chmodSync(destFile, fs.statSync(srcFile).mode);
-}
-
-// Recursively copies 'sourceDir' into 'destDir'
-// Adapted from https://github.com/ryanmcgrath/wrench-js
-//
-// Copyright (c) 2010 Ryan McGrath
-// Copyright (c) 2012 Artur Adib
-//
-// Licensed under the MIT License
-// http://www.opensource.org/licenses/mit-license.php
-function cpdirSyncRecursive(sourceDir, destDir, opts) {
-  if (!opts) opts = {};
-
-  /* Create the directory where all our junk is moving to; read the mode of the source directory and mirror it */
-  var checkDir = fs.statSync(sourceDir);
-  try {
-    fs.mkdirSync(destDir, checkDir.mode);
-  } catch (e) {
-    //if the directory already exists, that's okay
-    if (e.code !== 'EEXIST') throw e;
-  }
-
-  var files = fs.readdirSync(sourceDir);
-
-  for (var i = 0; i < files.length; i++) {
-    var srcFile = sourceDir + "/" + files[i];
-    var destFile = destDir + "/" + files[i];
-    var srcFileStat = fs.lstatSync(srcFile);
-
-    if (srcFileStat.isDirectory()) {
-      /* recursion this thing right on back. */
-      cpdirSyncRecursive(srcFile, destFile, opts);
-    } else if (srcFileStat.isSymbolicLink()) {
-      var symlinkFull = fs.readlinkSync(srcFile);
-      fs.symlinkSync(symlinkFull, destFile, os.platform() === "win32" ? "junction" : null);
-    } else {
-      /* At this point, we've hit a file actually worth copying... so copy it on over. */
-      if (fs.existsSync(destFile) && !opts.force) {
-        common.log('skipping existing file: ' + files[i]);
-      } else {
-        copyFileSync(srcFile, destFile);
-      }
-    }
-
-  } // for files
-} // cpdirSyncRecursive
-
-
-//@
-//@ ### cp([options ,] source [,source ...], dest)
-//@ ### cp([options ,] source_array, dest)
-//@ Available options:
-//@
-//@ + `-f`: force
-//@ + `-r, -R`: recursive
-//@
-//@ Examples:
-//@
-//@ ```javascript
-//@ cp('file1', 'dir1');
-//@ cp('-Rf', '/tmp/*', '/usr/local/*', '/home/tmp');
-//@ cp('-Rf', ['/tmp/*', '/usr/local/*'], '/home/tmp'); // same as above
-//@ ```
-//@
-//@ Copies files. The wildcard `*` is accepted.
-function _cp(options, sources, dest) {
-  options = common.parseOptions(options, {
-    'f': 'force',
-    'R': 'recursive',
-    'r': 'recursive'
-  });
-
-  // Get sources, dest
-  if (arguments.length < 3) {
-    common.error('missing <source> and/or <dest>');
-  } else if (arguments.length > 3) {
-    sources = [].slice.call(arguments, 1, arguments.length - 1);
-    dest = arguments[arguments.length - 1];
-  } else if (typeof sources === 'string') {
-    sources = [sources];
-  } else if ('length' in sources) {
-    sources = sources; // no-op for array
-  } else {
-    common.error('invalid arguments');
-  }
-
-  var exists = fs.existsSync(dest),
-      stats = exists && fs.statSync(dest);
-
-  // Dest is not existing dir, but multiple sources given
-  if ((!exists || !stats.isDirectory()) && sources.length > 1)
-    common.error('dest is not a directory (too many sources)');
-
-  // Dest is an existing file, but no -f given
-  if (exists && stats.isFile() && !options.force)
-    common.error('dest file already exists: ' + dest);
-
-  if (options.recursive) {
-    // Recursive allows the shortcut syntax "sourcedir/" for "sourcedir/*"
-    // (see Github issue #15)
-    sources.forEach(function(src, i) {
-      if (src[src.length - 1] === '/')
-        sources[i] += '*';
-    });
-
-    // Create dest
-    try {
-      fs.mkdirSync(dest, parseInt('0777', 8));
-    } catch (e) {
-      // like Unix's cp, keep going even if we can't create dest dir
-    }
-  }
-
-  sources = common.expand(sources);
-
-  sources.forEach(function(src) {
-    if (!fs.existsSync(src)) {
-      common.error('no such file or directory: '+src, true);
-      return; // skip file
-    }
-
-    // If here, src exists
-    if (fs.statSync(src).isDirectory()) {
-      if (!options.recursive) {
-        // Non-Recursive
-        common.log(src + ' is a directory (not copied)');
-      } else {
-        // Recursive
-        // 'cp /a/source dest' should create 'source' in 'dest'
-        var newDest = path.join(dest, path.basename(src)),
-            checkDir = fs.statSync(src);
-        try {
-          fs.mkdirSync(newDest, checkDir.mode);
-        } catch (e) {
-          //if the directory already exists, that's okay
-          if (e.code !== 'EEXIST') {
-            common.error('dest file no such file or directory: ' + newDest, true);
-            throw e;
-          }
-        }
-
-        cpdirSyncRecursive(src, newDest, {force: options.force});
-      }
-      return; // done with dir
-    }
-
-    // If here, src is a file
-
-    // When copying to '/path/dir':
-    //    thisDest = '/path/dir/file1'
-    var thisDest = dest;
-    if (fs.existsSync(dest) && fs.statSync(dest).isDirectory())
-      thisDest = path.normalize(dest + '/' + path.basename(src));
-
-    if (fs.existsSync(thisDest) && !options.force) {
-      common.error('dest file already exists: ' + thisDest, true);
-      return; // skip file
-    }
-
-    copyFileSync(src, thisDest);
-  }); // forEach(src)
-}
-module.exports = _cp;
diff --git a/bin/node_modules/cordova-common/node_modules/shelljs/src/dirs.js b/bin/node_modules/cordova-common/node_modules/shelljs/src/dirs.js
deleted file mode 100644
index 58fae8b..0000000
--- a/bin/node_modules/cordova-common/node_modules/shelljs/src/dirs.js
+++ /dev/null
@@ -1,191 +0,0 @@
-var common = require('./common');
-var _cd = require('./cd');
-var path = require('path');
-
-// Pushd/popd/dirs internals
-var _dirStack = [];
-
-function _isStackIndex(index) {
-  return (/^[\-+]\d+$/).test(index);
-}
-
-function _parseStackIndex(index) {
-  if (_isStackIndex(index)) {
-    if (Math.abs(index) < _dirStack.length + 1) { // +1 for pwd
-      return (/^-/).test(index) ? Number(index) - 1 : Number(index);
-    } else {
-      common.error(index + ': directory stack index out of range');
-    }
-  } else {
-    common.error(index + ': invalid number');
-  }
-}
-
-function _actualDirStack() {
-  return [process.cwd()].concat(_dirStack);
-}
-
-//@
-//@ ### pushd([options,] [dir | '-N' | '+N'])
-//@
-//@ Available options:
-//@
-//@ + `-n`: Suppresses the normal change of directory when adding directories to the stack, so that only the stack is manipulated.
-//@
-//@ Arguments:
-//@
-//@ + `dir`: Makes the current working directory be the top of the stack, and then executes the equivalent of `cd dir`.
-//@ + `+N`: Brings the Nth directory (counting from the left of the list printed by dirs, starting with zero) to the top of the list by rotating the stack.
-//@ + `-N`: Brings the Nth directory (counting from the right of the list printed by dirs, starting with zero) to the top of the list by rotating the stack.
-//@
-//@ Examples:
-//@
-//@ ```javascript
-//@ // process.cwd() === '/usr'
-//@ pushd('/etc'); // Returns /etc /usr
-//@ pushd('+1');   // Returns /usr /etc
-//@ ```
-//@
-//@ Save the current directory on the top of the directory stack and then cd to `dir`. With no arguments, pushd exchanges the top two directories. Returns an array of paths in the stack.
-function _pushd(options, dir) {
-  if (_isStackIndex(options)) {
-    dir = options;
-    options = '';
-  }
-
-  options = common.parseOptions(options, {
-    'n' : 'no-cd'
-  });
-
-  var dirs = _actualDirStack();
-
-  if (dir === '+0') {
-    return dirs; // +0 is a noop
-  } else if (!dir) {
-    if (dirs.length > 1) {
-      dirs = dirs.splice(1, 1).concat(dirs);
-    } else {
-      return common.error('no other directory');
-    }
-  } else if (_isStackIndex(dir)) {
-    var n = _parseStackIndex(dir);
-    dirs = dirs.slice(n).concat(dirs.slice(0, n));
-  } else {
-    if (options['no-cd']) {
-      dirs.splice(1, 0, dir);
-    } else {
-      dirs.unshift(dir);
-    }
-  }
-
-  if (options['no-cd']) {
-    dirs = dirs.slice(1);
-  } else {
-    dir = path.resolve(dirs.shift());
-    _cd('', dir);
-  }
-
-  _dirStack = dirs;
-  return _dirs('');
-}
-exports.pushd = _pushd;
-
-//@
-//@ ### popd([options,] ['-N' | '+N'])
-//@
-//@ Available options:
-//@
-//@ + `-n`: Suppresses the normal change of directory when removing directories from the stack, so that only the stack is manipulated.
-//@
-//@ Arguments:
-//@
-//@ + `+N`: Removes the Nth directory (counting from the left of the list printed by dirs), starting with zero.
-//@ + `-N`: Removes the Nth directory (counting from the right of the list printed by dirs), starting with zero.
-//@
-//@ Examples:
-//@
-//@ ```javascript
-//@ echo(process.cwd()); // '/usr'
-//@ pushd('/etc');       // '/etc /usr'
-//@ echo(process.cwd()); // '/etc'
-//@ popd();              // '/usr'
-//@ echo(process.cwd()); // '/usr'
-//@ ```
-//@
-//@ When no arguments are given, popd removes the top directory from the stack and performs a cd to the new top directory. The elements are numbered from 0 starting at the first directory listed with dirs; i.e., popd is equivalent to popd +0. Returns an array of paths in the stack.
-function _popd(options, index) {
-  if (_isStackIndex(options)) {
-    index = options;
-    options = '';
-  }
-
-  options = common.parseOptions(options, {
-    'n' : 'no-cd'
-  });
-
-  if (!_dirStack.length) {
-    return common.error('directory stack empty');
-  }
-
-  index = _parseStackIndex(index || '+0');
-
-  if (options['no-cd'] || index > 0 || _dirStack.length + index === 0) {
-    index = index > 0 ? index - 1 : index;
-    _dirStack.splice(index, 1);
-  } else {
-    var dir = path.resolve(_dirStack.shift());
-    _cd('', dir);
-  }
-
-  return _dirs('');
-}
-exports.popd = _popd;
-
-//@
-//@ ### dirs([options | '+N' | '-N'])
-//@
-//@ Available options:
-//@
-//@ + `-c`: Clears the directory stack by deleting all of the elements.
-//@
-//@ Arguments:
-//@
-//@ + `+N`: Displays the Nth directory (counting from the left of the list printed by dirs when invoked without options), starting with zero.
-//@ + `-N`: Displays the Nth directory (counting from the right of the list printed by dirs when invoked without options), starting with zero.
-//@
-//@ Display the list of currently remembered directories. Returns an array of paths in the stack, or a single path if +N or -N was specified.
-//@
-//@ See also: pushd, popd
-function _dirs(options, index) {
-  if (_isStackIndex(options)) {
-    index = options;
-    options = '';
-  }
-
-  options = common.parseOptions(options, {
-    'c' : 'clear'
-  });
-
-  if (options['clear']) {
-    _dirStack = [];
-    return _dirStack;
-  }
-
-  var stack = _actualDirStack();
-
-  if (index) {
-    index = _parseStackIndex(index);
-
-    if (index < 0) {
-      index = stack.length + index;
-    }
-
-    common.log(stack[index]);
-    return stack[index];
-  }
-
-  common.log(stack.join(' '));
-
-  return stack;
-}
-exports.dirs = _dirs;
diff --git a/bin/node_modules/cordova-common/node_modules/shelljs/src/echo.js b/bin/node_modules/cordova-common/node_modules/shelljs/src/echo.js
deleted file mode 100644
index 760ea84..0000000
--- a/bin/node_modules/cordova-common/node_modules/shelljs/src/echo.js
+++ /dev/null
@@ -1,20 +0,0 @@
-var common = require('./common');
-
-//@
-//@ ### echo(string [,string ...])
-//@
-//@ Examples:
-//@
-//@ ```javascript
-//@ echo('hello world');
-//@ var str = echo('hello world');
-//@ ```
-//@
-//@ Prints string to stdout, and returns string with additional utility methods
-//@ like `.to()`.
-function _echo() {
-  var messages = [].slice.call(arguments, 0);
-  console.log.apply(this, messages);
-  return common.ShellString(messages.join(' '));
-}
-module.exports = _echo;
diff --git a/bin/node_modules/cordova-common/node_modules/shelljs/src/error.js b/bin/node_modules/cordova-common/node_modules/shelljs/src/error.js
deleted file mode 100644
index cca3efb..0000000
--- a/bin/node_modules/cordova-common/node_modules/shelljs/src/error.js
+++ /dev/null
@@ -1,10 +0,0 @@
-var common = require('./common');
-
-//@
-//@ ### error()
-//@ Tests if error occurred in the last command. Returns `null` if no error occurred,
-//@ otherwise returns string explaining the error
-function error() {
-  return common.state.error;
-};
-module.exports = error;
diff --git a/bin/node_modules/cordova-common/node_modules/shelljs/src/exec.js b/bin/node_modules/cordova-common/node_modules/shelljs/src/exec.js
deleted file mode 100644
index d259a9f..0000000
--- a/bin/node_modules/cordova-common/node_modules/shelljs/src/exec.js
+++ /dev/null
@@ -1,216 +0,0 @@
-var common = require('./common');
-var _tempDir = require('./tempdir');
-var _pwd = require('./pwd');
-var path = require('path');
-var fs = require('fs');
-var child = require('child_process');
-
-// Hack to run child_process.exec() synchronously (sync avoids callback hell)
-// Uses a custom wait loop that checks for a flag file, created when the child process is done.
-// (Can't do a wait loop that checks for internal Node variables/messages as
-// Node is single-threaded; callbacks and other internal state changes are done in the
-// event loop).
-function execSync(cmd, opts) {
-  var tempDir = _tempDir();
-  var stdoutFile = path.resolve(tempDir+'/'+common.randomFileName()),
-      codeFile = path.resolve(tempDir+'/'+common.randomFileName()),
-      scriptFile = path.resolve(tempDir+'/'+common.randomFileName()),
-      sleepFile = path.resolve(tempDir+'/'+common.randomFileName());
-
-  var options = common.extend({
-    silent: common.config.silent
-  }, opts);
-
-  var previousStdoutContent = '';
-  // Echoes stdout changes from running process, if not silent
-  function updateStdout() {
-    if (options.silent || !fs.existsSync(stdoutFile))
-      return;
-
-    var stdoutContent = fs.readFileSync(stdoutFile, 'utf8');
-    // No changes since last time?
-    if (stdoutContent.length <= previousStdoutContent.length)
-      return;
-
-    process.stdout.write(stdoutContent.substr(previousStdoutContent.length));
-    previousStdoutContent = stdoutContent;
-  }
-
-  function escape(str) {
-    return (str+'').replace(/([\\"'])/g, "\\$1").replace(/\0/g, "\\0");
-  }
-
-  if (fs.existsSync(scriptFile)) common.unlinkSync(scriptFile);
-  if (fs.existsSync(stdoutFile)) common.unlinkSync(stdoutFile);
-  if (fs.existsSync(codeFile)) common.unlinkSync(codeFile);
-
-  var execCommand = '"'+process.execPath+'" '+scriptFile;
-  var execOptions = {
-    env: process.env,
-    cwd: _pwd(),
-    maxBuffer: 20*1024*1024
-  };
-
-  if (typeof child.execSync === 'function') {
-    var script = [
-      "var child = require('child_process')",
-      "  , fs = require('fs');",
-      "var childProcess = child.exec('"+escape(cmd)+"', {env: process.env, maxBuffer: 20*1024*1024}, function(err) {",
-      "  fs.writeFileSync('"+escape(codeFile)+"', err ? err.code.toString() : '0');",
-      "});",
-      "var stdoutStream = fs.createWriteStream('"+escape(stdoutFile)+"');",
-      "childProcess.stdout.pipe(stdoutStream, {end: false});",
-      "childProcess.stderr.pipe(stdoutStream, {end: false});",
-      "childProcess.stdout.pipe(process.stdout);",
-      "childProcess.stderr.pipe(process.stderr);",
-      "var stdoutEnded = false, stderrEnded = false;",
-      "function tryClosing(){ if(stdoutEnded && stderrEnded){ stdoutStream.end(); } }",
-      "childProcess.stdout.on('end', function(){ stdoutEnded = true; tryClosing(); });",
-      "childProcess.stderr.on('end', function(){ stderrEnded = true; tryClosing(); });"
-    ].join('\n');
-
-    fs.writeFileSync(scriptFile, script);
-
-    if (options.silent) {
-      execOptions.stdio = 'ignore';
-    } else {
-      execOptions.stdio = [0, 1, 2];
-    }
-
-    // Welcome to the future
-    child.execSync(execCommand, execOptions);
-  } else {
-    cmd += ' > '+stdoutFile+' 2>&1'; // works on both win/unix
-
-    var script = [
-      "var child = require('child_process')",
-      "  , fs = require('fs');",
-      "var childProcess = child.exec('"+escape(cmd)+"', {env: process.env, maxBuffer: 20*1024*1024}, function(err) {",
-      "  fs.writeFileSync('"+escape(codeFile)+"', err ? err.code.toString() : '0');",
-      "});"
-    ].join('\n');
-
-    fs.writeFileSync(scriptFile, script);
-
-    child.exec(execCommand, execOptions);
-
-    // The wait loop
-    // sleepFile is used as a dummy I/O op to mitigate unnecessary CPU usage
-    // (tried many I/O sync ops, writeFileSync() seems to be only one that is effective in reducing
-    // CPU usage, though apparently not so much on Windows)
-    while (!fs.existsSync(codeFile)) { updateStdout(); fs.writeFileSync(sleepFile, 'a'); }
-    while (!fs.existsSync(stdoutFile)) { updateStdout(); fs.writeFileSync(sleepFile, 'a'); }
-  }
-
-  // At this point codeFile exists, but it's not necessarily flushed yet.
-  // Keep reading it until it is.
-  var code = parseInt('', 10);
-  while (isNaN(code)) {
-    code = parseInt(fs.readFileSync(codeFile, 'utf8'), 10);
-  }
-
-  var stdout = fs.readFileSync(stdoutFile, 'utf8');
-
-  // No biggie if we can't erase the files now -- they're in a temp dir anyway
-  try { common.unlinkSync(scriptFile); } catch(e) {}
-  try { common.unlinkSync(stdoutFile); } catch(e) {}
-  try { common.unlinkSync(codeFile); } catch(e) {}
-  try { common.unlinkSync(sleepFile); } catch(e) {}
-
-  // some shell return codes are defined as errors, per http://tldp.org/LDP/abs/html/exitcodes.html
-  if (code === 1 || code === 2 || code >= 126)  {
-      common.error('', true); // unix/shell doesn't really give an error message after non-zero exit codes
-  }
-  // True if successful, false if not
-  var obj = {
-    code: code,
-    output: stdout
-  };
-  return obj;
-} // execSync()
-
-// Wrapper around exec() to enable echoing output to console in real time
-function execAsync(cmd, opts, callback) {
-  var output = '';
-
-  var options = common.extend({
-    silent: common.config.silent
-  }, opts);
-
-  var c = child.exec(cmd, {env: process.env, maxBuffer: 20*1024*1024}, function(err) {
-    if (callback)
-      callback(err ? err.code : 0, output);
-  });
-
-  c.stdout.on('data', function(data) {
-    output += data;
-    if (!options.silent)
-      process.stdout.write(data);
-  });
-
-  c.stderr.on('data', function(data) {
-    output += data;
-    if (!options.silent)
-      process.stdout.write(data);
-  });
-
-  return c;
-}
-
-//@
-//@ ### exec(command [, options] [, callback])
-//@ Available options (all `false` by default):
-//@
-//@ + `async`: Asynchronous execution. Defaults to true if a callback is provided.
-//@ + `silent`: Do not echo program output to console.
-//@
-//@ Examples:
-//@
-//@ ```javascript
-//@ var version = exec('node --version', {silent:true}).output;
-//@
-//@ var child = exec('some_long_running_process', {async:true});
-//@ child.stdout.on('data', function(data) {
-//@   /* ... do something with data ... */
-//@ });
-//@
-//@ exec('some_long_running_process', function(code, output) {
-//@   console.log('Exit code:', code);
-//@   console.log('Program output:', output);
-//@ });
-//@ ```
-//@
-//@ Executes the given `command` _synchronously_, unless otherwise specified.
-//@ When in synchronous mode returns the object `{ code:..., output:... }`, containing the program's
-//@ `output` (stdout + stderr)  and its exit `code`. Otherwise returns the child process object, and
-//@ the `callback` gets the arguments `(code, output)`.
-//@
-//@ **Note:** For long-lived processes, it's best to run `exec()` asynchronously as
-//@ the current synchronous implementation uses a lot of CPU. This should be getting
-//@ fixed soon.
-function _exec(command, options, callback) {
-  if (!command)
-    common.error('must specify command');
-
-  // Callback is defined instead of options.
-  if (typeof options === 'function') {
-    callback = options;
-    options = { async: true };
-  }
-
-  // Callback is defined with options.
-  if (typeof options === 'object' && typeof callback === 'function') {
-    options.async = true;
-  }
-
-  options = common.extend({
-    silent: common.config.silent,
-    async: false
-  }, options);
-
-  if (options.async)
-    return execAsync(command, options, callback);
-  else
-    return execSync(command, options);
-}
-module.exports = _exec;
diff --git a/bin/node_modules/cordova-common/node_modules/shelljs/src/find.js b/bin/node_modules/cordova-common/node_modules/shelljs/src/find.js
deleted file mode 100644
index d9eeec2..0000000
--- a/bin/node_modules/cordova-common/node_modules/shelljs/src/find.js
+++ /dev/null
@@ -1,51 +0,0 @@
-var fs = require('fs');
-var common = require('./common');
-var _ls = require('./ls');
-
-//@
-//@ ### find(path [,path ...])
-//@ ### find(path_array)
-//@ Examples:
-//@
-//@ ```javascript
-//@ find('src', 'lib');
-//@ find(['src', 'lib']); // same as above
-//@ find('.').filter(function(file) { return file.match(/\.js$/); });
-//@ ```
-//@
-//@ Returns array of all files (however deep) in the given paths.
-//@
-//@ The main difference from `ls('-R', path)` is that the resulting file names
-//@ include the base directories, e.g. `lib/resources/file1` instead of just `file1`.
-function _find(options, paths) {
-  if (!paths)
-    common.error('no path specified');
-  else if (typeof paths === 'object')
-    paths = paths; // assume array
-  else if (typeof paths === 'string')
-    paths = [].slice.call(arguments, 1);
-
-  var list = [];
-
-  function pushFile(file) {
-    if (common.platform === 'win')
-      file = file.replace(/\\/g, '/');
-    list.push(file);
-  }
-
-  // why not simply do ls('-R', paths)? because the output wouldn't give the base dirs
-  // to get the base dir in the output, we need instead ls('-R', 'dir/*') for every directory
-
-  paths.forEach(function(file) {
-    pushFile(file);
-
-    if (fs.statSync(file).isDirectory()) {
-      _ls('-RA', file+'/*').forEach(function(subfile) {
-        pushFile(subfile);
-      });
-    }
-  });
-
-  return list;
-}
-module.exports = _find;
diff --git a/bin/node_modules/cordova-common/node_modules/shelljs/src/grep.js b/bin/node_modules/cordova-common/node_modules/shelljs/src/grep.js
deleted file mode 100644
index 00c7d6a..0000000
--- a/bin/node_modules/cordova-common/node_modules/shelljs/src/grep.js
+++ /dev/null
@@ -1,52 +0,0 @@
-var common = require('./common');
-var fs = require('fs');
-
-//@
-//@ ### grep([options ,] regex_filter, file [, file ...])
-//@ ### grep([options ,] regex_filter, file_array)
-//@ Available options:
-//@
-//@ + `-v`: Inverse the sense of the regex and print the lines not matching the criteria.
-//@
-//@ Examples:
-//@
-//@ ```javascript
-//@ grep('-v', 'GLOBAL_VARIABLE', '*.js');
-//@ grep('GLOBAL_VARIABLE', '*.js');
-//@ ```
-//@
-//@ Reads input string from given files and returns a string containing all lines of the
-//@ file that match the given `regex_filter`. Wildcard `*` accepted.
-function _grep(options, regex, files) {
-  options = common.parseOptions(options, {
-    'v': 'inverse'
-  });
-
-  if (!files)
-    common.error('no paths given');
-
-  if (typeof files === 'string')
-    files = [].slice.call(arguments, 2);
-  // if it's array leave it as it is
-
-  files = common.expand(files);
-
-  var grep = '';
-  files.forEach(function(file) {
-    if (!fs.existsSync(file)) {
-      common.error('no such file or directory: ' + file, true);
-      return;
-    }
-
-    var contents = fs.readFileSync(file, 'utf8'),
-        lines = contents.split(/\r*\n/);
-    lines.forEach(function(line) {
-      var matched = line.match(regex);
-      if ((options.inverse && !matched) || (!options.inverse && matched))
-        grep += line + '\n';
-    });
-  });
-
-  return common.ShellString(grep);
-}
-module.exports = _grep;
diff --git a/bin/node_modules/cordova-common/node_modules/shelljs/src/ln.js b/bin/node_modules/cordova-common/node_modules/shelljs/src/ln.js
deleted file mode 100644
index a7b9701..0000000
--- a/bin/node_modules/cordova-common/node_modules/shelljs/src/ln.js
+++ /dev/null
@@ -1,53 +0,0 @@
-var fs = require('fs');
-var path = require('path');
-var common = require('./common');
-var os = require('os');
-
-//@
-//@ ### ln(options, source, dest)
-//@ ### ln(source, dest)
-//@ Available options:
-//@
-//@ + `s`: symlink
-//@ + `f`: force
-//@
-//@ Examples:
-//@
-//@ ```javascript
-//@ ln('file', 'newlink');
-//@ ln('-sf', 'file', 'existing');
-//@ ```
-//@
-//@ Links source to dest. Use -f to force the link, should dest already exist.
-function _ln(options, source, dest) {
-  options = common.parseOptions(options, {
-    's': 'symlink',
-    'f': 'force'
-  });
-
-  if (!source || !dest) {
-    common.error('Missing <source> and/or <dest>');
-  }
-
-  source = path.resolve(process.cwd(), String(source));
-  dest = path.resolve(process.cwd(), String(dest));
-
-  if (!fs.existsSync(source)) {
-    common.error('Source file does not exist', true);
-  }
-
-  if (fs.existsSync(dest)) {
-    if (!options.force) {
-      common.error('Destination file exists', true);
-    }
-
-    fs.unlinkSync(dest);
-  }
-
-  if (options.symlink) {
-    fs.symlinkSync(source, dest, os.platform() === "win32" ? "junction" : null);
-  } else {
-    fs.linkSync(source, dest, os.platform() === "win32" ? "junction" : null);
-  }
-}
-module.exports = _ln;
diff --git a/bin/node_modules/cordova-common/node_modules/shelljs/src/ls.js b/bin/node_modules/cordova-common/node_modules/shelljs/src/ls.js
deleted file mode 100644
index 3345db4..0000000
--- a/bin/node_modules/cordova-common/node_modules/shelljs/src/ls.js
+++ /dev/null
@@ -1,126 +0,0 @@
-var path = require('path');
-var fs = require('fs');
-var common = require('./common');
-var _cd = require('./cd');
-var _pwd = require('./pwd');
-
-//@
-//@ ### ls([options ,] path [,path ...])
-//@ ### ls([options ,] path_array)
-//@ Available options:
-//@
-//@ + `-R`: recursive
-//@ + `-A`: all files (include files beginning with `.`, except for `.` and `..`)
-//@
-//@ Examples:
-//@
-//@ ```javascript
-//@ ls('projs/*.js');
-//@ ls('-R', '/users/me', '/tmp');
-//@ ls('-R', ['/users/me', '/tmp']); // same as above
-//@ ```
-//@
-//@ Returns array of files in the given path, or in current directory if no path provided.
-function _ls(options, paths) {
-  options = common.parseOptions(options, {
-    'R': 'recursive',
-    'A': 'all',
-    'a': 'all_deprecated'
-  });
-
-  if (options.all_deprecated) {
-    // We won't support the -a option as it's hard to image why it's useful
-    // (it includes '.' and '..' in addition to '.*' files)
-    // For backwards compatibility we'll dump a deprecated message and proceed as before
-    common.log('ls: Option -a is deprecated. Use -A instead');
-    options.all = true;
-  }
-
-  if (!paths)
-    paths = ['.'];
-  else if (typeof paths === 'object')
-    paths = paths; // assume array
-  else if (typeof paths === 'string')
-    paths = [].slice.call(arguments, 1);
-
-  var list = [];
-
-  // Conditionally pushes file to list - returns true if pushed, false otherwise
-  // (e.g. prevents hidden files to be included unless explicitly told so)
-  function pushFile(file, query) {
-    // hidden file?
-    if (path.basename(file)[0] === '.') {
-      // not explicitly asking for hidden files?
-      if (!options.all && !(path.basename(query)[0] === '.' && path.basename(query).length > 1))
-        return false;
-    }
-
-    if (common.platform === 'win')
-      file = file.replace(/\\/g, '/');
-
-    list.push(file);
-    return true;
-  }
-
-  paths.forEach(function(p) {
-    if (fs.existsSync(p)) {
-      var stats = fs.statSync(p);
-      // Simple file?
-      if (stats.isFile()) {
-        pushFile(p, p);
-        return; // continue
-      }
-
-      // Simple dir?
-      if (stats.isDirectory()) {
-        // Iterate over p contents
-        fs.readdirSync(p).forEach(function(file) {
-          if (!pushFile(file, p))
-            return;
-
-          // Recursive?
-          if (options.recursive) {
-            var oldDir = _pwd();
-            _cd('', p);
-            if (fs.statSync(file).isDirectory())
-              list = list.concat(_ls('-R'+(options.all?'A':''), file+'/*'));
-            _cd('', oldDir);
-          }
-        });
-        return; // continue
-      }
-    }
-
-    // p does not exist - possible wildcard present
-
-    var basename = path.basename(p);
-    var dirname = path.dirname(p);
-    // Wildcard present on an existing dir? (e.g. '/tmp/*.js')
-    if (basename.search(/\*/) > -1 && fs.existsSync(dirname) && fs.statSync(dirname).isDirectory) {
-      // Escape special regular expression chars
-      var regexp = basename.replace(/(\^|\$|\(|\)|<|>|\[|\]|\{|\}|\.|\+|\?)/g, '\\$1');
-      // Translates wildcard into regex
-      regexp = '^' + regexp.replace(/\*/g, '.*') + '$';
-      // Iterate over directory contents
-      fs.readdirSync(dirname).forEach(function(file) {
-        if (file.match(new RegExp(regexp))) {
-          if (!pushFile(path.normalize(dirname+'/'+file), basename))
-            return;
-
-          // Recursive?
-          if (options.recursive) {
-            var pp = dirname + '/' + file;
-            if (fs.lstatSync(pp).isDirectory())
-              list = list.concat(_ls('-R'+(options.all?'A':''), pp+'/*'));
-          } // recursive
-        } // if file matches
-      }); // forEach
-      return;
-    }
-
-    common.error('no such file or directory: ' + p, true);
-  });
-
-  return list;
-}
-module.exports = _ls;
diff --git a/bin/node_modules/cordova-common/node_modules/shelljs/src/mkdir.js b/bin/node_modules/cordova-common/node_modules/shelljs/src/mkdir.js
deleted file mode 100644
index 5a7088f..0000000
--- a/bin/node_modules/cordova-common/node_modules/shelljs/src/mkdir.js
+++ /dev/null
@@ -1,68 +0,0 @@
-var common = require('./common');
-var fs = require('fs');
-var path = require('path');
-
-// Recursively creates 'dir'
-function mkdirSyncRecursive(dir) {
-  var baseDir = path.dirname(dir);
-
-  // Base dir exists, no recursion necessary
-  if (fs.existsSync(baseDir)) {
-    fs.mkdirSync(dir, parseInt('0777', 8));
-    return;
-  }
-
-  // Base dir does not exist, go recursive
-  mkdirSyncRecursive(baseDir);
-
-  // Base dir created, can create dir
-  fs.mkdirSync(dir, parseInt('0777', 8));
-}
-
-//@
-//@ ### mkdir([options ,] dir [, dir ...])
-//@ ### mkdir([options ,] dir_array)
-//@ Available options:
-//@
-//@ + `p`: full path (will create intermediate dirs if necessary)
-//@
-//@ Examples:
-//@
-//@ ```javascript
-//@ mkdir('-p', '/tmp/a/b/c/d', '/tmp/e/f/g');
-//@ mkdir('-p', ['/tmp/a/b/c/d', '/tmp/e/f/g']); // same as above
-//@ ```
-//@
-//@ Creates directories.
-function _mkdir(options, dirs) {
-  options = common.parseOptions(options, {
-    'p': 'fullpath'
-  });
-  if (!dirs)
-    common.error('no paths given');
-
-  if (typeof dirs === 'string')
-    dirs = [].slice.call(arguments, 1);
-  // if it's array leave it as it is
-
-  dirs.forEach(function(dir) {
-    if (fs.existsSync(dir)) {
-      if (!options.fullpath)
-          common.error('path already exists: ' + dir, true);
-      return; // skip dir
-    }
-
-    // Base dir does not exist, and no -p option given
-    var baseDir = path.dirname(dir);
-    if (!fs.existsSync(baseDir) && !options.fullpath) {
-      common.error('no such file or directory: ' + baseDir, true);
-      return; // skip dir
-    }
-
-    if (options.fullpath)
-      mkdirSyncRecursive(dir);
-    else
-      fs.mkdirSync(dir, parseInt('0777', 8));
-  });
-} // mkdir
-module.exports = _mkdir;
diff --git a/bin/node_modules/cordova-common/node_modules/shelljs/src/mv.js b/bin/node_modules/cordova-common/node_modules/shelljs/src/mv.js
deleted file mode 100644
index 11f9607..0000000
--- a/bin/node_modules/cordova-common/node_modules/shelljs/src/mv.js
+++ /dev/null
@@ -1,80 +0,0 @@
-var fs = require('fs');
-var path = require('path');
-var common = require('./common');
-
-//@
-//@ ### mv(source [, source ...], dest')
-//@ ### mv(source_array, dest')
-//@ Available options:
-//@
-//@ + `f`: force
-//@
-//@ Examples:
-//@
-//@ ```javascript
-//@ mv('-f', 'file', 'dir/');
-//@ mv('file1', 'file2', 'dir/');
-//@ mv(['file1', 'file2'], 'dir/'); // same as above
-//@ ```
-//@
-//@ Moves files. The wildcard `*` is accepted.
-function _mv(options, sources, dest) {
-  options = common.parseOptions(options, {
-    'f': 'force'
-  });
-
-  // Get sources, dest
-  if (arguments.length < 3) {
-    common.error('missing <source> and/or <dest>');
-  } else if (arguments.length > 3) {
-    sources = [].slice.call(arguments, 1, arguments.length - 1);
-    dest = arguments[arguments.length - 1];
-  } else if (typeof sources === 'string') {
-    sources = [sources];
-  } else if ('length' in sources) {
-    sources = sources; // no-op for array
-  } else {
-    common.error('invalid arguments');
-  }
-
-  sources = common.expand(sources);
-
-  var exists = fs.existsSync(dest),
-      stats = exists && fs.statSync(dest);
-
-  // Dest is not existing dir, but multiple sources given
-  if ((!exists || !stats.isDirectory()) && sources.length > 1)
-    common.error('dest is not a directory (too many sources)');
-
-  // Dest is an existing file, but no -f given
-  if (exists && stats.isFile() && !options.force)
-    common.error('dest file already exists: ' + dest);
-
-  sources.forEach(function(src) {
-    if (!fs.existsSync(src)) {
-      common.error('no such file or directory: '+src, true);
-      return; // skip file
-    }
-
-    // If here, src exists
-
-    // When copying to '/path/dir':
-    //    thisDest = '/path/dir/file1'
-    var thisDest = dest;
-    if (fs.existsSync(dest) && fs.statSync(dest).isDirectory())
-      thisDest = path.normalize(dest + '/' + path.basename(src));
-
-    if (fs.existsSync(thisDest) && !options.force) {
-      common.error('dest file already exists: ' + thisDest, true);
-      return; // skip file
-    }
-
-    if (path.resolve(src) === path.dirname(path.resolve(thisDest))) {
-      common.error('cannot move to self: '+src, true);
-      return; // skip file
-    }
-
-    fs.renameSync(src, thisDest);
-  }); // forEach(src)
-} // mv
-module.exports = _mv;
diff --git a/bin/node_modules/cordova-common/node_modules/shelljs/src/popd.js b/bin/node_modules/cordova-common/node_modules/shelljs/src/popd.js
deleted file mode 100644
index 11ea24f..0000000
--- a/bin/node_modules/cordova-common/node_modules/shelljs/src/popd.js
+++ /dev/null
@@ -1 +0,0 @@
-// see dirs.js
\ No newline at end of file
diff --git a/bin/node_modules/cordova-common/node_modules/shelljs/src/pushd.js b/bin/node_modules/cordova-common/node_modules/shelljs/src/pushd.js
deleted file mode 100644
index 11ea24f..0000000
--- a/bin/node_modules/cordova-common/node_modules/shelljs/src/pushd.js
+++ /dev/null
@@ -1 +0,0 @@
-// see dirs.js
\ No newline at end of file
diff --git a/bin/node_modules/cordova-common/node_modules/shelljs/src/pwd.js b/bin/node_modules/cordova-common/node_modules/shelljs/src/pwd.js
deleted file mode 100644
index 41727bb..0000000
--- a/bin/node_modules/cordova-common/node_modules/shelljs/src/pwd.js
+++ /dev/null
@@ -1,11 +0,0 @@
-var path = require('path');
-var common = require('./common');
-
-//@
-//@ ### pwd()
-//@ Returns the current directory.
-function _pwd(options) {
-  var pwd = path.resolve(process.cwd());
-  return common.ShellString(pwd);
-}
-module.exports = _pwd;
diff --git a/bin/node_modules/cordova-common/node_modules/shelljs/src/rm.js b/bin/node_modules/cordova-common/node_modules/shelljs/src/rm.js
deleted file mode 100644
index bd608cb..0000000
--- a/bin/node_modules/cordova-common/node_modules/shelljs/src/rm.js
+++ /dev/null
@@ -1,163 +0,0 @@
-var common = require('./common');
-var fs = require('fs');
-
-// Recursively removes 'dir'
-// Adapted from https://github.com/ryanmcgrath/wrench-js
-//
-// Copyright (c) 2010 Ryan McGrath
-// Copyright (c) 2012 Artur Adib
-//
-// Licensed under the MIT License
-// http://www.opensource.org/licenses/mit-license.php
-function rmdirSyncRecursive(dir, force) {
-  var files;
-
-  files = fs.readdirSync(dir);
-
-  // Loop through and delete everything in the sub-tree after checking it
-  for(var i = 0; i < files.length; i++) {
-    var file = dir + "/" + files[i],
-        currFile = fs.lstatSync(file);
-
-    if(currFile.isDirectory()) { // Recursive function back to the beginning
-      rmdirSyncRecursive(file, force);
-    }
-
-    else if(currFile.isSymbolicLink()) { // Unlink symlinks
-      if (force || isWriteable(file)) {
-        try {
-          common.unlinkSync(file);
-        } catch (e) {
-          common.error('could not remove file (code '+e.code+'): ' + file, true);
-        }
-      }
-    }
-
-    else // Assume it's a file - perhaps a try/catch belongs here?
-      if (force || isWriteable(file)) {
-        try {
-          common.unlinkSync(file);
-        } catch (e) {
-          common.error('could not remove file (code '+e.code+'): ' + file, true);
-        }
-      }
-  }
-
-  // Now that we know everything in the sub-tree has been deleted, we can delete the main directory.
-  // Huzzah for the shopkeep.
-
-  var result;
-  try {
-    // Retry on windows, sometimes it takes a little time before all the files in the directory are gone
-    var start = Date.now();
-    while (true) {
-      try {
-        result = fs.rmdirSync(dir);
-        if (fs.existsSync(dir)) throw { code: "EAGAIN" }
-        break;
-      } catch(er) {
-        // In addition to error codes, also check if the directory still exists and loop again if true
-        if (process.platform === "win32" && (er.code === "ENOTEMPTY" || er.code === "EBUSY" || er.code === "EPERM" || er.code === "EAGAIN")) {
-          if (Date.now() - start > 1000) throw er;
-        } else if (er.code === "ENOENT") {
-          // Directory did not exist, deletion was successful
-          break;
-        } else {
-          throw er;
-        }
-      }
-    }
-  } catch(e) {
-    common.error('could not remove directory (code '+e.code+'): ' + dir, true);
-  }
-
-  return result;
-} // rmdirSyncRecursive
-
-// Hack to determine if file has write permissions for current user
-// Avoids having to check user, group, etc, but it's probably slow
-function isWriteable(file) {
-  var writePermission = true;
-  try {
-    var __fd = fs.openSync(file, 'a');
-    fs.closeSync(__fd);
-  } catch(e) {
-    writePermission = false;
-  }
-
-  return writePermission;
-}
-
-//@
-//@ ### rm([options ,] file [, file ...])
-//@ ### rm([options ,] file_array)
-//@ Available options:
-//@
-//@ + `-f`: force
-//@ + `-r, -R`: recursive
-//@
-//@ Examples:
-//@
-//@ ```javascript
-//@ rm('-rf', '/tmp/*');
-//@ rm('some_file.txt', 'another_file.txt');
-//@ rm(['some_file.txt', 'another_file.txt']); // same as above
-//@ ```
-//@
-//@ Removes files. The wildcard `*` is accepted.
-function _rm(options, files) {
-  options = common.parseOptions(options, {
-    'f': 'force',
-    'r': 'recursive',
-    'R': 'recursive'
-  });
-  if (!files)
-    common.error('no paths given');
-
-  if (typeof files === 'string')
-    files = [].slice.call(arguments, 1);
-  // if it's array leave it as it is
-
-  files = common.expand(files);
-
-  files.forEach(function(file) {
-    if (!fs.existsSync(file)) {
-      // Path does not exist, no force flag given
-      if (!options.force)
-        common.error('no such file or directory: '+file, true);
-
-      return; // skip file
-    }
-
-    // If here, path exists
-
-    var stats = fs.lstatSync(file);
-    if (stats.isFile() || stats.isSymbolicLink()) {
-
-      // Do not check for file writing permissions
-      if (options.force) {
-        common.unlinkSync(file);
-        return;
-      }
-
-      if (isWriteable(file))
-        common.unlinkSync(file);
-      else
-        common.error('permission denied: '+file, true);
-
-      return;
-    } // simple file
-
-    // Path is an existing directory, but no -r flag given
-    if (stats.isDirectory() && !options.recursive) {
-      common.error('path is a directory', true);
-      return; // skip path
-    }
-
-    // Recursively remove existing directory
-    if (stats.isDirectory() && options.recursive) {
-      rmdirSyncRecursive(file, options.force);
-    }
-  }); // forEach(file)
-} // rm
-module.exports = _rm;
diff --git a/bin/node_modules/cordova-common/node_modules/shelljs/src/sed.js b/bin/node_modules/cordova-common/node_modules/shelljs/src/sed.js
deleted file mode 100644
index 65f7cb4..0000000
--- a/bin/node_modules/cordova-common/node_modules/shelljs/src/sed.js
+++ /dev/null
@@ -1,43 +0,0 @@
-var common = require('./common');
-var fs = require('fs');
-
-//@
-//@ ### sed([options ,] search_regex, replacement, file)
-//@ Available options:
-//@
-//@ + `-i`: Replace contents of 'file' in-place. _Note that no backups will be created!_
-//@
-//@ Examples:
-//@
-//@ ```javascript
-//@ sed('-i', 'PROGRAM_VERSION', 'v0.1.3', 'source.js');
-//@ sed(/.*DELETE_THIS_LINE.*\n/, '', 'source.js');
-//@ ```
-//@
-//@ Reads an input string from `file` and performs a JavaScript `replace()` on the input
-//@ using the given search regex and replacement string or function. Returns the new string after replacement.
-function _sed(options, regex, replacement, file) {
-  options = common.parseOptions(options, {
-    'i': 'inplace'
-  });
-
-  if (typeof replacement === 'string' || typeof replacement === 'function')
-    replacement = replacement; // no-op
-  else if (typeof replacement === 'number')
-    replacement = replacement.toString(); // fallback
-  else
-    common.error('invalid replacement string');
-
-  if (!file)
-    common.error('no file given');
-
-  if (!fs.existsSync(file))
-    common.error('no such file or directory: ' + file);
-
-  var result = fs.readFileSync(file, 'utf8').replace(regex, replacement);
-  if (options.inplace)
-    fs.writeFileSync(file, result, 'utf8');
-
-  return common.ShellString(result);
-}
-module.exports = _sed;
diff --git a/bin/node_modules/cordova-common/node_modules/shelljs/src/tempdir.js b/bin/node_modules/cordova-common/node_modules/shelljs/src/tempdir.js
deleted file mode 100644
index 45953c2..0000000
--- a/bin/node_modules/cordova-common/node_modules/shelljs/src/tempdir.js
+++ /dev/null
@@ -1,56 +0,0 @@
-var common = require('./common');
-var os = require('os');
-var fs = require('fs');
-
-// Returns false if 'dir' is not a writeable directory, 'dir' otherwise
-function writeableDir(dir) {
-  if (!dir || !fs.existsSync(dir))
-    return false;
-
-  if (!fs.statSync(dir).isDirectory())
-    return false;
-
-  var testFile = dir+'/'+common.randomFileName();
-  try {
-    fs.writeFileSync(testFile, ' ');
-    common.unlinkSync(testFile);
-    return dir;
-  } catch (e) {
-    return false;
-  }
-}
-
-
-//@
-//@ ### tempdir()
-//@
-//@ Examples:
-//@
-//@ ```javascript
-//@ var tmp = tempdir(); // "/tmp" for most *nix platforms
-//@ ```
-//@
-//@ Searches and returns string containing a writeable, platform-dependent temporary directory.
-//@ Follows Python's [tempfile algorithm](http://docs.python.org/library/tempfile.html#tempfile.tempdir).
-function _tempDir() {
-  var state = common.state;
-  if (state.tempDir)
-    return state.tempDir; // from cache
-
-  state.tempDir = writeableDir(os.tempDir && os.tempDir()) || // node 0.8+
-                  writeableDir(process.env['TMPDIR']) ||
-                  writeableDir(process.env['TEMP']) ||
-                  writeableDir(process.env['TMP']) ||
-                  writeableDir(process.env['Wimp$ScrapDir']) || // RiscOS
-                  writeableDir('C:\\TEMP') || // Windows
-                  writeableDir('C:\\TMP') || // Windows
-                  writeableDir('\\TEMP') || // Windows
-                  writeableDir('\\TMP') || // Windows
-                  writeableDir('/tmp') ||
-                  writeableDir('/var/tmp') ||
-                  writeableDir('/usr/tmp') ||
-                  writeableDir('.'); // last resort
-
-  return state.tempDir;
-}
-module.exports = _tempDir;
diff --git a/bin/node_modules/cordova-common/node_modules/shelljs/src/test.js b/bin/node_modules/cordova-common/node_modules/shelljs/src/test.js
deleted file mode 100644
index 8a4ac7d..0000000
--- a/bin/node_modules/cordova-common/node_modules/shelljs/src/test.js
+++ /dev/null
@@ -1,85 +0,0 @@
-var common = require('./common');
-var fs = require('fs');
-
-//@
-//@ ### test(expression)
-//@ Available expression primaries:
-//@
-//@ + `'-b', 'path'`: true if path is a block device
-//@ + `'-c', 'path'`: true if path is a character device
-//@ + `'-d', 'path'`: true if path is a directory
-//@ + `'-e', 'path'`: true if path exists
-//@ + `'-f', 'path'`: true if path is a regular file
-//@ + `'-L', 'path'`: true if path is a symboilc link
-//@ + `'-p', 'path'`: true if path is a pipe (FIFO)
-//@ + `'-S', 'path'`: true if path is a socket
-//@
-//@ Examples:
-//@
-//@ ```javascript
-//@ if (test('-d', path)) { /* do something with dir */ };
-//@ if (!test('-f', path)) continue; // skip if it's a regular file
-//@ ```
-//@
-//@ Evaluates expression using the available primaries and returns corresponding value.
-function _test(options, path) {
-  if (!path)
-    common.error('no path given');
-
-  // hack - only works with unary primaries
-  options = common.parseOptions(options, {
-    'b': 'block',
-    'c': 'character',
-    'd': 'directory',
-    'e': 'exists',
-    'f': 'file',
-    'L': 'link',
-    'p': 'pipe',
-    'S': 'socket'
-  });
-
-  var canInterpret = false;
-  for (var key in options)
-    if (options[key] === true) {
-      canInterpret = true;
-      break;
-    }
-
-  if (!canInterpret)
-    common.error('could not interpret expression');
-
-  if (options.link) {
-    try {
-      return fs.lstatSync(path).isSymbolicLink();
-    } catch(e) {
-      return false;
-    }
-  }
-
-  if (!fs.existsSync(path))
-    return false;
-
-  if (options.exists)
-    return true;
-
-  var stats = fs.statSync(path);
-
-  if (options.block)
-    return stats.isBlockDevice();
-
-  if (options.character)
-    return stats.isCharacterDevice();
-
-  if (options.directory)
-    return stats.isDirectory();
-
-  if (options.file)
-    return stats.isFile();
-
-  if (options.pipe)
-    return stats.isFIFO();
-
-  if (options.socket)
-    return stats.isSocket();
-} // test
-module.exports = _test;
diff --git a/bin/node_modules/cordova-common/node_modules/shelljs/src/to.js b/bin/node_modules/cordova-common/node_modules/shelljs/src/to.js
deleted file mode 100644
index f029999..0000000
--- a/bin/node_modules/cordova-common/node_modules/shelljs/src/to.js
+++ /dev/null
@@ -1,29 +0,0 @@
-var common = require('./common');
-var fs = require('fs');
-var path = require('path');
-
-//@
-//@ ### 'string'.to(file)
-//@
-//@ Examples:
-//@
-//@ ```javascript
-//@ cat('input.txt').to('output.txt');
-//@ ```
-//@
-//@ Analogous to the redirection operator `>` in Unix, but works with JavaScript strings (such as
-//@ those returned by `cat`, `grep`, etc). _Like Unix redirections, `to()` will overwrite any existing file!_
-function _to(options, file) {
-  if (!file)
-    common.error('wrong arguments');
-
-  if (!fs.existsSync( path.dirname(file) ))
-      common.error('no such file or directory: ' + path.dirname(file));
-
-  try {
-    fs.writeFileSync(file, this.toString(), 'utf8');
-  } catch(e) {
-    common.error('could not write to file (code '+e.code+'): '+file, true);
-  }
-}
-module.exports = _to;
diff --git a/bin/node_modules/cordova-common/node_modules/shelljs/src/toEnd.js b/bin/node_modules/cordova-common/node_modules/shelljs/src/toEnd.js
deleted file mode 100644
index f6d099d..0000000
--- a/bin/node_modules/cordova-common/node_modules/shelljs/src/toEnd.js
+++ /dev/null
@@ -1,29 +0,0 @@
-var common = require('./common');
-var fs = require('fs');
-var path = require('path');
-
-//@
-//@ ### 'string'.toEnd(file)
-//@
-//@ Examples:
-//@
-//@ ```javascript
-//@ cat('input.txt').toEnd('output.txt');
-//@ ```
-//@
-//@ Analogous to the redirect-and-append operator `>>` in Unix, but works with JavaScript strings (such as
-//@ those returned by `cat`, `grep`, etc).
-function _toEnd(options, file) {
-  if (!file)
-    common.error('wrong arguments');
-
-  if (!fs.existsSync( path.dirname(file) ))
-      common.error('no such file or directory: ' + path.dirname(file));
-
-  try {
-    fs.appendFileSync(file, this.toString(), 'utf8');
-  } catch(e) {
-    common.error('could not append to file (code '+e.code+'): '+file, true);
-  }
-}
-module.exports = _toEnd;
diff --git a/bin/node_modules/cordova-common/node_modules/shelljs/src/which.js b/bin/node_modules/cordova-common/node_modules/shelljs/src/which.js
deleted file mode 100644
index 2822ecf..0000000
--- a/bin/node_modules/cordova-common/node_modules/shelljs/src/which.js
+++ /dev/null
@@ -1,83 +0,0 @@
-var common = require('./common');
-var fs = require('fs');
-var path = require('path');
-
-// Cross-platform method for splitting environment PATH variables
-function splitPath(p) {
-  for (i=1;i<2;i++) {}
-
-  if (!p)
-    return [];
-
-  if (common.platform === 'win')
-    return p.split(';');
-  else
-    return p.split(':');
-}
-
-function checkPath(path) {
-  return fs.existsSync(path) && fs.statSync(path).isDirectory() == false;
-}
-
-//@
-//@ ### which(command)
-//@
-//@ Examples:
-//@
-//@ ```javascript
-//@ var nodeExec = which('node');
-//@ ```
-//@
-//@ Searches for `command` in the system's PATH. On Windows looks for `.exe`, `.cmd`, and `.bat` extensions.
-//@ Returns string containing the absolute path to the command.
-function _which(options, cmd) {
-  if (!cmd)
-    common.error('must specify command');
-
-  var pathEnv = process.env.path || process.env.Path || process.env.PATH,
-      pathArray = splitPath(pathEnv),
-      where = null;
-
-  // No relative/absolute paths provided?
-  if (cmd.search(/\//) === -1) {
-    // Search for command in PATH
-    pathArray.forEach(function(dir) {
-      if (where)
-        return; // already found it
-
-      var attempt = path.resolve(dir + '/' + cmd);
-      if (checkPath(attempt)) {
-        where = attempt;
-        return;
-      }
-
-      if (common.platform === 'win') {
-        var baseAttempt = attempt;
-        attempt = baseAttempt + '.exe';
-        if (checkPath(attempt)) {
-          where = attempt;
-          return;
-        }
-        attempt = baseAttempt + '.cmd';
-        if (checkPath(attempt)) {
-          where = attempt;
-          return;
-        }
-        attempt = baseAttempt + '.bat';
-        if (checkPath(attempt)) {
-          where = attempt;
-          return;
-        }
-      } // if 'win'
-    });
-  }
-
-  // Command not found anywhere?
-  if (!checkPath(cmd) && !where)
-    return null;
-
-  where = where || path.resolve(cmd);
-
-  return common.ShellString(where);
-}
-module.exports = _which;
diff --git a/bin/node_modules/cordova-common/package.json b/bin/node_modules/cordova-common/package.json
deleted file mode 100644
index 7f64eff..0000000
--- a/bin/node_modules/cordova-common/package.json
+++ /dev/null
@@ -1,89 +0,0 @@
-{
-  "author": {
-    "name": "Apache Software Foundation"
-  },
-  "name": "cordova-common",
-  "description": "Apache Cordova tools and platforms shared routines",
-  "license": "Apache-2.0",
-  "version": "1.0.0",
-  "repository": {
-    "type": "git",
-    "url": "git://git-wip-us.apache.org/repos/asf/cordova-common.git"
-  },
-  "bugs": {
-    "url": "https://issues.apache.org/jira/browse/CB",
-    "email": "dev@cordova.apache.org"
-  },
-  "main": "cordova-common.js",
-  "engines": {
-    "node": ">=0.9.9"
-  },
-  "scripts": {
-    "test": "npm run jshint && npm run jasmine",
-    "jshint": "node node_modules/jshint/bin/jshint src && node node_modules/jshint/bin/jshint spec",
-    "jasmine": "node node_modules/jasmine-node/bin/jasmine-node --captureExceptions --color spec",
-    "cover": "node node_modules/istanbul/lib/cli.js cover --root src --print detail node_modules/jasmine-node/bin/jasmine-node -- spec"
-  },
-  "engineStrict": true,
-  "dependencies": {
-    "bplist-parser": "^0.1.0",
-    "cordova-registry-mapper": "^1.1.8",
-    "elementtree": "^0.1.6",
-    "glob": "^5.0.13",
-    "osenv": "^0.1.3",
-    "plist": "^1.1.0",
-    "q": "^1.4.1",
-    "semver": "^5.0.1",
-    "shelljs": "^0.5.1",
-    "underscore": "^1.8.3",
-    "unorm": "^1.3.3"
-  },
-  "devDependencies": {
-    "istanbul": "^0.3.17",
-    "jasmine-node": "^1.14.5",
-    "jshint": "^2.8.0"
-  },
-  "contributors": [],
-  "_id": "cordova-common@1.0.0",
-  "_shasum": "b21947e89a4a89292ec563abf9ee6ccb2b9f3aef",
-  "_resolved": "https://registry.npmjs.org/cordova-common/-/cordova-common-1.0.0.tgz",
-  "_from": "cordova-common@",
-  "_npmVersion": "2.14.7",
-  "_nodeVersion": "4.2.1",
-  "_npmUser": {
-    "name": "kotikov.vladimir",
-    "email": "kotikov.vladimir@gmail.com"
-  },
-  "dist": {
-    "shasum": "b21947e89a4a89292ec563abf9ee6ccb2b9f3aef",
-    "tarball": "http://registry.npmjs.org/cordova-common/-/cordova-common-1.0.0.tgz"
-  },
-  "maintainers": [
-    {
-      "name": "bowserj",
-      "email": "bowserj@apache.org"
-    },
-    {
-      "name": "kotikov.vladimir",
-      "email": "kotikov.vladimir@gmail.com"
-    },
-    {
-      "name": "purplecabbage",
-      "email": "purplecabbage@gmail.com"
-    },
-    {
-      "name": "shazron",
-      "email": "shazron@gmail.com"
-    },
-    {
-      "name": "stevegill",
-      "email": "stevengill97@gmail.com"
-    },
-    {
-      "name": "timbarham",
-      "email": "npmjs@barhams.info"
-    }
-  ],
-  "directories": {},
-  "readme": "ERROR: No README data found!"
-}
diff --git a/bin/node_modules/cordova-common/src/.jshintrc b/bin/node_modules/cordova-common/src/.jshintrc
deleted file mode 100644
index 89a121c..0000000
--- a/bin/node_modules/cordova-common/src/.jshintrc
+++ /dev/null
@@ -1,10 +0,0 @@
-{
-    "node": true
-  , "bitwise": true
-  , "undef": true
-  , "trailing": true
-  , "quotmark": true
-  , "indent": 4
-  , "unused": "vars"
-  , "latedef": "nofunc"
-}
diff --git a/bin/node_modules/cordova-common/src/ActionStack.js b/bin/node_modules/cordova-common/src/ActionStack.js
deleted file mode 100644
index 5ef6f84..0000000
--- a/bin/node_modules/cordova-common/src/ActionStack.js
+++ /dev/null
@@ -1,85 +0,0 @@
-/**
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements.  See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership.  The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-    KIND, either express or implied.  See the License for the
-    specific language governing permissions and limitations
-    under the License.
-*/
-
-/* jshint quotmark:false */
-
-var events = require('./events'),
-    Q = require('q');
-
-function ActionStack() {
-    this.stack = [];
-    this.completed = [];
-}
-
-ActionStack.prototype = {
-    createAction:function(handler, action_params, reverter, revert_params) {
-        return {
-            handler:{
-                run:handler,
-                params:action_params
-            },
-            reverter:{
-                run:reverter,
-                params:revert_params
-            }
-        };
-    },
-    push:function(tx) {
-        this.stack.push(tx);
-    },
-    // Returns a promise.
-    process:function(platform) {
-        events.emit('verbose', 'Beginning processing of action stack for ' + platform + ' project...');
-
-        while (this.stack.length) {
-            var action = this.stack.shift();
-            var handler = action.handler.run;
-            var action_params = action.handler.params;
-
-            try {
-                handler.apply(null, action_params);
-            } catch(e) {
-                events.emit('warn', 'Error during processing of action! Attempting to revert...');
-                this.stack.unshift(action);
-                var issue = 'Uh oh!\n';
-                // revert completed tasks
-                while(this.completed.length) {
-                    var undo = this.completed.shift();
-                    var revert = undo.reverter.run;
-                    var revert_params = undo.reverter.params;
-
-                    try {
-                        revert.apply(null, revert_params);
-                    } catch(err) {
-                        events.emit('warn', 'Error during reversion of action! We probably really messed up your project now, sorry! D:');
-                        issue += 'A reversion action failed: ' + err.message + '\n';
-                    }
-                }
-                e.message = issue + e.message;
-                return Q.reject(e);
-            }
-            this.completed.push(action);
-        }
-        events.emit('verbose', 'Action stack processing complete.');
-
-        return Q();
-    }
-};
-
-module.exports = ActionStack;
diff --git a/bin/node_modules/cordova-common/src/ConfigChanges/ConfigChanges.js b/bin/node_modules/cordova-common/src/ConfigChanges/ConfigChanges.js
deleted file mode 100644
index 72d6f7b..0000000
--- a/bin/node_modules/cordova-common/src/ConfigChanges/ConfigChanges.js
+++ /dev/null
@@ -1,325 +0,0 @@
-/*
- *
- * Copyright 2013 Anis Kadri
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
-*/
-
-/*
- * This module deals with shared configuration / dependency "stuff". That is:
- * - XML configuration files such as config.xml, AndroidManifest.xml or WMAppManifest.xml.
- * - plist files in OSX
- * Essentially, any type of shared resources that we need to handle with awareness
- * of how potentially multiple plugins depend on a single shared resource, should be
- * handled in this module.
- *
- * The implementation uses an object as a hash table, with "leaves" of the table tracking
- * reference counts.
- */
-
-/* jshint sub:true */
-
-var fs   = require('fs'),
-    path = require('path'),
-    et   = require('elementtree'),
-    semver = require('semver'),
-    events = require('../events'),
-    ConfigKeeper = require('./ConfigKeeper');
-
-var mungeutil = require('./munge-util');
-
-exports.PlatformMunger = PlatformMunger;
-
-exports.process = function(plugins_dir, project_dir, platform, platformJson, pluginInfoProvider) {
-    var munger = new PlatformMunger(platform, project_dir, platformJson, pluginInfoProvider);
-    munger.process(plugins_dir);
-    munger.save_all();
-};
-
-/******************************************************************************
-* PlatformMunger class
-*
-* Can deal with config file of a single project.
-* Parsed config files are cached in a ConfigKeeper object.
-******************************************************************************/
-function PlatformMunger(platform, project_dir, platformJson, pluginInfoProvider) {
-    this.platform = platform;
-    this.project_dir = project_dir;
-    this.config_keeper = new ConfigKeeper(project_dir);
-    this.platformJson = platformJson;
-    this.pluginInfoProvider = pluginInfoProvider;
-}
-
-// Write out all unsaved files.
-PlatformMunger.prototype.save_all = PlatformMunger_save_all;
-function PlatformMunger_save_all() {
-    this.config_keeper.save_all();
-    this.platformJson.save();
-}
-
-// Apply a munge object to a single config file.
-// The remove parameter tells whether to add the change or remove it.
-PlatformMunger.prototype.apply_file_munge = PlatformMunger_apply_file_munge;
-function PlatformMunger_apply_file_munge(file, munge, remove) {
-    var self = this;
-
-    for (var selector in munge.parents) {
-        for (var xml_child in munge.parents[selector]) {
-            // this xml child is new, graft it (only if config file exists)
-            var config_file = self.config_keeper.get(self.project_dir, self.platform, file);
-            if (config_file.exists) {
-                if (remove) config_file.prune_child(selector, munge.parents[selector][xml_child]);
-                else config_file.graft_child(selector, munge.parents[selector][xml_child]);
-            }
-        }
-    }
-}
-
-
-PlatformMunger.prototype.remove_plugin_changes = remove_plugin_changes;
-function remove_plugin_changes(pluginInfo, is_top_level) {
-    var self = this;
-    var platform_config = self.platformJson.root;
-    var plugin_vars = is_top_level ?
-        platform_config.installed_plugins[pluginInfo.id] :
-        platform_config.dependent_plugins[pluginInfo.id];
-
-    // get config munge, aka how did this plugin change various config files
-    var config_munge = self.generate_plugin_config_munge(pluginInfo, plugin_vars);
-    // global munge looks at all plugins' changes to config files
-    var global_munge = platform_config.config_munge;
-    var munge = mungeutil.decrement_munge(global_munge, config_munge);
-
-    for (var file in munge.files) {
-        // CB-6976 Windows Universal Apps. Compatibility fix for existing plugins.
-        if (self.platform == 'windows' && file == 'package.appxmanifest' &&
-            !fs.existsSync(path.join(self.project_dir, 'package.appxmanifest'))) {
-            // New windows template separate manifest files for Windows8, Windows8.1 and WP8.1
-            var substs = ['package.phone.appxmanifest', 'package.windows.appxmanifest', 'package.windows80.appxmanifest', 'package.windows10.appxmanifest'];
-            /* jshint loopfunc:true */
-            substs.forEach(function(subst) {
-                events.emit('verbose', 'Applying munge to ' + subst);
-                self.apply_file_munge(subst, munge.files[file], true);
-            });
-            /* jshint loopfunc:false */
-        }
-        self.apply_file_munge(file, munge.files[file], /* remove = */ true);
-    }
-
-    // Remove from installed_plugins
-    self.platformJson.removePlugin(pluginInfo.id, is_top_level);
-    return self;
-}
-
-
-PlatformMunger.prototype.add_plugin_changes = add_plugin_changes;
-function add_plugin_changes(pluginInfo, plugin_vars, is_top_level, should_increment) {
-    var self = this;
-    var platform_config = self.platformJson.root;
-
-    // get config munge, aka how should this plugin change various config files
-    var config_munge = self.generate_plugin_config_munge(pluginInfo, plugin_vars);
-    // global munge looks at all plugins' changes to config files
-
-    // TODO: The should_increment param is only used by cordova-cli and is going away soon.
-    // If should_increment is set to false, avoid modifying the global_munge (use clone)
-    // and apply the entire config_munge because it's already a proper subset of the global_munge.
-    var munge, global_munge;
-    if (should_increment) {
-        global_munge = platform_config.config_munge;
-        munge = mungeutil.increment_munge(global_munge, config_munge);
-    } else {
-        global_munge = mungeutil.clone_munge(platform_config.config_munge);
-        munge = config_munge;
-    }
-
-    for (var file in munge.files) {
-        // CB-6976 Windows Universal Apps. Compatibility fix for existing plugins.
-        if (self.platform == 'windows' && file == 'package.appxmanifest' &&
-            !fs.existsSync(path.join(self.project_dir, 'package.appxmanifest'))) {
-            var substs = ['package.phone.appxmanifest', 'package.windows.appxmanifest', 'package.windows80.appxmanifest', 'package.windows10.appxmanifest'];
-            /* jshint loopfunc:true */
-            substs.forEach(function(subst) {
-                events.emit('verbose', 'Applying munge to ' + subst);
-                self.apply_file_munge(subst, munge.files[file]);
-            });
-            /* jshint loopfunc:false */
-        }
-        self.apply_file_munge(file, munge.files[file]);
-    }
-
-    // Move to installed/dependent_plugins
-    self.platformJson.addPlugin(pluginInfo.id, plugin_vars || {}, is_top_level);
-    return self;
-}
-
-
-// Load the global munge from platform json and apply all of it.
-// Used by cordova prepare to re-generate some config file from platform
-// defaults and the global munge.
-PlatformMunger.prototype.reapply_global_munge = reapply_global_munge ;
-function reapply_global_munge () {
-    var self = this;
-
-    var platform_config = self.platformJson.root;
-    var global_munge = platform_config.config_munge;
-    for (var file in global_munge.files) {
-        self.apply_file_munge(file, global_munge.files[file]);
-    }
-
-    return self;
-}
-
-
-// generate_plugin_config_munge
-// Generate the munge object from plugin.xml + vars
-PlatformMunger.prototype.generate_plugin_config_munge = generate_plugin_config_munge;
-function generate_plugin_config_munge(pluginInfo, vars) {
-    var self = this;
-
-    vars = vars || {};
-    var munge = { files: {} };
-    var changes = pluginInfo.getConfigFiles(self.platform);
-
-    // Demux 'package.appxmanifest' into relevant platform-specific appx manifests.
-    // Only spend the cycles if there are version-specific plugin settings
-    if (self.platform === 'windows' &&
-            changes.some(function(change) {
-                return ((typeof change.versions !== 'undefined') ||
-                    (typeof change.deviceTarget !== 'undefined'));
-            }))
-    {
-        var manifests = {
-            'windows': {
-                '8.0.0': 'package.windows80.appxmanifest',
-                '8.1.0': 'package.windows.appxmanifest',
-                '10.0.0': 'package.windows10.appxmanifest'
-            },
-            'phone': {
-                '8.1.0': 'package.phone.appxmanifest',
-                '10.0.0': 'package.windows10.appxmanifest'
-            },
-            'all': {
-                '8.0.0': 'package.windows80.appxmanifest',
-                '8.1.0': ['package.windows.appxmanifest', 'package.phone.appxmanifest'],
-                '10.0.0': 'package.windows10.appxmanifest'
-            }
-        };
-
-        var oldChanges = changes;
-        changes = [];
-
-        oldChanges.forEach(function(change, changeIndex) {
-            // Only support semver/device-target demux for package.appxmanifest
-            // Pass through in case something downstream wants to use it
-            if (change.target !== 'package.appxmanifest') {
-                changes.push(change);
-                return;
-            }
-
-            var hasVersion = (typeof change.versions !== 'undefined');
-            var hasTargets = (typeof change.deviceTarget !== 'undefined');
-
-            // No semver/device-target for this config-file, pass it through
-            if (!(hasVersion || hasTargets)) {
-                changes.push(change);
-                return;
-            }
-
-            var targetDeviceSet = hasTargets ? change.deviceTarget : 'all';
-            if (['windows', 'phone', 'all'].indexOf(targetDeviceSet) === -1) {
-                // target-device couldn't be resolved, fix it up here to a valid value
-                targetDeviceSet = 'all';
-            }
-            var knownWindowsVersionsForTargetDeviceSet = Object.keys(manifests[targetDeviceSet]);
-
-            // at this point, 'change' targets package.appxmanifest and has a version attribute
-            knownWindowsVersionsForTargetDeviceSet.forEach(function(winver) {
-                // This is a local function that creates the new replacement representing the
-                // mutation.  Used to save code further down.
-                var createReplacement = function(manifestFile, originalChange) {
-                    var replacement = {
-                        target:         manifestFile,
-                        parent:         originalChange.parent,
-                        after:          originalChange.after,
-                        xmls:           originalChange.xmls,
-                        versions:       originalChange.versions,
-                        deviceTarget:   originalChange.deviceTarget
-                    };
-                    return replacement;
-                };
-
-                // version doesn't satisfy, so skip
-                if (hasVersion && !semver.satisfies(winver, change.versions)) {
-                    return;
-                }
-
-                var versionSpecificManifests = manifests[targetDeviceSet][winver];
-                if (versionSpecificManifests.constructor === Array) {
-                    // e.g. all['8.1.0'] === ['pkg.windows.appxmanifest', 'pkg.phone.appxmanifest']
-                    versionSpecificManifests.forEach(function(manifestFile) {
-                        changes.push(createReplacement(manifestFile, change));
-                    });
-                }
-                else {
-                    // versionSpecificManifests is actually a single string
-                    changes.push(createReplacement(versionSpecificManifests, change));
-                }
-            });
-        });
-    }
-
-    changes.forEach(function(change) {
-        change.xmls.forEach(function(xml) {
-            // 1. stringify each xml
-            var stringified = (new et.ElementTree(xml)).write({xml_declaration:false});
-            // interp vars
-            if (vars) {
-                Object.keys(vars).forEach(function(key) {
-                    var regExp = new RegExp('\\$' + key, 'g');
-                    stringified = stringified.replace(regExp, vars[key]);
-                });
-            }
-            // 2. add into munge
-            mungeutil.deep_add(munge, change.target, change.parent, { xml: stringified, count: 1, after: change.after });
-        });
-    });
-    return munge;
-}
-
-// Go over the prepare queue and apply the config munges for each plugin
-// that has been (un)installed.
-PlatformMunger.prototype.process = PlatformMunger_process;
-function PlatformMunger_process(plugins_dir) {
-    var self = this;
-    var platform_config = self.platformJson.root;
-
-    // Uninstallation first
-    platform_config.prepare_queue.uninstalled.forEach(function(u) {
-        var pluginInfo = self.pluginInfoProvider.get(path.join(plugins_dir, u.plugin));
-        self.remove_plugin_changes(pluginInfo, u.topLevel);
-    });
-
-    // Now handle installation
-    platform_config.prepare_queue.installed.forEach(function(u) {
-        var pluginInfo = self.pluginInfoProvider.get(path.join(plugins_dir, u.plugin));
-        self.add_plugin_changes(pluginInfo, u.vars, u.topLevel, true);
-    });
-
-    // Empty out installed/ uninstalled queues.
-    platform_config.prepare_queue.uninstalled = [];
-    platform_config.prepare_queue.installed = [];
-}
-/**** END of PlatformMunger ****/
diff --git a/bin/node_modules/cordova-common/src/ConfigChanges/ConfigFile.js b/bin/node_modules/cordova-common/src/ConfigChanges/ConfigFile.js
deleted file mode 100644
index 074c90a..0000000
--- a/bin/node_modules/cordova-common/src/ConfigChanges/ConfigFile.js
+++ /dev/null
@@ -1,208 +0,0 @@
-/*
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
-*/
-
-var fs = require('fs');
-var path = require('path');
-
-var bplist = require('bplist-parser');
-var et   = require('elementtree');
-var glob = require('glob');
-var plist = require('plist');
-
-var plist_helpers = require('../util/plist-helpers');
-var xml_helpers = require('../util/xml-helpers');
-
-/******************************************************************************
-* ConfigFile class
-*
-* Can load and keep various types of config files. Provides some functionality
-* specific to some file types such as grafting XML children. In most cases it
-* should be instantiated by ConfigKeeper.
-*
-* For plugin.xml files use as:
-* plugin_config = self.config_keeper.get(plugin_dir, '', 'plugin.xml');
-*
-* TODO: Consider moving it out to a separate file and maybe partially with
-* overrides in platform handlers.
-******************************************************************************/
-function ConfigFile(project_dir, platform, file_tag) {
-    this.project_dir = project_dir;
-    this.platform = platform;
-    this.file_tag = file_tag;
-    this.is_changed = false;
-
-    this.load();
-}
-
-// ConfigFile.load()
-ConfigFile.prototype.load = ConfigFile_load;
-function ConfigFile_load() {
-    var self = this;
-
-    // config file may be in a place not exactly specified in the target
-    var filepath = self.filepath = resolveConfigFilePath(self.project_dir, self.platform, self.file_tag);
-
-    if ( !filepath || !fs.existsSync(filepath) ) {
-        self.exists = false;
-        return;
-    }
-    self.exists = true;
-    self.mtime = fs.statSync(self.filepath).mtime;
-
-    var ext = path.extname(filepath);
-    // Windows8 uses an appxmanifest, and wp8 will likely use
-    // the same in a future release
-    if (ext == '.xml' || ext == '.appxmanifest') {
-        self.type = 'xml';
-        self.data = xml_helpers.parseElementtreeSync(filepath);
-    } else {
-        // plist file
-        self.type = 'plist';
-        // TODO: isBinaryPlist() reads the file and then parse re-reads it again.
-        //       We always write out text plist, not binary.
-        //       Do we still need to support binary plist?
-        //       If yes, use plist.parseStringSync() and read the file once.
-        self.data = isBinaryPlist(filepath) ?
-                bplist.parseBuffer(fs.readFileSync(filepath)) :
-                plist.parse(fs.readFileSync(filepath, 'utf8'));
-    }
-}
-
-ConfigFile.prototype.save = function ConfigFile_save() {
-    var self = this;
-    if (self.type === 'xml') {
-        fs.writeFileSync(self.filepath, self.data.write({indent: 4}), 'utf-8');
-    } else {
-        // plist
-        var regExp = new RegExp('<string>[ \t\r\n]+?</string>', 'g');
-        fs.writeFileSync(self.filepath, plist.build(self.data).replace(regExp, '<string></string>'));
-    }
-    self.is_changed = false;
-};
-
-ConfigFile.prototype.graft_child = function ConfigFile_graft_child(selector, xml_child) {
-    var self = this;
-    var filepath = self.filepath;
-    var result;
-    if (self.type === 'xml') {
-        var xml_to_graft = [et.XML(xml_child.xml)];
-        result = xml_helpers.graftXML(self.data, xml_to_graft, selector, xml_child.after);
-        if ( !result) {
-            throw new Error('grafting xml at selector "' + selector + '" from "' + filepath + '" during config install went bad :(');
-        }
-    } else {
-        // plist file
-        result = plist_helpers.graftPLIST(self.data, xml_child.xml, selector);
-        if ( !result ) {
-            throw new Error('grafting to plist "' + filepath + '" during config install went bad :(');
-        }
-    }
-    self.is_changed = true;
-};
-
-ConfigFile.prototype.prune_child = function ConfigFile_prune_child(selector, xml_child) {
-    var self = this;
-    var filepath = self.filepath;
-    var result;
-    if (self.type === 'xml') {
-        var xml_to_graft = [et.XML(xml_child.xml)];
-        result = xml_helpers.pruneXML(self.data, xml_to_graft, selector);
-    } else {
-        // plist file
-        result = plist_helpers.prunePLIST(self.data, xml_child.xml, selector);
-    }
-    if (!result) {
-        var err_msg = 'Pruning at selector "' + selector + '" from "' + filepath + '" went bad.';
-        throw new Error(err_msg);
-    }
-    self.is_changed = true;
-};
-
-// Some config-file target attributes are not qualified with a full leading directory, or contain wildcards.
-// Resolve to a real path in this function.
-// TODO: getXCodeProjectname is slow because of glob, try to avoid calling it several times per project.
-function resolveConfigFilePath(project_dir, platform, file) {
-    var filepath = path.join(project_dir, file);
-    var matches;
-
-    if (file.indexOf('*') > -1) {
-        // handle wildcards in targets using glob.
-        matches = glob.sync(path.join(project_dir, '**', file));
-        if (matches.length) filepath = matches[0];
-
-        // [CB-5989] multiple Info.plist files may exist. default to $PROJECT_NAME-Info.plist
-        if(matches.length > 1 && file.indexOf('-Info.plist')>-1){
-            var plistName =  getXCodeProjectname(project_dir)+'-Info.plist';
-            for (var i=0; i < matches.length; i++) {
-                if(matches[i].indexOf(plistName) > -1){
-                    filepath = matches[i];
-                    break;
-                }
-            }
-        }
-        return filepath;
-    }
-
-    // special-case config.xml target that is just "config.xml". This should be resolved to the real location of the file.
-    // TODO: move the logic that contains the locations of config.xml from cordova CLI into plugman.
-    if (file == 'config.xml') {
-        if (platform == 'ubuntu') {
-            filepath = path.join(project_dir, 'config.xml');
-        } else if (platform == 'ios') {
-            var osxpath = getXCodeProjectname(project_dir);
-            filepath = path.join(project_dir,osxpath, 'config.xml');
-        } else if (platform == 'android') {
-            filepath = path.join(project_dir, 'res', 'xml', 'config.xml');
-        } else {
-            matches = glob.sync(path.join(project_dir, '**', 'config.xml'));
-            if (matches.length) filepath = matches[0];
-        }
-        return filepath;
-    }
-
-    // None of the special cases matched, returning project_dir/file.
-    return filepath;
-}
-
-// Find out the real name of an OSX project
-// TODO: glob is slow, need a better way or caching, or avoid using more than once.
-function getXCodeProjectname(project_dir) {
-    var matches = glob.sync(path.join(project_dir, '*.xcodeproj'));
-    var osxpath;
-    if (matches.length === 1) {
-        osxpath = path.basename(matches[0],'.xcodeproj');
-    } else {
-        var msg;
-        if (matches.length === 0) {
-            msg = 'Does not appear to be an xcode project, no xcode project file in ' + project_dir;
-        } else {
-            msg = 'There are multiple *.xcodeproj dirs in ' + project_dir;
-        }
-        throw new Error(msg);
-    }
-    return osxpath;
-}
-
-// determine if a plist file is binary
-function isBinaryPlist(filename) {
-    // I wish there was a synchronous way to read only the first 6 bytes of a
-    // file. This is wasteful :/
-    var buf = '' + fs.readFileSync(filename, 'utf8');
-    // binary plists start with a magic header, "bplist"
-    return buf.substring(0, 6) === 'bplist';
-}
-
-module.exports = ConfigFile;
diff --git a/bin/node_modules/cordova-common/src/ConfigChanges/ConfigKeeper.js b/bin/node_modules/cordova-common/src/ConfigChanges/ConfigKeeper.js
deleted file mode 100644
index 894e922..0000000
--- a/bin/node_modules/cordova-common/src/ConfigChanges/ConfigKeeper.js
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
-*/
-/* jshint sub:true */
-
-var path = require('path');
-var ConfigFile = require('./ConfigFile');
-
-/******************************************************************************
-* ConfigKeeper class
-*
-* Used to load and store config files to avoid re-parsing and writing them out
-* multiple times.
-*
-* The config files are referred to by a fake path constructed as
-* project_dir/platform/file
-* where file is the name used for the file in config munges.
-******************************************************************************/
-function ConfigKeeper(project_dir, plugins_dir) {
-    this.project_dir = project_dir;
-    this.plugins_dir = plugins_dir;
-    this._cached = {};
-}
-
-ConfigKeeper.prototype.get = function ConfigKeeper_get(project_dir, platform, file) {
-    var self = this;
-
-    // This fixes a bug with older plugins - when specifying config xml instead of res/xml/config.xml
-    // https://issues.apache.org/jira/browse/CB-6414
-    if(file == 'config.xml' && platform == 'android'){
-        file = 'res/xml/config.xml';
-    }
-    var fake_path = path.join(project_dir, platform, file);
-
-    if (self._cached[fake_path]) {
-        return self._cached[fake_path];
-    }
-    // File was not cached, need to load.
-    var config_file = new ConfigFile(project_dir, platform, file);
-    self._cached[fake_path] = config_file;
-    return config_file;
-};
-
-
-ConfigKeeper.prototype.save_all = function ConfigKeeper_save_all() {
-    var self = this;
-    Object.keys(self._cached).forEach(function (fake_path) {
-        var config_file = self._cached[fake_path];
-        if (config_file.is_changed) config_file.save();
-    });
-};
-
-module.exports = ConfigKeeper;
diff --git a/bin/node_modules/cordova-common/src/ConfigChanges/munge-util.js b/bin/node_modules/cordova-common/src/ConfigChanges/munge-util.js
deleted file mode 100644
index 307b3c1..0000000
--- a/bin/node_modules/cordova-common/src/ConfigChanges/munge-util.js
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
-*/
-/* jshint sub:true  */
-
-var _ = require('underscore');
-
-// add the count of [key1][key2]...[keyN] to obj
-// return true if it didn't exist before
-exports.deep_add = function deep_add(obj, keys /* or key1, key2 .... */ ) {
-    if ( !Array.isArray(keys) ) {
-        keys = Array.prototype.slice.call(arguments, 1);
-    }
-
-    return exports.process_munge(obj, true/*createParents*/, function (parentArray, k) {
-        var found = _.find(parentArray, function(element) {
-            return element.xml == k.xml;
-        });
-        if (found) {
-            found.after = found.after || k.after;
-            found.count += k.count;
-        } else {
-            parentArray.push(k);
-        }
-        return !found;
-    }, keys);
-};
-
-// decrement the count of [key1][key2]...[keyN] from obj and remove if it reaches 0
-// return true if it was removed or not found
-exports.deep_remove = function deep_remove(obj, keys /* or key1, key2 .... */ ) {
-    if ( !Array.isArray(keys) ) {
-        keys = Array.prototype.slice.call(arguments, 1);
-    }
-
-    var result = exports.process_munge(obj, false/*createParents*/, function (parentArray, k) {
-        var index = -1;
-        var found = _.find(parentArray, function (element) {
-            index++;
-            return element.xml == k.xml;
-        });
-        if (found) {
-            found.count -= k.count;
-            if (found.count > 0) {
-                return false;
-            }
-            else {
-                parentArray.splice(index, 1);
-            }
-        }
-        return undefined;
-    }, keys);
-
-    return typeof result === 'undefined' ? true : result;
-};
-
-// search for [key1][key2]...[keyN]
-// return the object or undefined if not found
-exports.deep_find = function deep_find(obj, keys /* or key1, key2 .... */ ) {
-    if ( !Array.isArray(keys) ) {
-        keys = Array.prototype.slice.call(arguments, 1);
-    }
-
-    return exports.process_munge(obj, false/*createParents?*/, function (parentArray, k) {
-        return _.find(parentArray, function (element) {
-            return element.xml == (k.xml || k);
-        });
-    }, keys);
-};
-
-// Execute func passing it the parent array and the xmlChild key.
-// When createParents is true, add the file and parent items  they are missing
-// When createParents is false, stop and return undefined if the file and/or parent items are missing
-
-exports.process_munge = function process_munge(obj, createParents, func, keys /* or key1, key2 .... */ ) {
-    if ( !Array.isArray(keys) ) {
-        keys = Array.prototype.slice.call(arguments, 1);
-    }
-    var k = keys[0];
-    if (keys.length == 1) {
-        return func(obj, k);
-    } else if (keys.length == 2) {
-        if (!obj.parents[k] && !createParents) {
-            return undefined;
-        }
-        obj.parents[k] = obj.parents[k] || [];
-        return exports.process_munge(obj.parents[k], createParents, func, keys.slice(1));
-    } else if (keys.length == 3){
-        if (!obj.files[k] && !createParents) {
-            return undefined;
-        }
-        obj.files[k] = obj.files[k] || { parents: {} };
-        return exports.process_munge(obj.files[k], createParents, func, keys.slice(1));
-    } else {
-        throw new Error('Invalid key format. Must contain at most 3 elements (file, parent, xmlChild).');
-    }
-};
-
-// All values from munge are added to base as
-// base[file][selector][child] += munge[file][selector][child]
-// Returns a munge object containing values that exist in munge
-// but not in base.
-exports.increment_munge = function increment_munge(base, munge) {
-    var diff = { files: {} };
-
-    for (var file in munge.files) {
-        for (var selector in munge.files[file].parents) {
-            for (var xml_child in munge.files[file].parents[selector]) {
-                var val = munge.files[file].parents[selector][xml_child];
-                // if node not in base, add it to diff and base
-                // else increment it's value in base without adding to diff
-                var newlyAdded = exports.deep_add(base, [file, selector, val]);
-                if (newlyAdded) {
-                    exports.deep_add(diff, file, selector, val);
-                }
-            }
-        }
-    }
-    return diff;
-};
-
-// Update the base munge object as
-// base[file][selector][child] -= munge[file][selector][child]
-// nodes that reached zero value are removed from base and added to the returned munge
-// object.
-exports.decrement_munge = function decrement_munge(base, munge) {
-    var zeroed = { files: {} };
-
-    for (var file in munge.files) {
-        for (var selector in munge.files[file].parents) {
-            for (var xml_child in munge.files[file].parents[selector]) {
-                var val = munge.files[file].parents[selector][xml_child];
-                // if node not in base, add it to diff and base
-                // else increment it's value in base without adding to diff
-                var removed = exports.deep_remove(base, [file, selector, val]);
-                if (removed) {
-                    exports.deep_add(zeroed, file, selector, val);
-                }
-            }
-        }
-    }
-    return zeroed;
-};
-
-// For better readability where used
-exports.clone_munge = function clone_munge(munge) {
-    return exports.increment_munge({}, munge);
-};
diff --git a/bin/node_modules/cordova-common/src/ConfigParser/ConfigParser.js b/bin/node_modules/cordova-common/src/ConfigParser/ConfigParser.js
deleted file mode 100644
index 8bc86e8..0000000
--- a/bin/node_modules/cordova-common/src/ConfigParser/ConfigParser.js
+++ /dev/null
@@ -1,499 +0,0 @@
-/**
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements.  See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership.  The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-    KIND, either express or implied.  See the License for the
-    specific language governing permissions and limitations
-    under the License.
-*/
-
-/* jshint sub:true */
-
-var et = require('elementtree'),
-    xml= require('../util/xml-helpers'),
-    CordovaError = require('../CordovaError/CordovaError'),
-    fs = require('fs'),
-    events = require('../events');
-
-
-/** Wraps a config.xml file */
-function ConfigParser(path) {
-    this.path = path;
-    try {
-        this.doc = xml.parseElementtreeSync(path);
-        this.cdvNamespacePrefix = getCordovaNamespacePrefix(this.doc);
-        et.register_namespace(this.cdvNamespacePrefix, 'http://cordova.apache.org/ns/1.0');
-    } catch (e) {
-        console.error('Parsing '+path+' failed');
-        throw e;
-    }
-    var r = this.doc.getroot();
-    if (r.tag !== 'widget') {
-        throw new CordovaError(path + ' has incorrect root node name (expected "widget", was "' + r.tag + '")');
-    }
-}
-
-function getNodeTextSafe(el) {
-    return el && el.text && el.text.trim();
-}
-
-function findOrCreate(doc, name) {
-    var ret = doc.find(name);
-    if (!ret) {
-        ret = new et.Element(name);
-        doc.getroot().append(ret);
-    }
-    return ret;
-}
-
-function getCordovaNamespacePrefix(doc){
-    var rootAtribs = Object.getOwnPropertyNames(doc.getroot().attrib);
-    var prefix = 'cdv';
-    for (var j = 0; j < rootAtribs.length; j++ ) {
-        if(rootAtribs[j].indexOf('xmlns:') === 0 &&
-            doc.getroot().attrib[rootAtribs[j]] === 'http://cordova.apache.org/ns/1.0'){
-            var strings = rootAtribs[j].split(':');
-            prefix = strings[1];
-            break;
-        }
-    }
-    return prefix;
-}
-
-/**
- * Finds the value of an element's attribute
- * @param  {String} attributeName Name of the attribute to search for
- * @param  {Array}  elems         An array of ElementTree nodes
- * @return {String}
- */
-function findElementAttributeValue(attributeName, elems) {
-
-    elems = Array.isArray(elems) ? elems : [ elems ];
-
-    var value = elems.filter(function (elem) {
-        return elem.attrib.name.toLowerCase() === attributeName.toLowerCase();
-    }).map(function (filteredElems) {
-        return filteredElems.attrib.value;
-    }).pop();
-
-    return value ? value : '';
-}
-
-ConfigParser.prototype = {
-    packageName: function(id) {
-        return this.doc.getroot().attrib['id'];
-    },
-    setPackageName: function(id) {
-        this.doc.getroot().attrib['id'] = id;
-    },
-    android_packageName: function() {
-        return this.doc.getroot().attrib['android-packageName'];
-    },
-    android_activityName: function() {
-	return this.doc.getroot().attrib['android-activityName'];
-    },
-    osx_CFBundleIdentifier: function() {
-        return this.doc.getroot().attrib['osx-CFBundleIdentifier'];
-    },
-    name: function() {
-        return getNodeTextSafe(this.doc.find('name'));
-    },
-    setName: function(name) {
-        var el = findOrCreate(this.doc, 'name');
-        el.text = name;
-    },
-    description: function() {
-        return getNodeTextSafe(this.doc.find('description'));
-    },
-    setDescription: function(text) {
-        var el = findOrCreate(this.doc, 'description');
-        el.text = text;
-    },
-    version: function() {
-        return this.doc.getroot().attrib['version'];
-    },
-    windows_packageVersion: function() {
-        return this.doc.getroot().attrib('windows-packageVersion');
-    },
-    android_versionCode: function() {
-        return this.doc.getroot().attrib['android-versionCode'];
-    },
-    osx_CFBundleVersion: function() {
-        return this.doc.getroot().attrib['osx-CFBundleVersion'] || this.doc.getroot().attrib['ios-CFBundleVersion'];
-    },
-    setVersion: function(value) {
-        this.doc.getroot().attrib['version'] = value;
-    },
-    author: function() {
-        return getNodeTextSafe(this.doc.find('author'));
-    },
-    getGlobalPreference: function (name) {
-        return findElementAttributeValue(name, this.doc.findall('preference'));
-    },
-    setGlobalPreference: function (name, value) {
-        var pref = this.doc.find('preference[@name="' + name + '"]');
-        if (!pref) {
-            pref = new et.Element('preference');
-            pref.attrib.name = name;
-            this.doc.getroot().append(pref);
-        }
-        pref.attrib.value = value;
-    },
-    getPlatformPreference: function (name, platform) {
-        return findElementAttributeValue(name, this.doc.findall('platform[@name=\'' + platform + '\']/preference'));
-    },
-    getPreference: function(name, platform) {
-
-        var platformPreference = '';
-
-        if (platform) {
-            platformPreference = this.getPlatformPreference(name, platform);
-        }
-
-        return platformPreference ? platformPreference : this.getGlobalPreference(name);
-
-    },
-    /**
-     * Returns all resources for the platform specified.
-     * @param  {String} platform     The platform.
-     * @param {string}  resourceName Type of static resources to return.
-     *                               "icon" and "splash" currently supported.
-     * @return {Array}               Resources for the platform specified.
-     */
-    getStaticResources: function(platform, resourceName) {
-        var ret = [],
-            staticResources = [];
-        if (platform) { // platform specific icons
-            this.doc.findall('platform[@name=\'' + platform + '\']/' + resourceName).forEach(function(elt){
-                elt.platform = platform; // mark as platform specific resource
-                staticResources.push(elt);
-            });
-        }
-        // root level resources
-        staticResources = staticResources.concat(this.doc.findall(resourceName));
-        // parse resource elements
-        var that = this;
-        staticResources.forEach(function (elt) {
-            var res = {};
-            res.src = elt.attrib.src;
-            res.density = elt.attrib['density'] || elt.attrib[that.cdvNamespacePrefix+':density'] || elt.attrib['gap:density'];
-            res.platform = elt.platform || null; // null means icon represents default icon (shared between platforms)
-            res.width = +elt.attrib.width || undefined;
-            res.height = +elt.attrib.height || undefined;
-
-            // default icon
-            if (!res.width && !res.height && !res.density) {
-                ret.defaultResource = res;
-            }
-            ret.push(res);
-        });
-
-        /**
-         * Returns resource with specified width and/or height.
-         * @param  {number} width Width of resource.
-         * @param  {number} height Height of resource.
-         * @return {Resource} Resource object or null if not found.
-         */
-        ret.getBySize = function(width, height) {
-            return ret.filter(function(res) {
-                if (!res.width && !res.height) {
-                    return false;
-                }
-                return ((!res.width || (width == res.width)) &&
-                    (!res.height || (height == res.height)));
-            })[0] || null;
-        };
-
-        /**
-         * Returns resource with specified density.
-         * @param  {string} density Density of resource.
-         * @return {Resource}       Resource object or null if not found.
-         */
-        ret.getByDensity = function(density) {
-            return ret.filter(function(res) {
-                return res.density == density;
-            })[0] || null;
-        };
-
-        /** Returns default icons */
-        ret.getDefault = function() {
-            return ret.defaultResource;
-        };
-
-        return ret;
-    },
-
-    /**
-     * Returns all icons for specific platform.
-     * @param  {string} platform Platform name
-     * @return {Resource[]}      Array of icon objects.
-     */
-    getIcons: function(platform) {
-        return this.getStaticResources(platform, 'icon');
-    },
-
-    /**
-     * Returns all splash images for specific platform.
-     * @param  {string} platform Platform name
-     * @return {Resource[]}      Array of Splash objects.
-     */
-    getSplashScreens: function(platform) {
-        return this.getStaticResources(platform, 'splash');
-    },
-
-    /**
-     * Returns all hook scripts for the hook type specified.
-     * @param  {String} hook     The hook type.
-     * @param {Array}  platforms Platforms to look for scripts into (root scripts will be included as well).
-     * @return {Array}               Script elements.
-     */
-    getHookScripts: function(hook, platforms) {
-        var self = this;
-        var scriptElements = self.doc.findall('./hook');
-
-        if(platforms) {
-            platforms.forEach(function (platform) {
-                scriptElements = scriptElements.concat(self.doc.findall('./platform[@name="' + platform + '"]/hook'));
-            });
-        }
-
-        function filterScriptByHookType(el) {
-            return el.attrib.src && el.attrib.type && el.attrib.type.toLowerCase() === hook;
-        }
-
-        return scriptElements.filter(filterScriptByHookType);
-    },
-   /**
-    * Returns a list of plugin (IDs).
-    *
-    * This function also returns any plugin's that
-    * were defined using the legacy <feature> tags.
-    * @return {string[]} Array of plugin IDs
-    */
-    getPluginIdList: function () {
-        var plugins = this.doc.findall('plugin');
-        var result = plugins.map(function(plugin){
-            return plugin.attrib.name;
-        });
-        var features = this.doc.findall('feature');
-        features.forEach(function(element ){
-            var idTag = element.find('./param[@name="id"]');
-            if(idTag){
-                result.push(idTag.attrib.value);
-            }
-        });
-        return result;
-    },
-    getPlugins: function () {
-        return this.getPluginIdList().map(function (pluginId) {
-            return this.getPlugin(pluginId);
-        }, this);
-    },
-    /**
-     * Adds a plugin element. Does not check for duplicates.
-     * @name addPlugin
-     * @function
-     * @param {object} attributes name and spec are supported
-     * @param {Array|object} variables name, value or arbitary object
-     */
-    addPlugin: function (attributes, variables) {
-        if (!attributes && !attributes.name) return;
-        var el = new et.Element('plugin');
-        el.attrib.name = attributes.name;
-        if (attributes.spec) {
-            el.attrib.spec = attributes.spec;
-        }
-
-        // support arbitrary object as variables source
-        if (variables && typeof variables === 'object' && !Array.isArray(variables)) {
-            variables = Object.keys(variables)
-            .map(function (variableName) {
-                return {name: variableName, value: variables[variableName]};
-            });
-        }
-
-        if (variables) {
-            variables.forEach(function (variable) {
-                el.append(new et.Element('variable', { name: variable.name, value: variable.value }));
-            });
-        }
-        this.doc.getroot().append(el);
-    },
-    /**
-     * Retrives the plugin with the given id or null if not found.
-     *
-     * This function also returns any plugin's that
-     * were defined using the legacy <feature> tags.
-     * @name getPlugin
-     * @function
-     * @param {String} id
-     * @returns {object} plugin including any variables
-     */
-    getPlugin: function(id){
-        if(!id){
-            return undefined;
-        }
-        var pluginElement = this.doc.find('./plugin/[@name="' + id + '"]');
-        if (null === pluginElement) {
-            var legacyFeature =  this.doc.find('./feature/param[@name="id"][@value="' + id + '"]/..');
-            if(legacyFeature){
-                 events.emit('log', 'Found deprecated feature entry for ' + id +' in config.xml.');
-                return featureToPlugin(legacyFeature);
-            }
-            return undefined;
-        }
-        var plugin = {};
-
-        plugin.name = pluginElement.attrib.name;
-        plugin.spec = pluginElement.attrib.spec || pluginElement.attrib.src || pluginElement.attrib.version;
-        plugin.variables = {};
-        var variableElements = pluginElement.findall('variable');
-        variableElements.forEach(function(varElement){
-            var name = varElement.attrib.name;
-            var value = varElement.attrib.value;
-            if(name){
-                plugin.variables[name] = value;
-            }
-        });
-        return plugin;
-    },
-    /**
-     * Remove the plugin entry with give name (id).
-     *
-     * This function also operates on any plugin's that
-     * were defined using the legacy <feature> tags.
-     * @name removePlugin
-     * @function
-     * @param id name of the plugin
-     */
-    removePlugin: function(id){
-        if(id){
-            var plugins = this.doc.findall('./plugin/[@name="' + id + '"]')
-                .concat(this.doc.findall('./feature/param[@name="id"][@value="' + id + '"]/..'));
-            var children = this.doc.getroot().getchildren();
-            plugins.forEach(function (plugin) {
-                var idx = children.indexOf(plugin);
-                if (idx > -1) {
-                    children.splice(idx, 1);
-                }
-            });
-        }
-    },
-
-    // Add any element to the root
-    addElement: function(name, attributes) {
-        var el = et.Element(name);
-        for (var a in attributes) {
-            el.attrib[a] = attributes[a];
-        }
-        this.doc.getroot().append(el);
-    },
-
-    /**
-     * Adds an engine. Does not check for duplicates.
-     * @param  {String} name the engine name
-     * @param  {String} spec engine source location or version (optional)
-     */
-    addEngine: function(name, spec){
-        if(!name) return;
-        var el = et.Element('engine');
-        el.attrib.name = name;
-        if(spec){
-            el.attrib.spec = spec;
-        }
-        this.doc.getroot().append(el);
-    },
-    /**
-     * Removes all the engines with given name
-     * @param  {String} name the engine name.
-     */
-    removeEngine: function(name){
-        var engines = this.doc.findall('./engine/[@name="' +name+'"]');
-        for(var i=0; i < engines.length; i++){
-            var children = this.doc.getroot().getchildren();
-            var idx = children.indexOf(engines[i]);
-            if(idx > -1){
-                children.splice(idx,1);
-            }
-        }
-    },
-    getEngines: function(){
-        var engines = this.doc.findall('./engine');
-        return engines.map(function(engine){
-            var spec = engine.attrib.spec || engine.attrib.version;
-            return {
-                'name': engine.attrib.name,
-                'spec': spec ? spec : null
-            };
-        });
-    },
-    /* Get all the access tags */
-    getAccesses: function() {
-        var accesses = this.doc.findall('./access');
-        return accesses.map(function(access){
-            var minimum_tls_version = access.attrib['minimum-tls-version']; /* String */
-            var requires_forward_secrecy = access.attrib['requires-forward-secrecy']; /* Boolean */
-            return {
-                'origin': access.attrib.origin,
-                'minimum_tls_version': minimum_tls_version,
-                'requires_forward_secrecy' : requires_forward_secrecy
-            };
-        });
-    },
-    /* Get all the allow-navigation tags */
-    getAllowNavigations: function() {
-        var allow_navigations = this.doc.findall('./allow-navigation');
-        return allow_navigations.map(function(allow_navigation){
-            var minimum_tls_version = allow_navigation.attrib['minimum-tls-version']; /* String */
-            var requires_forward_secrecy = allow_navigation.attrib['requires-forward-secrecy']; /* Boolean */
-            return {
-                'href': allow_navigation.attrib.href,
-                'minimum_tls_version': minimum_tls_version,
-                'requires_forward_secrecy' : requires_forward_secrecy
-            };
-        });
-    },
-    write:function() {
-        fs.writeFileSync(this.path, this.doc.write({indent: 4}), 'utf-8');
-    }
-};
-
-function featureToPlugin(featureElement) {
-    var plugin = {};
-    plugin.variables = [];
-    var pluginVersion,
-        pluginSrc;
-
-    var nodes = featureElement.findall('param');
-    nodes.forEach(function (element) {
-        var n = element.attrib.name;
-        var v = element.attrib.value;
-        if (n === 'id') {
-            plugin.name = v;
-        } else if (n === 'version') {
-            pluginVersion = v;
-        } else if (n === 'url' || n === 'installPath') {
-            pluginSrc = v;
-        } else {
-            plugin.variables[n] = v;
-        }
-    });
-
-    var spec = pluginSrc || pluginVersion;
-    if (spec) {
-        plugin.spec = spec;
-    }
-
-    return plugin;
-}
-module.exports = ConfigParser;
diff --git a/bin/node_modules/cordova-common/src/ConfigParser/README.md b/bin/node_modules/cordova-common/src/ConfigParser/README.md
deleted file mode 100644
index e5cd1bf..0000000
--- a/bin/node_modules/cordova-common/src/ConfigParser/README.md
+++ /dev/null
@@ -1,86 +0,0 @@
-<!--
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-#  KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
--->
-
-# Cordova-Lib
-
-## ConfigParser
-
-wraps a valid cordova config.xml file 
-
-### Usage
-
-### Include the ConfigParser module in a projet
-
-    var ConfigParser = require('cordova-lib').configparser;
-
-### Create a new ConfigParser
-
-    var config = new ConfigParser('path/to/config/xml/');
-    
-### Utility Functions
-
-#### packageName(id)
-returns document root 'id' attribute value
-#### Usage
-
-    config.packageName: function(id) 
-
-/*
- * sets document root element 'id' attribute to @id
- *
- * @id - new id value
- *
- */
-#### setPackageName(id)
-set document root 'id' attribute to 
- function(id) {
-        this.doc.getroot().attrib['id'] = id;
-    },
-
-### 
-    name: function() {
-        return getNodeTextSafe(this.doc.find('name'));
-    },
-    setName: function(name) {
-        var el = findOrCreate(this.doc, 'name');
-        el.text = name;
-    },
-
-### read the description element
-    
-    config.description()
-
-    var text = "New and improved description of App"
-    setDescription(text)
-    
-### version management
-    version()
-    android_versionCode()
-    ios_CFBundleVersion()
-    setVersion()
-    
-### read author element
-
-   config.author();
-
-### read preference
-
-    config.getPreference(name);
diff --git a/bin/node_modules/cordova-common/src/CordovaError/CordovaError.js b/bin/node_modules/cordova-common/src/CordovaError/CordovaError.js
deleted file mode 100644
index 7262448..0000000
--- a/bin/node_modules/cordova-common/src/CordovaError/CordovaError.js
+++ /dev/null
@@ -1,91 +0,0 @@
-/**
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements.  See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership.  The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-    KIND, either express or implied.  See the License for the
-    specific language governing permissions and limitations
-    under the License.
-*/
-
-/* jshint proto:true */
-
-var EOL = require('os').EOL;
-
-/**
- * A derived exception class. See usage example in cli.js
- * Based on:
- * stackoverflow.com/questions/1382107/whats-a-good-way-to-extend-error-in-javascript/8460753#8460753
- * @param {String} message Error message
- * @param {Number} [code=0] Error code
- * @param {CordovaExternalToolErrorContext} [context] External tool error context object
- * @constructor
- */
-function CordovaError(message, code, context) {
-    Error.captureStackTrace(this, this.constructor);
-    this.name = this.constructor.name;
-    this.message = message;
-    this.code = code || CordovaError.UNKNOWN_ERROR;
-    this.context = context;
-}
-CordovaError.prototype.__proto__ = Error.prototype;
-
-// TODO: Extend error codes according the projects specifics
-CordovaError.UNKNOWN_ERROR = 0;
-CordovaError.EXTERNAL_TOOL_ERROR = 1;
-
-/**
- * Translates instance's error code number into error code name, e.g. 0 -> UNKNOWN_ERROR
- * @returns {string} Error code string name
- */
-CordovaError.prototype.getErrorCodeName = function() {
-    for(var key in CordovaError) {
-        if(CordovaError.hasOwnProperty(key)) {
-            if(CordovaError[key] === this.code) {
-                return key;
-            }
-        }
-    }
-};
-
-/**
- * Converts CordovaError instance to string representation
- * @param   {Boolean}  [isVerbose]  Set up verbose mode. Used to provide more
- *   details including information about error code name and context
- * @return  {String}              Stringified error representation
- */
-CordovaError.prototype.toString = function(isVerbose) {
-    var message = '', codePrefix = '';
-
-    if(this.code !== CordovaError.UNKNOWN_ERROR) {
-        codePrefix = 'code: ' + this.code + (isVerbose ? (' (' + this.getErrorCodeName() + ')') : '') + ' ';
-    }
-
-    if(this.code === CordovaError.EXTERNAL_TOOL_ERROR) {
-        if(typeof this.context !== 'undefined') {
-            if(isVerbose) {
-                message = codePrefix + EOL + this.context.toString(isVerbose) + '\n failed with an error: ' +
-                    this.message + EOL + 'Stack trace: ' + this.stack;
-            } else {
-                message = codePrefix + '\'' + this.context.toString(isVerbose) + '\' ' + this.message;
-            }
-        } else {
-            message = 'External tool failed with an error: ' + this.message;
-        }
-    } else {
-        message = isVerbose ? codePrefix + this.stack : codePrefix + this.message;
-    }
-
-    return message;
-};
-
-module.exports = CordovaError;
diff --git a/bin/node_modules/cordova-common/src/CordovaError/CordovaExternalToolErrorContext.js b/bin/node_modules/cordova-common/src/CordovaError/CordovaExternalToolErrorContext.js
deleted file mode 100644
index ca9a4aa..0000000
--- a/bin/node_modules/cordova-common/src/CordovaError/CordovaExternalToolErrorContext.js
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements.  See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership.  The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied.  See the License for the
- specific language governing permissions and limitations
- under the License.
- */
-
-/* jshint proto:true */
-
-var path = require('path');
-
-/**
- * @param {String} cmd Command full path
- * @param {String[]} args Command args
- * @param {String} [cwd] Command working directory
- * @constructor
- */
-function CordovaExternalToolErrorContext(cmd, args, cwd) {
-    this.cmd = cmd;
-    // Helper field for readability
-    this.cmdShortName = path.basename(cmd);
-    this.args = args;
-    this.cwd = cwd;
-}
-
-CordovaExternalToolErrorContext.prototype.toString = function(isVerbose) {
-    if(isVerbose) {
-        return 'External tool \'' + this.cmdShortName + '\'' +
-            '\nCommand full path: ' + this.cmd + '\nCommand args: ' + this.args +
-            (typeof this.cwd !== 'undefined' ? '\nCommand cwd: ' + this.cwd : '');
-    }
-
-    return this.cmdShortName;
-};
-
-module.exports = CordovaExternalToolErrorContext;
diff --git a/bin/node_modules/cordova-common/src/PlatformJson.js b/bin/node_modules/cordova-common/src/PlatformJson.js
deleted file mode 100644
index 793e976..0000000
--- a/bin/node_modules/cordova-common/src/PlatformJson.js
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
-*/
-/* jshint sub:true */
-
-var fs = require('fs');
-var path = require('path');
-var shelljs = require('shelljs');
-var mungeutil = require('./ConfigChanges/munge-util');
-var pluginMappernto = require('cordova-registry-mapper').newToOld;
-var pluginMapperotn = require('cordova-registry-mapper').oldToNew;
-
-function PlatformJson(filePath, platform, root) {
-    this.filePath = filePath;
-    this.platform = platform;
-    this.root = fix_munge(root || {});
-}
-
-PlatformJson.load = function(plugins_dir, platform) {
-    var filePath = path.join(plugins_dir, platform + '.json');
-    var root = null;
-    if (fs.existsSync(filePath)) {
-        root = JSON.parse(fs.readFileSync(filePath, 'utf-8'));
-    }
-    return new PlatformJson(filePath, platform, root);
-};
-
-PlatformJson.prototype.save = function() {
-    shelljs.mkdir('-p', path.dirname(this.filePath));
-    fs.writeFileSync(this.filePath, JSON.stringify(this.root, null, 4), 'utf-8');
-};
-
-/**
- * Indicates whether the specified plugin is installed as a top-level (not as
- *  dependency to others)
- * @method function
- * @param  {String} pluginId A plugin id to check for.
- * @return {Boolean} true if plugin installed as top-level, otherwise false.
- */
-PlatformJson.prototype.isPluginTopLevel = function(pluginId) {
-    var installedPlugins = this.root.installed_plugins;
-    return installedPlugins[pluginId] ||
-        installedPlugins[pluginMappernto[pluginId]] ||
-        installedPlugins[pluginMapperotn[pluginId]];
-};
-
-/**
- * Indicates whether the specified plugin is installed as a dependency to other
- *  plugin.
- * @method function
- * @param  {String} pluginId A plugin id to check for.
- * @return {Boolean} true if plugin installed as a dependency, otherwise false.
- */
-PlatformJson.prototype.isPluginDependent = function(pluginId) {
-    var dependentPlugins = this.root.dependent_plugins;
-    return dependentPlugins[pluginId] ||
-        dependentPlugins[pluginMappernto[pluginId]] ||
-        dependentPlugins[pluginMapperotn[pluginId]];
-};
-
-/**
- * Indicates whether plugin is installed either as top-level or as dependency.
- * @method function
- * @param  {String} pluginId A plugin id to check for.
- * @return {Boolean} true if plugin installed, otherwise false.
- */
-PlatformJson.prototype.isPluginInstalled = function(pluginId) {
-    return this.isPluginTopLevel(pluginId) ||
-        this.isPluginDependent(pluginId);
-};
-
-PlatformJson.prototype.addPlugin = function(pluginId, variables, isTopLevel) {
-    var pluginsList = isTopLevel ?
-        this.root.installed_plugins :
-        this.root.dependent_plugins;
-
-    pluginsList[pluginId] = variables;
-
-    return this;
-};
-
-PlatformJson.prototype.removePlugin = function(pluginId, isTopLevel) {
-    var pluginsList = isTopLevel ?
-        this.root.installed_plugins :
-        this.root.dependent_plugins;
-
-    delete pluginsList[pluginId];
-
-    return this;
-};
-
-PlatformJson.prototype.addInstalledPluginToPrepareQueue = function(pluginDirName, vars, is_top_level) {
-    this.root.prepare_queue.installed.push({'plugin':pluginDirName, 'vars':vars, 'topLevel':is_top_level});
-};
-
-PlatformJson.prototype.addUninstalledPluginToPrepareQueue = function(pluginId, is_top_level) {
-    this.root.prepare_queue.uninstalled.push({'plugin':pluginId, 'id':pluginId, 'topLevel':is_top_level});
-};
-
-/**
- * Moves plugin, specified by id to top-level plugins. If plugin is top-level
- *  already, then does nothing.
- * @method function
- * @param  {String} pluginId A plugin id to make top-level.
- * @return {PlatformJson} PlatformJson instance.
- */
-PlatformJson.prototype.makeTopLevel = function(pluginId) {
-    var plugin = this.root.dependent_plugins[pluginId];
-    if (plugin) {
-        delete this.root.dependent_plugins[pluginId];
-        this.root.installed_plugins[pluginId] = plugin;
-    }
-    return this;
-};
-
-// convert a munge from the old format ([file][parent][xml] = count) to the current one
-function fix_munge(root) {
-    root.prepare_queue = root.prepare_queue || {installed:[], uninstalled:[]};
-    root.config_munge = root.config_munge || {files: {}};
-    root.installed_plugins = root.installed_plugins || {};
-    root.dependent_plugins = root.dependent_plugins || {};
-
-    var munge = root.config_munge;
-    if (!munge.files) {
-        var new_munge = { files: {} };
-        for (var file in munge) {
-            for (var selector in munge[file]) {
-                for (var xml_child in munge[file][selector]) {
-                    var val = parseInt(munge[file][selector][xml_child]);
-                    for (var i = 0; i < val; i++) {
-                        mungeutil.deep_add(new_munge, [file, selector, { xml: xml_child, count: val }]);
-                    }
-                }
-            }
-        }
-        root.config_munge = new_munge;
-    }
-
-    return root;
-}
-
-module.exports = PlatformJson;
-
diff --git a/bin/node_modules/cordova-common/src/PluginInfo/PluginInfo.js b/bin/node_modules/cordova-common/src/PluginInfo/PluginInfo.js
deleted file mode 100644
index 706cac3..0000000
--- a/bin/node_modules/cordova-common/src/PluginInfo/PluginInfo.js
+++ /dev/null
@@ -1,416 +0,0 @@
-/**
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements.  See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership.  The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-    KIND, either express or implied.  See the License for the
-    specific language governing permissions and limitations
-    under the License.
-*/
-
-/* jshint sub:true, laxcomma:true, laxbreak:true */
-
-/*
-A class for holidng the information currently stored in plugin.xml
-It should also be able to answer questions like whether the plugin
-is compatible with a given engine version.
-
-TODO (kamrik): refactor this to not use sync functions and return promises.
-*/
-
-
-var path = require('path')
-  , fs = require('fs')
-  , xml_helpers = require('../util/xml-helpers')
-  , CordovaError = require('../CordovaError/CordovaError')
-  ;
-
-function PluginInfo(dirname) {
-    var self = this;
-
-    // METHODS
-    // Defined inside the constructor to avoid the "this" binding problems.
-
-    // <preference> tag
-    // Example: <preference name="API_KEY" />
-    // Used to require a variable to be specified via --variable when installing the plugin.
-    self.getPreferences = getPreferences;
-    function getPreferences(platform) {
-        var arprefs = _getTags(self._et, 'preference', platform, _parsePreference);
-
-        var prefs= {};
-        for(var i in arprefs)
-        {
-            var pref=arprefs[i];
-            prefs[pref.preference]=pref.default;
-        }
-        // returns { key : default | null}
-        return prefs;
-    }
-
-    function _parsePreference(prefTag) {
-        var name = prefTag.attrib.name.toUpperCase();
-        var def = prefTag.attrib.default || null;
-        return {preference: name, default: def};
-    }
-
-    // <asset>
-    self.getAssets = getAssets;
-    function getAssets(platform) {
-        var assets = _getTags(self._et, 'asset', platform, _parseAsset);
-        return assets;
-    }
-
-    function _parseAsset(tag) {
-        var src = tag.attrib.src;
-        var target = tag.attrib.target;
-
-        if ( !src || !target) {
-            var msg =
-                'Malformed <asset> tag. Both "src" and "target" attributes'
-                + 'must be specified in\n'
-                + self.filepath
-                ;
-            throw new Error(msg);
-        }
-
-        var asset = {
-            itemType: 'asset',
-            src: src,
-            target: target
-        };
-        return asset;
-    }
-
-
-    // <dependency>
-    // Example:
-    // <dependency id="com.plugin.id"
-    //     url="https://github.com/myuser/someplugin"
-    //     commit="428931ada3891801"
-    //     subdir="some/path/here" />
-    self.getDependencies = getDependencies;
-    function getDependencies(platform) {
-        var deps = _getTags(
-                self._et,
-                'dependency',
-                platform,
-                _parseDependency
-        );
-        return deps;
-    }
-
-    function _parseDependency(tag) {
-        var dep =
-            { id : tag.attrib.id
-            , url : tag.attrib.url || ''
-            , subdir : tag.attrib.subdir || ''
-            , commit : tag.attrib.commit
-            };
-
-        dep.git_ref = dep.commit;
-
-        if ( !dep.id ) {
-            var msg =
-                '<dependency> tag is missing id attribute in '
-                + self.filepath
-                ;
-            throw new CordovaError(msg);
-        }
-        return dep;
-    }
-
-
-    // <config-file> tag
-    self.getConfigFiles = getConfigFiles;
-    function getConfigFiles(platform) {
-        var configFiles = _getTags(self._et, 'config-file', platform, _parseConfigFile);
-        return configFiles;
-    }
-
-    function _parseConfigFile(tag) {
-        var configFile =
-            { target : tag.attrib['target']
-            , parent : tag.attrib['parent']
-            , after : tag.attrib['after']
-            , xmls : tag.getchildren()
-            // To support demuxing via versions
-            , versions : tag.attrib['versions']
-            , deviceTarget: tag.attrib['device-target']
-            };
-        return configFile;
-    }
-
-    // <info> tags, both global and within a <platform>
-    // TODO (kamrik): Do we ever use <info> under <platform>? Example wanted.
-    self.getInfo = getInfo;
-    function getInfo(platform) {
-        var infos = _getTags(
-                self._et,
-                'info',
-                platform,
-                function(elem) { return elem.text; }
-        );
-        // Filter out any undefined or empty strings.
-        infos = infos.filter(Boolean);
-        return infos;
-    }
-
-    // <source-file>
-    // Examples:
-    // <source-file src="src/osx/someLib.a" framework="true" />
-    // <source-file src="src/osx/someLib.a" compiler-flags="-fno-objc-arc" />
-    self.getSourceFiles = getSourceFiles;
-    function getSourceFiles(platform) {
-        var sourceFiles = _getTagsInPlatform(self._et, 'source-file', platform, _parseSourceFile);
-        return sourceFiles;
-    }
-
-    function _parseSourceFile(tag) {
-        return {
-            itemType: 'source-file',
-            src: tag.attrib.src,
-            framework: isStrTrue(tag.attrib.framework),
-            weak: isStrTrue(tag.attrib.weak),
-            compilerFlags: tag.attrib['compiler-flags'],
-            targetDir: tag.attrib['target-dir']
-        };
-    }
-
-    // <header-file>
-    // Example:
-    // <header-file src="CDVFoo.h" />
-    self.getHeaderFiles = getHeaderFiles;
-    function getHeaderFiles(platform) {
-        var headerFiles = _getTagsInPlatform(self._et, 'header-file', platform, function(tag) {
-            return {
-                itemType: 'header-file',
-                src: tag.attrib.src,
-                targetDir: tag.attrib['target-dir']
-            };
-        });
-        return headerFiles;
-    }
-
-    // <resource-file>
-    // Example:
-    // <resource-file src="FooPluginStrings.xml" target="res/values/FooPluginStrings.xml" device-target="win" arch="x86" versions="&gt;=8.1" />
-    self.getResourceFiles = getResourceFiles;
-    function getResourceFiles(platform) {
-        var resourceFiles = _getTagsInPlatform(self._et, 'resource-file', platform, function(tag) {
-            return {
-                itemType: 'resource-file',
-                src: tag.attrib.src,
-                target: tag.attrib.target,
-                versions: tag.attrib.versions,
-                deviceTarget: tag.attrib['device-target'],
-                arch: tag.attrib.arch
-            };
-        });
-        return resourceFiles;
-    }
-
-    // <lib-file>
-    // Example:
-    // <lib-file src="src/BlackBerry10/native/device/libfoo.so" arch="device" />
-    self.getLibFiles = getLibFiles;
-    function getLibFiles(platform) {
-        var libFiles = _getTagsInPlatform(self._et, 'lib-file', platform, function(tag) {
-            return {
-                itemType: 'lib-file',
-                src: tag.attrib.src,
-                arch: tag.attrib.arch,
-                Include: tag.attrib.Include,
-                versions: tag.attrib.versions,
-                deviceTarget: tag.attrib['device-target'] || tag.attrib.target
-            };
-        });
-        return libFiles;
-    }
-
-    // <hook>
-    // Example:
-    // <hook type="before_build" src="scripts/beforeBuild.js" />
-    self.getHookScripts = getHookScripts;
-    function getHookScripts(hook, platforms) {
-        var scriptElements =  self._et.findall('./hook');
-
-        if(platforms) {
-            platforms.forEach(function (platform) {
-                scriptElements = scriptElements.concat(self._et.findall('./platform[@name="' + platform + '"]/hook'));
-            });
-        }
-
-        function filterScriptByHookType(el) {
-            return el.attrib.src && el.attrib.type && el.attrib.type.toLowerCase() === hook;
-        }
-
-        return scriptElements.filter(filterScriptByHookType);
-    }
-
-    self.getJsModules = getJsModules;
-    function getJsModules(platform) {
-        var modules = _getTags(self._et, 'js-module', platform, _parseJsModule);
-        return modules;
-    }
-
-    function _parseJsModule(tag) {
-        var ret = {
-            itemType: 'js-module',
-            name: tag.attrib.name,
-            src: tag.attrib.src,
-            clobbers: tag.findall('clobbers').map(function(tag) { return { target: tag.attrib.target }; }),
-            merges: tag.findall('merges').map(function(tag) { return { target: tag.attrib.target }; }),
-            runs: tag.findall('runs').length > 0
-        };
-
-        return ret;
-    }
-
-    self.getEngines = function() {
-        return self._et.findall('engines/engine').map(function(n) {
-            return {
-                name: n.attrib.name,
-                version: n.attrib.version,
-                platform: n.attrib.platform,
-                scriptSrc: n.attrib.scriptSrc
-            };
-        });
-    };
-
-    self.getPlatforms = function() {
-        return self._et.findall('platform').map(function(n) {
-            return { name: n.attrib.name };
-        });
-    };
-
-    self.getPlatformsArray = function() {
-        return self._et.findall('platform').map(function(n) {
-            return n.attrib.name;
-        });
-    };
-    self.getFrameworks = function(platform) {
-        return _getTags(self._et, 'framework', platform, function(el) {
-            var ret = {
-                itemType: 'framework',
-                type: el.attrib.type,
-                parent: el.attrib.parent,
-                custom: isStrTrue(el.attrib.custom),
-                src: el.attrib.src,
-                weak: isStrTrue(el.attrib.weak),
-                versions: el.attrib.versions,
-                targetDir: el.attrib['target-dir'],
-                deviceTarget: el.attrib['device-target'] || el.attrib.target,
-                arch: el.attrib.arch
-            };
-            return ret;
-        });
-    };
-
-    self.getFilesAndFrameworks = getFilesAndFrameworks;
-    function getFilesAndFrameworks(platform) {
-        // Please avoid changing the order of the calls below, files will be
-        // installed in this order.
-        var items = [].concat(
-            self.getSourceFiles(platform),
-            self.getHeaderFiles(platform),
-            self.getResourceFiles(platform),
-            self.getFrameworks(platform),
-            self.getLibFiles(platform)
-        );
-        return items;
-    }
-    ///// End of PluginInfo methods /////
-
-
-    ///// PluginInfo Constructor logic  /////
-    self.filepath = path.join(dirname, 'plugin.xml');
-    if (!fs.existsSync(self.filepath)) {
-        throw new CordovaError('Cannot find plugin.xml for plugin \'' + path.basename(dirname) + '\'. Please try adding it again.');
-    }
-
-    self.dir = dirname;
-    var et = self._et = xml_helpers.parseElementtreeSync(self.filepath);
-    var pelem = et.getroot();
-    self.id = pelem.attrib.id;
-    self.version = pelem.attrib.version;
-
-    // Optional fields
-    self.name = pelem.findtext('name');
-    self.description = pelem.findtext('description');
-    self.license = pelem.findtext('license');
-    self.repo = pelem.findtext('repo');
-    self.issue = pelem.findtext('issue');
-    self.keywords = pelem.findtext('keywords');
-    self.info = pelem.findtext('info');
-    if (self.keywords) {
-        self.keywords = self.keywords.split(',').map( function(s) { return s.trim(); } );
-    }
-    self.getKeywordsAndPlatforms = function () {
-        var ret = self.keywords || [];
-        return ret.concat('ecosystem:cordova').concat(addCordova(self.getPlatformsArray()));
-    };
-}  // End of PluginInfo constructor.
-
-// Helper function used to prefix every element of an array with cordova-
-// Useful when we want to modify platforms to be cordova-platform
-function addCordova(someArray) {
-    var newArray = someArray.map(function(element) {
-        return 'cordova-' + element;
-    });
-    return newArray;
-}
-
-// Helper function used by most of the getSomething methods of PluginInfo.
-// Get all elements of a given name. Both in root and in platform sections
-// for the given platform. If transform is given and is a function, it is
-// applied to each element.
-function _getTags(pelem, tag, platform, transform) {
-    var platformTag = pelem.find('./platform[@name="' + platform + '"]');
-    if (platform == 'windows' && !platformTag) {
-        platformTag = pelem.find('platform[@name="' + 'windows8' + '"]');
-    }
-    var tagsInRoot = pelem.findall(tag);
-    tagsInRoot = tagsInRoot || [];
-    var tagsInPlatform = platformTag ? platformTag.findall(tag) : [];
-    var tags = tagsInRoot.concat(tagsInPlatform);
-    if ( typeof transform === 'function' ) {
-        tags = tags.map(transform);
-    }
-    return tags;
-}
-
-// Same as _getTags() but only looks inside a platfrom section.
-function _getTagsInPlatform(pelem, tag, platform, transform) {
-    var platformTag = pelem.find('./platform[@name="' + platform + '"]');
-    if (platform == 'windows' && !platformTag) {
-        platformTag = pelem.find('platform[@name="' + 'windows8' + '"]');
-    }
-    var tags = platformTag ? platformTag.findall(tag) : [];
-    if ( typeof transform === 'function' ) {
-        tags = tags.map(transform);
-    }
-    return tags;
-}
-
-// Check if x is a string 'true'.
-function isStrTrue(x) {
-    return String(x).toLowerCase() == 'true';
-}
-
-module.exports = PluginInfo;
-// Backwards compat:
-PluginInfo.PluginInfo = PluginInfo;
-PluginInfo.loadPluginsDir = function(dir) {
-    var PluginInfoProvider = require('./PluginInfoProvider');
-    return new PluginInfoProvider().getAllWithinSearchPath(dir);
-};
diff --git a/bin/node_modules/cordova-common/src/PluginInfo/PluginInfoProvider.js b/bin/node_modules/cordova-common/src/PluginInfo/PluginInfoProvider.js
deleted file mode 100644
index 6240119..0000000
--- a/bin/node_modules/cordova-common/src/PluginInfo/PluginInfoProvider.js
+++ /dev/null
@@ -1,82 +0,0 @@
-/**
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements.  See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership.  The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-    KIND, either express or implied.  See the License for the
-    specific language governing permissions and limitations
-    under the License.
-*/
-
-/* jshint sub:true, laxcomma:true, laxbreak:true */
-
-var fs = require('fs');
-var path = require('path');
-var PluginInfo = require('./PluginInfo');
-var events = require('../events');
-
-function PluginInfoProvider() {
-    this._cache = {};
-    this._getAllCache = {};
-}
-
-PluginInfoProvider.prototype.get = function(dirName) {
-    var absPath = path.resolve(dirName);
-    if (!this._cache[absPath]) {
-        this._cache[absPath] = new PluginInfo(dirName);
-    }
-    return this._cache[absPath];
-};
-
-// Normally you don't need to put() entries, but it's used
-// when copying plugins, and in unit tests.
-PluginInfoProvider.prototype.put = function(pluginInfo) {
-    var absPath = path.resolve(pluginInfo.dir);
-    this._cache[absPath] = pluginInfo;
-};
-
-// Used for plugin search path processing.
-// Given a dir containing multiple plugins, create a PluginInfo object for
-// each of them and return as array.
-// Should load them all in parallel and return a promise, but not yet.
-PluginInfoProvider.prototype.getAllWithinSearchPath = function(dirName) {
-    var absPath = path.resolve(dirName);
-    if (!this._getAllCache[absPath]) {
-        this._getAllCache[absPath] = getAllHelper(absPath, this);
-    }
-    return this._getAllCache[absPath];
-};
-
-function getAllHelper(absPath, provider) {
-    if (!fs.existsSync(absPath)){
-        return [];
-    }
-    // If dir itself is a plugin, return it in an array with one element.
-    if (fs.existsSync(path.join(absPath, 'plugin.xml'))) {
-        return [provider.get(absPath)];
-    }
-    var subdirs = fs.readdirSync(absPath);
-    var plugins = [];
-    subdirs.forEach(function(subdir) {
-        var d = path.join(absPath, subdir);
-        if (fs.existsSync(path.join(d, 'plugin.xml'))) {
-            try {
-                plugins.push(provider.get(d));
-            } catch (e) {
-                events.emit('warn', 'Error parsing ' + path.join(d, 'plugin.xml.\n' + e.stack));
-            }
-        }
-    });
-    return plugins;
-}
-
-module.exports = PluginInfoProvider;
diff --git a/bin/node_modules/cordova-common/src/events.js b/bin/node_modules/cordova-common/src/events.js
deleted file mode 100644
index a6ec340..0000000
--- a/bin/node_modules/cordova-common/src/events.js
+++ /dev/null
@@ -1,19 +0,0 @@
-/**
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements.  See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership.  The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-    KIND, either express or implied.  See the License for the
-    specific language governing permissions and limitations
-    under the License.
-*/
-module.exports = new (require('events').EventEmitter)();
diff --git a/bin/node_modules/cordova-common/src/superspawn.js b/bin/node_modules/cordova-common/src/superspawn.js
deleted file mode 100644
index b4129ec..0000000
--- a/bin/node_modules/cordova-common/src/superspawn.js
+++ /dev/null
@@ -1,154 +0,0 @@
-/**
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements.  See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership.  The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-    KIND, either express or implied.  See the License for the
-    specific language governing permissions and limitations
-    under the License.
-*/
-
-var child_process = require('child_process');
-var fs = require('fs');
-var path = require('path');
-var _ = require('underscore');
-var Q = require('q');
-var shell = require('shelljs');
-var events = require('./events');
-var iswin32 = process.platform == 'win32';
-
-// On Windows, spawn() for batch files requires absolute path & having the extension.
-function resolveWindowsExe(cmd) {
-    var winExtensions = ['.exe', '.cmd', '.bat', '.js', '.vbs'];
-    function isValidExe(c) {
-        return winExtensions.indexOf(path.extname(c)) !== -1 && fs.existsSync(c);
-    }
-    if (isValidExe(cmd)) {
-        return cmd;
-    }
-    cmd = shell.which(cmd) || cmd;
-    if (!isValidExe(cmd)) {
-        winExtensions.some(function(ext) {
-            if (fs.existsSync(cmd + ext)) {
-                cmd = cmd + ext;
-                return true;
-            }
-        });
-    }
-    return cmd;
-}
-
-function maybeQuote(a) {
-    if (/^[^"].*[ &].*[^"]/.test(a)) return '"' + a + '"';
-    return a;
-}
-
-// opts:
-//   printCommand: Whether to log the command (default: false)
-//   stdio: 'default' is to capture output and returning it as a string to success (same as exec)
-//          'ignore' means don't bother capturing it
-//          'inherit' means pipe the input & output. This is required for anything that prompts.
-//   env: Map of extra environment variables.
-//   cwd: Working directory for the command.
-//   chmod: If truthy, will attempt to set the execute bit before executing on non-Windows platforms.
-// Returns a promise that succeeds only for return code = 0.
-exports.spawn = function(cmd, args, opts) {
-    args = args || [];
-    opts = opts || {};
-    var spawnOpts = {};
-    var d = Q.defer();
-
-    if (iswin32) {
-        cmd = resolveWindowsExe(cmd);
-        // If we couldn't find the file, likely we'll end up failing,
-        // but for things like "del", cmd will do the trick.
-        if (path.extname(cmd) != '.exe') {
-            var cmdArgs = '"' + [cmd].concat(args).map(maybeQuote).join(' ') + '"';
-            // We need to use /s to ensure that spaces are parsed properly with cmd spawned content
-            args = [['/s', '/c', cmdArgs].join(' ')];
-            cmd = 'cmd';
-            spawnOpts.windowsVerbatimArguments = true;
-        } else if (!fs.existsSync(cmd)) {
-            // We need to use /s to ensure that spaces are parsed properly with cmd spawned content
-            args = ['/s', '/c', cmd].concat(args).map(maybeQuote);
-        }
-    }
-
-    if (opts.stdio == 'ignore') {
-        spawnOpts.stdio = 'ignore';
-    } else if (opts.stdio == 'inherit') {
-        spawnOpts.stdio = 'inherit';
-    }
-    if (opts.cwd) {
-        spawnOpts.cwd = opts.cwd;
-    }
-    if (opts.env) {
-        spawnOpts.env = _.extend(_.extend({}, process.env), opts.env);
-    }
-    if (opts.chmod && !iswin32) {
-        try {
-            // This fails when module is installed in a system directory (e.g. via sudo npm install)
-            fs.chmodSync(cmd, '755');
-        } catch (e) {
-            // If the perms weren't set right, then this will come as an error upon execution.
-        }
-    }
-
-    events.emit(opts.printCommand ? 'log' : 'verbose', 'Running command: ' + maybeQuote(cmd) + ' ' + args.map(maybeQuote).join(' '));
-
-    var child = child_process.spawn(cmd, args, spawnOpts);
-    var capturedOut = '';
-    var capturedErr = '';
-
-    if (child.stdout) {
-        child.stdout.setEncoding('utf8');
-        child.stdout.on('data', function(data) {
-            capturedOut += data;
-        });
-
-        child.stderr.setEncoding('utf8');
-        child.stderr.on('data', function(data) {
-            capturedErr += data;
-        });
-    }
-
-    child.on('close', whenDone);
-    child.on('error', whenDone);
-    function whenDone(arg) {
-        child.removeListener('close', whenDone);
-        child.removeListener('error', whenDone);
-        var code = typeof arg == 'number' ? arg : arg && arg.code;
-
-        events.emit('verbose', 'Command finished with error code ' + code + ': ' + cmd + ' ' + args);
-        if (code === 0) {
-            d.resolve(capturedOut.trim());
-        } else {
-            var errMsg = cmd + ': Command failed with exit code ' + code;
-            if (capturedErr) {
-                errMsg += ' Error output:\n' + capturedErr.trim();
-            }
-            var err = new Error(errMsg);
-            err.code = code;
-            d.reject(err);
-        }
-    }
-
-    return d.promise;
-};
-
-exports.maybeSpawn = function(cmd, args, opts) {
-    if (fs.existsSync(cmd)) {
-        return exports.spawn(cmd, args, opts);
-    }
-    return Q(null);
-};
-
diff --git a/bin/node_modules/cordova-common/src/util/plist-helpers.js b/bin/node_modules/cordova-common/src/util/plist-helpers.js
deleted file mode 100644
index 9dee5c6..0000000
--- a/bin/node_modules/cordova-common/src/util/plist-helpers.js
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- *
- * Copyright 2013 Brett Rudd
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
-*/
-
-// contains PLIST utility functions
-var __     = require('underscore');
-var plist = require('plist');
-
-// adds node to doc at selector
-module.exports.graftPLIST = graftPLIST;
-function graftPLIST(doc, xml, selector) {
-    var obj = plist.parse('<plist>'+xml+'</plist>');
-
-    var node = doc[selector];
-    if (node && Array.isArray(node) && Array.isArray(obj)){
-        node = node.concat(obj);
-        for (var i =0;i<node.length; i++){
-            for (var j=i+1; j<node.length; ++j) {
-              if (nodeEqual(node[i], node[j]))
-                    node.splice(j--,1);
-            }
-        }
-        doc[selector] = node;
-    } else {
-        //plist uses objects for <dict>. If we have two dicts we merge them instead of
-        // overriding the old one. See CB-6472
-        if (node && __.isObject(node) && __.isObject(obj) && !__.isDate(node) && !__.isDate(obj)){//arrays checked above
-            __.extend(obj,node);
-        }
-        doc[selector] = obj;
-    }
-
-    return true;
-}
-
-// removes node from doc at selector
-module.exports.prunePLIST = prunePLIST;
-function prunePLIST(doc, xml, selector) {
-    var obj = plist.parse('<plist>'+xml+'</plist>');
-
-    pruneOBJECT(doc, selector, obj);
-
-    return true;
-}
-
-function pruneOBJECT(doc, selector, fragment) {
-    if (Array.isArray(fragment) && Array.isArray(doc[selector])) {
-        var empty = true;
-        for (var i in fragment) {
-            for (var j in doc[selector]) {
-                empty = pruneOBJECT(doc[selector], j, fragment[i]) && empty;
-            }
-        }
-        if (empty)
-        {
-            delete doc[selector];
-            return true;
-        }
-    }
-    else if (nodeEqual(doc[selector], fragment)) {
-        delete doc[selector];
-        return true;
-    }
-
-    return false;
-}
-
-function nodeEqual(node1, node2) {
-    if (typeof node1 != typeof node2)
-        return false;
-    else if (typeof node1 == 'string') {
-        node2 = escapeRE(node2).replace(new RegExp('\\$[a-zA-Z0-9-_]+','gm'),'(.*?)');
-        return new RegExp('^' + node2 + '$').test(node1);
-    }
-    else {
-        for (var key in node2) {
-            if (!nodeEqual(node1[key], node2[key])) return false;
-        }
-        return true;
-    }
-}
-
-// escape string for use in regex
-function escapeRE(str) {
-    return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, '$&');
-}
diff --git a/bin/node_modules/cordova-common/src/util/xml-helpers.js b/bin/node_modules/cordova-common/src/util/xml-helpers.js
deleted file mode 100644
index 8b02989..0000000
--- a/bin/node_modules/cordova-common/src/util/xml-helpers.js
+++ /dev/null
@@ -1,266 +0,0 @@
-/*
- *
- * Copyright 2013 Anis Kadri
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
-*/
-
-/* jshint sub:true, laxcomma:true */
-
-/**
- * contains XML utility functions, some of which are specific to elementtree
- */
-
-var fs = require('fs')
-  , path = require('path')
-  , _ = require('underscore')
-  , et = require('elementtree')
-  ;
-
-module.exports = {
-    // compare two et.XML nodes, see if they match
-    // compares tagName, text, attributes and children (recursively)
-    equalNodes: function(one, two) {
-        if (one.tag != two.tag) {
-            return false;
-        } else if (one.text.trim() != two.text.trim()) {
-            return false;
-        } else if (one._children.length != two._children.length) {
-            return false;
-        }
-
-        var oneAttribKeys = Object.keys(one.attrib),
-            twoAttribKeys = Object.keys(two.attrib),
-            i = 0, attribName;
-
-        if (oneAttribKeys.length != twoAttribKeys.length) {
-            return false;
-        }
-
-        for (i; i < oneAttribKeys.length; i++) {
-            attribName = oneAttribKeys[i];
-
-            if (one.attrib[attribName] != two.attrib[attribName]) {
-                return false;
-            }
-        }
-
-        for (i; i < one._children.length; i++) {
-            if (!module.exports.equalNodes(one._children[i], two._children[i])) {
-                return false;
-            }
-        }
-
-        return true;
-    },
-
-    // adds node to doc at selector, creating parent if it doesn't exist
-    graftXML: function(doc, nodes, selector, after) {
-        var parent = resolveParent(doc, selector);
-        if (!parent) {
-            //Try to create the parent recursively if necessary
-            try {
-                var parentToCreate = et.XML('<' + path.basename(selector) + '>'),
-                    parentSelector = path.dirname(selector);
-
-                this.graftXML(doc, [parentToCreate], parentSelector);
-            } catch (e) {
-                return false;
-            }
-            parent = resolveParent(doc, selector);
-            if (!parent) return false;
-        }
-
-        nodes.forEach(function (node) {
-            // check if child is unique first
-            if (uniqueChild(node, parent)) {
-                var children = parent.getchildren();
-                var insertIdx = after ? findInsertIdx(children, after) : children.length;
-
-                //TODO: replace with parent.insert after the bug in ElementTree is fixed
-                parent.getchildren().splice(insertIdx, 0, node);
-            }
-        });
-
-        return true;
-    },
-
-    // removes node from doc at selector
-    pruneXML: function(doc, nodes, selector) {
-        var parent = resolveParent(doc, selector);
-        if (!parent) return false;
-
-        nodes.forEach(function (node) {
-            var matchingKid = null;
-            if ((matchingKid = findChild(node, parent)) !== null) {
-                // stupid elementtree takes an index argument it doesn't use
-                // and does not conform to the python lib
-                parent.remove(matchingKid);
-            }
-        });
-
-        return true;
-    },
-
-    parseElementtreeSync: function (filename) {
-        var contents = fs.readFileSync(filename, 'utf-8');
-        if(contents) {
-            //Windows is the BOM. Skip the Byte Order Mark.
-            contents = contents.substring(contents.indexOf('<'));
-        }
-        return new et.ElementTree(et.XML(contents));
-    }
-};
-
-function findChild(node, parent) {
-    var matchingKids = parent.findall(node.tag)
-      , i, j;
-
-    for (i = 0, j = matchingKids.length ; i < j ; i++) {
-        if (module.exports.equalNodes(node, matchingKids[i])) {
-            return matchingKids[i];
-        }
-    }
-    return null;
-}
-
-function uniqueChild(node, parent) {
-    var matchingKids = parent.findall(node.tag)
-      , i = 0;
-
-    if (matchingKids.length === 0) {
-        return true;
-    } else  {
-        for (i; i < matchingKids.length; i++) {
-            if (module.exports.equalNodes(node, matchingKids[i])) {
-                return false;
-            }
-        }
-        return true;
-    }
-}
-
-var ROOT = /^\/([^\/]*)/,
-    ABSOLUTE = /^\/([^\/]*)\/(.*)/;
-
-function resolveParent(doc, selector) {
-    var parent, tagName, subSelector;
-
-    // handle absolute selector (which elementtree doesn't like)
-    if (ROOT.test(selector)) {
-        tagName = selector.match(ROOT)[1];
-        // test for wildcard "any-tag" root selector
-        if (tagName == '*' || tagName === doc._root.tag) {
-            parent = doc._root;
-
-            // could be an absolute path, but not selecting the root
-            if (ABSOLUTE.test(selector)) {
-                subSelector = selector.match(ABSOLUTE)[2];
-                parent = parent.find(subSelector);
-            }
-        } else {
-            return false;
-        }
-    } else {
-        parent = doc.find(selector);
-    }
-    return parent;
-}
-
-// Find the index at which to insert an entry. After is a ;-separated priority list
-// of tags after which the insertion should be made. E.g. If we need to
-// insert an element C, and the rule is that the order of children has to be
-// As, Bs, Cs. After will be equal to "C;B;A".
-function findInsertIdx(children, after) {
-    var childrenTags = children.map(function(child) { return child.tag; });
-    var afters = after.split(';');
-    var afterIndexes = afters.map(function(current) { return childrenTags.lastIndexOf(current); });
-    var foundIndex = _.find(afterIndexes, function(index) { return index != -1; });
-
-    //add to the beginning if no matching nodes are found
-    return typeof foundIndex === 'undefined' ? 0 : foundIndex+1;
-}
-
-var BLACKLIST = ['platform', 'feature','plugin','engine'];
-var SINGLETONS = ['content', 'author'];
-function mergeXml(src, dest, platform, clobber) {
-    // Do nothing for blacklisted tags.
-    if (BLACKLIST.indexOf(src.tag) != -1) return;
-
-    //Handle attributes
-    Object.getOwnPropertyNames(src.attrib).forEach(function (attribute) {
-        if (clobber || !dest.attrib[attribute]) {
-            dest.attrib[attribute] = src.attrib[attribute];
-        }
-    });
-    //Handle text
-    if (src.text && (clobber || !dest.text)) {
-        dest.text = src.text;
-    }
-    //Handle platform
-    if (platform) {
-        src.findall('platform[@name="' + platform + '"]').forEach(function (platformElement) {
-            platformElement.getchildren().forEach(mergeChild);
-        });
-    }
-
-    //Handle children
-    src.getchildren().forEach(mergeChild);
-
-    function mergeChild (srcChild) {
-        var srcTag = srcChild.tag,
-            destChild = new et.Element(srcTag),
-            foundChild,
-            query = srcTag + '',
-            shouldMerge = true;
-
-        if (BLACKLIST.indexOf(srcTag) === -1) {
-            if (SINGLETONS.indexOf(srcTag) !== -1) {
-                foundChild = dest.find(query);
-                if (foundChild) {
-                    destChild = foundChild;
-                    dest.remove(destChild);
-                }
-            } else {
-                //Check for an exact match and if you find one don't add
-                Object.getOwnPropertyNames(srcChild.attrib).forEach(function (attribute) {
-                    query += '[@' + attribute + '="' + srcChild.attrib[attribute] + '"]';
-                });
-                var foundChildren = dest.findall(query);
-                for(var i = 0; i < foundChildren.length; i++) {
-                    foundChild = foundChildren[i];
-                    if (foundChild && textMatch(srcChild, foundChild) && (Object.keys(srcChild.attrib).length==Object.keys(foundChild.attrib).length)) {
-                        destChild = foundChild;
-                        dest.remove(destChild);
-                        shouldMerge = false;
-                        break;
-                    }
-                }
-            }
-
-            mergeXml(srcChild, destChild, platform, clobber && shouldMerge);
-            dest.append(destChild);
-        }
-    }
-}
-
-// Expose for testing.
-module.exports.mergeXml = mergeXml;
-
-function textMatch(elm1, elm2) {
-    var text1 = elm1.text ? elm1.text.replace(/\s+/, '') : '',
-        text2 = elm2.text ? elm2.text.replace(/\s+/, '') : '';
-    return (text1 === '' || text1 === text2);
-}
diff --git a/bin/node_modules/nopt/LICENSE b/bin/node_modules/nopt/LICENSE
deleted file mode 100644
index 05a4010..0000000
--- a/bin/node_modules/nopt/LICENSE
+++ /dev/null
@@ -1,23 +0,0 @@
-Copyright 2009, 2010, 2011 Isaac Z. Schlueter.
-All rights reserved.
-
-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/bin/node_modules/nopt/lib/nopt.js b/bin/node_modules/nopt/lib/nopt.js
deleted file mode 100644
index 5309a00..0000000
--- a/bin/node_modules/nopt/lib/nopt.js
+++ /dev/null
@@ -1,414 +0,0 @@
-// info about each config option.
-
-var debug = process.env.DEBUG_NOPT || process.env.NOPT_DEBUG
-  ? function () { console.error.apply(console, arguments) }
-  : function () {}
-
-var url = require("url")
-  , path = require("path")
-  , Stream = require("stream").Stream
-  , abbrev = require("abbrev")
-
-module.exports = exports = nopt
-exports.clean = clean
-
-exports.typeDefs =
-  { String  : { type: String,  validate: validateString  }
-  , Boolean : { type: Boolean, validate: validateBoolean }
-  , url     : { type: url,     validate: validateUrl     }
-  , Number  : { type: Number,  validate: validateNumber  }
-  , path    : { type: path,    validate: validatePath    }
-  , Stream  : { type: Stream,  validate: validateStream  }
-  , Date    : { type: Date,    validate: validateDate    }
-  }
-
-function nopt (types, shorthands, args, slice) {
-  args = args || process.argv
-  types = types || {}
-  shorthands = shorthands || {}
-  if (typeof slice !== "number") slice = 2
-
-  debug(types, shorthands, args, slice)
-
-  args = args.slice(slice)
-  var data = {}
-    , key
-    , remain = []
-    , cooked = args
-    , original = args.slice(0)
-
-  parse(args, data, remain, types, shorthands)
-  // now data is full
-  clean(data, types, exports.typeDefs)
-  data.argv = {remain:remain,cooked:cooked,original:original}
-  Object.defineProperty(data.argv, 'toString', { value: function () {
-    return this.original.map(JSON.stringify).join(" ")
-  }, enumerable: false })
-  return data
-}
-
-function clean (data, types, typeDefs) {
-  typeDefs = typeDefs || exports.typeDefs
-  var remove = {}
-    , typeDefault = [false, true, null, String, Array]
-
-  Object.keys(data).forEach(function (k) {
-    if (k === "argv") return
-    var val = data[k]
-      , isArray = Array.isArray(val)
-      , type = types[k]
-    if (!isArray) val = [val]
-    if (!type) type = typeDefault
-    if (type === Array) type = typeDefault.concat(Array)
-    if (!Array.isArray(type)) type = [type]
-
-    debug("val=%j", val)
-    debug("types=", type)
-    val = val.map(function (val) {
-      // if it's an unknown value, then parse false/true/null/numbers/dates
-      if (typeof val === "string") {
-        debug("string %j", val)
-        val = val.trim()
-        if ((val === "null" && ~type.indexOf(null))
-            || (val === "true" &&
-               (~type.indexOf(true) || ~type.indexOf(Boolean)))
-            || (val === "false" &&
-               (~type.indexOf(false) || ~type.indexOf(Boolean)))) {
-          val = JSON.parse(val)
-          debug("jsonable %j", val)
-        } else if (~type.indexOf(Number) && !isNaN(val)) {
-          debug("convert to number", val)
-          val = +val
-        } else if (~type.indexOf(Date) && !isNaN(Date.parse(val))) {
-          debug("convert to date", val)
-          val = new Date(val)
-        }
-      }
-
-      if (!types.hasOwnProperty(k)) {
-        return val
-      }
-
-      // allow `--no-blah` to set 'blah' to null if null is allowed
-      if (val === false && ~type.indexOf(null) &&
-          !(~type.indexOf(false) || ~type.indexOf(Boolean))) {
-        val = null
-      }
-
-      var d = {}
-      d[k] = val
-      debug("prevalidated val", d, val, types[k])
-      if (!validate(d, k, val, types[k], typeDefs)) {
-        if (exports.invalidHandler) {
-          exports.invalidHandler(k, val, types[k], data)
-        } else if (exports.invalidHandler !== false) {
-          debug("invalid: "+k+"="+val, types[k])
-        }
-        return remove
-      }
-      debug("validated val", d, val, types[k])
-      return d[k]
-    }).filter(function (val) { return val !== remove })
-
-    if (!val.length) delete data[k]
-    else if (isArray) {
-      debug(isArray, data[k], val)
-      data[k] = val
-    } else data[k] = val[0]
-
-    debug("k=%s val=%j", k, val, data[k])
-  })
-}
-
-function validateString (data, k, val) {
-  data[k] = String(val)
-}
-
-function validatePath (data, k, val) {
-  if (val === true) return false
-  if (val === null) return true
-
-  val = String(val)
-  var homePattern = process.platform === 'win32' ? /^~(\/|\\)/ : /^~\//
-  if (val.match(homePattern) && process.env.HOME) {
-    val = path.resolve(process.env.HOME, val.substr(2))
-  }
-  data[k] = path.resolve(String(val))
-  return true
-}
-
-function validateNumber (data, k, val) {
-  debug("validate Number %j %j %j", k, val, isNaN(val))
-  if (isNaN(val)) return false
-  data[k] = +val
-}
-
-function validateDate (data, k, val) {
-  debug("validate Date %j %j %j", k, val, Date.parse(val))
-  var s = Date.parse(val)
-  if (isNaN(s)) return false
-  data[k] = new Date(val)
-}
-
-function validateBoolean (data, k, val) {
-  if (val instanceof Boolean) val = val.valueOf()
-  else if (typeof val === "string") {
-    if (!isNaN(val)) val = !!(+val)
-    else if (val === "null" || val === "false") val = false
-    else val = true
-  } else val = !!val
-  data[k] = val
-}
-
-function validateUrl (data, k, val) {
-  val = url.parse(String(val))
-  if (!val.host) return false
-  data[k] = val.href
-}
-
-function validateStream (data, k, val) {
-  if (!(val instanceof Stream)) return false
-  data[k] = val
-}
-
-function validate (data, k, val, type, typeDefs) {
-  // arrays are lists of types.
-  if (Array.isArray(type)) {
-    for (var i = 0, l = type.length; i < l; i ++) {
-      if (type[i] === Array) continue
-      if (validate(data, k, val, type[i], typeDefs)) return true
-    }
-    delete data[k]
-    return false
-  }
-
-  // an array of anything?
-  if (type === Array) return true
-
-  // NaN is poisonous.  Means that something is not allowed.
-  if (type !== type) {
-    debug("Poison NaN", k, val, type)
-    delete data[k]
-    return false
-  }
-
-  // explicit list of values
-  if (val === type) {
-    debug("Explicitly allowed %j", val)
-    // if (isArray) (data[k] = data[k] || []).push(val)
-    // else data[k] = val
-    data[k] = val
-    return true
-  }
-
-  // now go through the list of typeDefs, validate against each one.
-  var ok = false
-    , types = Object.keys(typeDefs)
-  for (var i = 0, l = types.length; i < l; i ++) {
-    debug("test type %j %j %j", k, val, types[i])
-    var t = typeDefs[types[i]]
-    if (t && type === t.type) {
-      var d = {}
-      ok = false !== t.validate(d, k, val)
-      val = d[k]
-      if (ok) {
-        // if (isArray) (data[k] = data[k] || []).push(val)
-        // else data[k] = val
-        data[k] = val
-        break
-      }
-    }
-  }
-  debug("OK? %j (%j %j %j)", ok, k, val, types[i])
-
-  if (!ok) delete data[k]
-  return ok
-}
-
-function parse (args, data, remain, types, shorthands) {
-  debug("parse", args, data, remain)
-
-  var key = null
-    , abbrevs = abbrev(Object.keys(types))
-    , shortAbbr = abbrev(Object.keys(shorthands))
-
-  for (var i = 0; i < args.length; i ++) {
-    var arg = args[i]
-    debug("arg", arg)
-
-    if (arg.match(/^-{2,}$/)) {
-      // done with keys.
-      // the rest are args.
-      remain.push.apply(remain, args.slice(i + 1))
-      args[i] = "--"
-      break
-    }
-    var hadEq = false
-    if (arg.charAt(0) === "-" && arg.length > 1) {
-      if (arg.indexOf("=") !== -1) {
-        hadEq = true
-        var v = arg.split("=")
-        arg = v.shift()
-        v = v.join("=")
-        args.splice.apply(args, [i, 1].concat([arg, v]))
-      }
-
-      // see if it's a shorthand
-      // if so, splice and back up to re-parse it.
-      var shRes = resolveShort(arg, shorthands, shortAbbr, abbrevs)
-      debug("arg=%j shRes=%j", arg, shRes)
-      if (shRes) {
-        debug(arg, shRes)
-        args.splice.apply(args, [i, 1].concat(shRes))
-        if (arg !== shRes[0]) {
-          i --
-          continue
-        }
-      }
-      arg = arg.replace(/^-+/, "")
-      var no = null
-      while (arg.toLowerCase().indexOf("no-") === 0) {
-        no = !no
-        arg = arg.substr(3)
-      }
-
-      if (abbrevs[arg]) arg = abbrevs[arg]
-
-      var isArray = types[arg] === Array ||
-        Array.isArray(types[arg]) && types[arg].indexOf(Array) !== -1
-
-      // allow unknown things to be arrays if specified multiple times.
-      if (!types.hasOwnProperty(arg) && data.hasOwnProperty(arg)) {
-        if (!Array.isArray(data[arg]))
-          data[arg] = [data[arg]]
-        isArray = true
-      }
-
-      var val
-        , la = args[i + 1]
-
-      var isBool = typeof no === 'boolean' ||
-        types[arg] === Boolean ||
-        Array.isArray(types[arg]) && types[arg].indexOf(Boolean) !== -1 ||
-        (typeof types[arg] === 'undefined' && !hadEq) ||
-        (la === "false" &&
-         (types[arg] === null ||
-          Array.isArray(types[arg]) && ~types[arg].indexOf(null)))
-
-      if (isBool) {
-        // just set and move along
-        val = !no
-        // however, also support --bool true or --bool false
-        if (la === "true" || la === "false") {
-          val = JSON.parse(la)
-          la = null
-          if (no) val = !val
-          i ++
-        }
-
-        // also support "foo":[Boolean, "bar"] and "--foo bar"
-        if (Array.isArray(types[arg]) && la) {
-          if (~types[arg].indexOf(la)) {
-            // an explicit type
-            val = la
-            i ++
-          } else if ( la === "null" && ~types[arg].indexOf(null) ) {
-            // null allowed
-            val = null
-            i ++
-          } else if ( !la.match(/^-{2,}[^-]/) &&
-                      !isNaN(la) &&
-                      ~types[arg].indexOf(Number) ) {
-            // number
-            val = +la
-            i ++
-          } else if ( !la.match(/^-[^-]/) && ~types[arg].indexOf(String) ) {
-            // string
-            val = la
-            i ++
-          }
-        }
-
-        if (isArray) (data[arg] = data[arg] || []).push(val)
-        else data[arg] = val
-
-        continue
-      }
-
-      if (types[arg] === String && la === undefined)
-        la = ""
-
-      if (la && la.match(/^-{2,}$/)) {
-        la = undefined
-        i --
-      }
-
-      val = la === undefined ? true : la
-      if (isArray) (data[arg] = data[arg] || []).push(val)
-      else data[arg] = val
-
-      i ++
-      continue
-    }
-    remain.push(arg)
-  }
-}
-
-function resolveShort (arg, shorthands, shortAbbr, abbrevs) {
-  // handle single-char shorthands glommed together, like
-  // npm ls -glp, but only if there is one dash, and only if
-  // all of the chars are single-char shorthands, and it's
-  // not a match to some other abbrev.
-  arg = arg.replace(/^-+/, '')
-
-  // if it's an exact known option, then don't go any further
-  if (abbrevs[arg] === arg)
-    return null
-
-  // if it's an exact known shortopt, same deal
-  if (shorthands[arg]) {
-    // make it an array, if it's a list of words
-    if (shorthands[arg] && !Array.isArray(shorthands[arg]))
-      shorthands[arg] = shorthands[arg].split(/\s+/)
-
-    return shorthands[arg]
-  }
-
-  // first check to see if this arg is a set of single-char shorthands
-  var singles = shorthands.___singles
-  if (!singles) {
-    singles = Object.keys(shorthands).filter(function (s) {
-      return s.length === 1
-    }).reduce(function (l,r) {
-      l[r] = true
-      return l
-    }, {})
-    shorthands.___singles = singles
-    debug('shorthand singles', singles)
-  }
-
-  var chrs = arg.split("").filter(function (c) {
-    return singles[c]
-  })
-
-  if (chrs.join("") === arg) return chrs.map(function (c) {
-    return shorthands[c]
-  }).reduce(function (l, r) {
-    return l.concat(r)
-  }, [])
-
-
-  // if it's an arg abbrev, and not a literal shorthand, then prefer the arg
-  if (abbrevs[arg] && !shorthands[arg])
-    return null
-
-  // if it's an abbr for a shorthand, then use that
-  if (shortAbbr[arg])
-    arg = shortAbbr[arg]
-
-  // make it an array, if it's a list of words
-  if (shorthands[arg] && !Array.isArray(shorthands[arg]))
-    shorthands[arg] = shorthands[arg].split(/\s+/)
-
-  return shorthands[arg]
-}
diff --git a/bin/node_modules/nopt/node_modules/abbrev/LICENSE b/bin/node_modules/nopt/node_modules/abbrev/LICENSE
deleted file mode 100644
index 05a4010..0000000
--- a/bin/node_modules/nopt/node_modules/abbrev/LICENSE
+++ /dev/null
@@ -1,23 +0,0 @@
-Copyright 2009, 2010, 2011 Isaac Z. Schlueter.
-All rights reserved.
-
-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/bin/node_modules/nopt/node_modules/abbrev/abbrev.js b/bin/node_modules/nopt/node_modules/abbrev/abbrev.js
deleted file mode 100644
index 69cfeac..0000000
--- a/bin/node_modules/nopt/node_modules/abbrev/abbrev.js
+++ /dev/null
@@ -1,62 +0,0 @@
-
-module.exports = exports = abbrev.abbrev = abbrev
-
-abbrev.monkeyPatch = monkeyPatch
-
-function monkeyPatch () {
-  Object.defineProperty(Array.prototype, 'abbrev', {
-    value: function () { return abbrev(this) },
-    enumerable: false, configurable: true, writable: true
-  })
-
-  Object.defineProperty(Object.prototype, 'abbrev', {
-    value: function () { return abbrev(Object.keys(this)) },
-    enumerable: false, configurable: true, writable: true
-  })
-}
-
-function abbrev (list) {
-  if (arguments.length !== 1 || !Array.isArray(list)) {
-    list = Array.prototype.slice.call(arguments, 0)
-  }
-  for (var i = 0, l = list.length, args = [] ; i < l ; i ++) {
-    args[i] = typeof list[i] === "string" ? list[i] : String(list[i])
-  }
-
-  // sort them lexicographically, so that they're next to their nearest kin
-  args = args.sort(lexSort)
-
-  // walk through each, seeing how much it has in common with the next and previous
-  var abbrevs = {}
-    , prev = ""
-  for (var i = 0, l = args.length ; i < l ; i ++) {
-    var current = args[i]
-      , next = args[i + 1] || ""
-      , nextMatches = true
-      , prevMatches = true
-    if (current === next) continue
-    for (var j = 0, cl = current.length ; j < cl ; j ++) {
-      var curChar = current.charAt(j)
-      nextMatches = nextMatches && curChar === next.charAt(j)
-      prevMatches = prevMatches && curChar === prev.charAt(j)
-      if (!nextMatches && !prevMatches) {
-        j ++
-        break
-      }
-    }
-    prev = current
-    if (j === cl) {
-      abbrevs[current] = current
-      continue
-    }
-    for (var a = current.substr(0, j) ; j <= cl ; j ++) {
-      abbrevs[a] = current
-      a += current.charAt(j)
-    }
-  }
-  return abbrevs
-}
-
-function lexSort (a, b) {
-  return a === b ? 0 : a > b ? 1 : -1
-}
diff --git a/bin/node_modules/nopt/node_modules/abbrev/package.json b/bin/node_modules/nopt/node_modules/abbrev/package.json
deleted file mode 100644
index 91f1dd9..0000000
--- a/bin/node_modules/nopt/node_modules/abbrev/package.json
+++ /dev/null
@@ -1,31 +0,0 @@
-{
-  "name": "abbrev",
-  "version": "1.0.5",
-  "description": "Like ruby's abbrev module, but in js",
-  "author": {
-    "name": "Isaac Z. Schlueter",
-    "email": "i@izs.me"
-  },
-  "main": "abbrev.js",
-  "scripts": {
-    "test": "node test.js"
-  },
-  "repository": {
-    "type": "git",
-    "url": "http://github.com/isaacs/abbrev-js"
-  },
-  "license": {
-    "type": "MIT",
-    "url": "https://github.com/isaacs/abbrev-js/raw/master/LICENSE"
-  },
-  "readme": "# abbrev-js\n\nJust like [ruby's Abbrev](http://apidock.com/ruby/Abbrev).\n\nUsage:\n\n    var abbrev = require(\"abbrev\");\n    abbrev(\"foo\", \"fool\", \"folding\", \"flop\");\n    \n    // returns:\n    { fl: 'flop'\n    , flo: 'flop'\n    , flop: 'flop'\n    , fol: 'folding'\n    , fold: 'folding'\n    , foldi: 'folding'\n    , foldin: 'folding'\n    , folding: 'folding'\n    , foo: 'foo'\n    , fool: 'fool'\n    }\n\nThis is handy for command-line scripts, or other cases where you want to be able to accept shorthands.\n",
-  "readmeFilename": "README.md",
-  "bugs": {
-    "url": "https://github.com/isaacs/abbrev-js/issues"
-  },
-  "homepage": "https://github.com/isaacs/abbrev-js",
-  "_id": "abbrev@1.0.5",
-  "_shasum": "5d8257bd9ebe435e698b2fa431afde4fe7b10b03",
-  "_from": "abbrev@1",
-  "_resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.5.tgz"
-}
diff --git a/bin/node_modules/nopt/package.json b/bin/node_modules/nopt/package.json
deleted file mode 100644
index 62d0fe8..0000000
--- a/bin/node_modules/nopt/package.json
+++ /dev/null
@@ -1,41 +0,0 @@
-{
-  "name": "nopt",
-  "version": "3.0.1",
-  "description": "Option parsing for Node, supporting types, shorthands, etc. Used by npm.",
-  "author": {
-    "name": "Isaac Z. Schlueter",
-    "email": "i@izs.me",
-    "url": "http://blog.izs.me/"
-  },
-  "main": "lib/nopt.js",
-  "scripts": {
-    "test": "tap test/*.js"
-  },
-  "repository": {
-    "type": "git",
-    "url": "http://github.com/isaacs/nopt"
-  },
-  "bin": {
-    "nopt": "./bin/nopt.js"
-  },
-  "license": {
-    "type": "MIT",
-    "url": "https://github.com/isaacs/nopt/raw/master/LICENSE"
-  },
-  "dependencies": {
-    "abbrev": "1"
-  },
-  "devDependencies": {
-    "tap": "~0.4.8"
-  },
-  "readme": "If you want to write an option parser, and have it be good, there are\ntwo ways to do it.  The Right Way, and the Wrong Way.\n\nThe Wrong Way is to sit down and write an option parser.  We've all done\nthat.\n\nThe Right Way is to write some complex configurable program with so many\noptions that you go half-insane just trying to manage them all, and put\nit off with duct-tape solutions until you see exactly to the core of the\nproblem, and finally snap and write an awesome option parser.\n\nIf you want to write an option parser, don't write an option parser.\nWrite a package manager, or a source control system, or a service\nrestarter, or an operating system.  You probably won't end up with a\ngood one of those, but if you don't give up, and you are relentless and\ndiligent enough in your procrastination, you may just end up with a very\nnice option parser.\n\n## USAGE\n\n    // my-program.js\n    var nopt = require(\"nopt\")\n      , Stream = require(\"stream\").Stream\n      , path = require(\"path\")\n      , knownOpts = { \"foo\" : [String, null]\n                    , \"bar\" : [Stream, Number]\n                    , \"baz\" : path\n                    , \"bloo\" : [ \"big\", \"medium\", \"small\" ]\n                    , \"flag\" : Boolean\n                    , \"pick\" : Boolean\n                    , \"many\" : [String, Array]\n                    }\n      , shortHands = { \"foofoo\" : [\"--foo\", \"Mr. Foo\"]\n                     , \"b7\" : [\"--bar\", \"7\"]\n                     , \"m\" : [\"--bloo\", \"medium\"]\n                     , \"p\" : [\"--pick\"]\n                     , \"f\" : [\"--flag\"]\n                     }\n                 // everything is optional.\n                 // knownOpts and shorthands default to {}\n                 // arg list defaults to process.argv\n                 // slice defaults to 2\n      , parsed = nopt(knownOpts, shortHands, process.argv, 2)\n    console.log(parsed)\n\nThis would give you support for any of the following:\n\n```bash\n$ node my-program.js --foo \"blerp\" --no-flag\n{ \"foo\" : \"blerp\", \"flag\" : false }\n\n$ node my-program.js ---bar 7 --foo \"Mr. Hand\" --flag\n{ bar: 7, foo: \"Mr. Hand\", flag: true }\n\n$ node my-program.js --foo \"blerp\" -f -----p\n{ foo: \"blerp\", flag: true, pick: true }\n\n$ node my-program.js -fp --foofoo\n{ foo: \"Mr. Foo\", flag: true, pick: true }\n\n$ node my-program.js --foofoo -- -fp  # -- stops the flag parsing.\n{ foo: \"Mr. Foo\", argv: { remain: [\"-fp\"] } }\n\n$ node my-program.js --blatzk -fp # unknown opts are ok.\n{ blatzk: true, flag: true, pick: true }\n\n$ node my-program.js --blatzk=1000 -fp # but you need to use = if they have a value\n{ blatzk: 1000, flag: true, pick: true }\n\n$ node my-program.js --no-blatzk -fp # unless they start with \"no-\"\n{ blatzk: false, flag: true, pick: true }\n\n$ node my-program.js --baz b/a/z # known paths are resolved.\n{ baz: \"/Users/isaacs/b/a/z\" }\n\n# if Array is one of the types, then it can take many\n# values, and will always be an array.  The other types provided\n# specify what types are allowed in the list.\n\n$ node my-program.js --many 1 --many null --many foo\n{ many: [\"1\", \"null\", \"foo\"] }\n\n$ node my-program.js --many foo\n{ many: [\"foo\"] }\n```\n\nRead the tests at the bottom of `lib/nopt.js` for more examples of\nwhat this puppy can do.\n\n## Types\n\nThe following types are supported, and defined on `nopt.typeDefs`\n\n* String: A normal string.  No parsing is done.\n* path: A file system path.  Gets resolved against cwd if not absolute.\n* url: A url.  If it doesn't parse, it isn't accepted.\n* Number: Must be numeric.\n* Date: Must parse as a date. If it does, and `Date` is one of the options,\n  then it will return a Date object, not a string.\n* Boolean: Must be either `true` or `false`.  If an option is a boolean,\n  then it does not need a value, and its presence will imply `true` as\n  the value.  To negate boolean flags, do `--no-whatever` or `--whatever\n  false`\n* NaN: Means that the option is strictly not allowed.  Any value will\n  fail.\n* Stream: An object matching the \"Stream\" class in node.  Valuable\n  for use when validating programmatically.  (npm uses this to let you\n  supply any WriteStream on the `outfd` and `logfd` config options.)\n* Array: If `Array` is specified as one of the types, then the value\n  will be parsed as a list of options.  This means that multiple values\n  can be specified, and that the value will always be an array.\n\nIf a type is an array of values not on this list, then those are\nconsidered valid values.  For instance, in the example above, the\n`--bloo` option can only be one of `\"big\"`, `\"medium\"`, or `\"small\"`,\nand any other value will be rejected.\n\nWhen parsing unknown fields, `\"true\"`, `\"false\"`, and `\"null\"` will be\ninterpreted as their JavaScript equivalents.\n\nYou can also mix types and values, or multiple types, in a list.  For\ninstance `{ blah: [Number, null] }` would allow a value to be set to\neither a Number or null.  When types are ordered, this implies a\npreference, and the first type that can be used to properly interpret\nthe value will be used.\n\nTo define a new type, add it to `nopt.typeDefs`.  Each item in that\nhash is an object with a `type` member and a `validate` method.  The\n`type` member is an object that matches what goes in the type list.  The\n`validate` method is a function that gets called with `validate(data,\nkey, val)`.  Validate methods should assign `data[key]` to the valid\nvalue of `val` if it can be handled properly, or return boolean\n`false` if it cannot.\n\nYou can also call `nopt.clean(data, types, typeDefs)` to clean up a\nconfig object and remove its invalid properties.\n\n## Error Handling\n\nBy default, nopt outputs a warning to standard error when invalid\noptions are found.  You can change this behavior by assigning a method\nto `nopt.invalidHandler`.  This method will be called with\nthe offending `nopt.invalidHandler(key, val, types)`.\n\nIf no `nopt.invalidHandler` is assigned, then it will console.error\nits whining.  If it is assigned to boolean `false` then the warning is\nsuppressed.\n\n## Abbreviations\n\nYes, they are supported.  If you define options like this:\n\n```javascript\n{ \"foolhardyelephants\" : Boolean\n, \"pileofmonkeys\" : Boolean }\n```\n\nThen this will work:\n\n```bash\nnode program.js --foolhar --pil\nnode program.js --no-f --pileofmon\n# etc.\n```\n\n## Shorthands\n\nShorthands are a hash of shorter option names to a snippet of args that\nthey expand to.\n\nIf multiple one-character shorthands are all combined, and the\ncombination does not unambiguously match any other option or shorthand,\nthen they will be broken up into their constituent parts.  For example:\n\n```json\n{ \"s\" : [\"--loglevel\", \"silent\"]\n, \"g\" : \"--global\"\n, \"f\" : \"--force\"\n, \"p\" : \"--parseable\"\n, \"l\" : \"--long\"\n}\n```\n\n```bash\nnpm ls -sgflp\n# just like doing this:\nnpm ls --loglevel silent --global --force --long --parseable\n```\n\n## The Rest of the args\n\nThe config object returned by nopt is given a special member called\n`argv`, which is an object with the following fields:\n\n* `remain`: The remaining args after all the parsing has occurred.\n* `original`: The args as they originally appeared.\n* `cooked`: The args after flags and shorthands are expanded.\n\n## Slicing\n\nNode programs are called with more or less the exact argv as it appears\nin C land, after the v8 and node-specific options have been plucked off.\nAs such, `argv[0]` is always `node` and `argv[1]` is always the\nJavaScript program being run.\n\nThat's usually not very useful to you.  So they're sliced off by\ndefault.  If you want them, then you can pass in `0` as the last\nargument, or any other number that you'd like to slice off the start of\nthe list.\n",
-  "readmeFilename": "README.md",
-  "bugs": {
-    "url": "https://github.com/isaacs/nopt/issues"
-  },
-  "homepage": "https://github.com/isaacs/nopt",
-  "_id": "nopt@3.0.1",
-  "_shasum": "bce5c42446a3291f47622a370abbf158fbbacbfd",
-  "_from": "nopt@",
-  "_resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.1.tgz"
-}
diff --git a/bin/node_modules/plist/.jshintrc b/bin/node_modules/plist/.jshintrc
deleted file mode 100644
index 3f42622..0000000
--- a/bin/node_modules/plist/.jshintrc
+++ /dev/null
@@ -1,4 +0,0 @@
-{
-  "laxbreak": true,
-  "laxcomma": true
-}
diff --git a/bin/node_modules/plist/.travis.yml b/bin/node_modules/plist/.travis.yml
deleted file mode 100644
index 4ed5002..0000000
--- a/bin/node_modules/plist/.travis.yml
+++ /dev/null
@@ -1,32 +0,0 @@
-language: node_js
-node_js:
-- '0.10'
-- '0.11'
-env:
-  global:
-  - secure: xlLmWO7akYQjmDgrv6/b/ZMGILF8FReD+k6A/u8pYRD2JW29hhwvRwIQGcKp9+zmJdn4i5M4D1/qJkCeI3pdhAYBDHvzHOHSEwLJz1ESB2Crv6fa69CtpIufQkWvIxmZoU49tCaLpMBaIroGihJ4DAXdIVOIz6Ur9vXLDhGsE4c=
-  - secure: aQ46RdxL10xR5ZJJTMUKdH5k4tdrzgZ87nlwHC+pTr6bfRw3UKYC+6Rm7yQpg9wq0Io9O9dYCP007gQGSWstbjr1+jXNu/ubtNG+q5cpWBQZZZ013VHh9QJTf1MnetsZxbv8Yhrjg590s6vruT0oqesOnB2CizO/BsKxnY37Nos=
-matrix:
-  include:
-  - node_js: '0.10'
-    env: BROWSER_NAME=chrome BROWSER_VERSION=latest
-  - node_js: '0.10'
-    env: BROWSER_NAME=chrome BROWSER_VERSION=29
-  - node_js: '0.10'
-    env: BROWSER_NAME=firefox BROWSER_VERSION=latest
-  - node_js: '0.10'
-    env: BROWSER_NAME=opera BROWSER_VERSION=latest
-  - node_js: '0.10'
-    env: BROWSER_NAME=safari BROWSER_VERSION=latest
-  - node_js: '0.10'
-    env: BROWSER_NAME=safari BROWSER_VERSION=7
-  - node_js: '0.10'
-    env: BROWSER_NAME=safari BROWSER_VERSION=6
-  - node_js: '0.10'
-    env: BROWSER_NAME=safari BROWSER_VERSION=5
-  - node_js: '0.10'
-    env: BROWSER_NAME=ie BROWSER_VERSION=11
-  - node_js: '0.10'
-    env: BROWSER_NAME=ie BROWSER_VERSION=10
-  - node_js: '0.10'
-    env: BROWSER_NAME=ie BROWSER_VERSION=9
diff --git a/bin/node_modules/plist/History.md b/bin/node_modules/plist/History.md
deleted file mode 100644
index dbcf0d6..0000000
--- a/bin/node_modules/plist/History.md
+++ /dev/null
@@ -1,112 +0,0 @@
-
-1.1.0 / 2014-08-27
-==================
-
- * package: update "browserify" to v5.10.1
- * package: update "zuul" to v1.10.2
- * README: add "Sauce Test Status" build badge
- * travis: use new "plistjs" sauce credentials
- * travis: set up zuul saucelabs automated testing
-
-1.0.1 / 2014-06-25
-==================
-
-  * add .zuul.yml file for browser testing
-  * remove Testling stuff
-  * build: fix global variable `val` leak
-  * package: use --check-leaks when running mocha tests
-  * README: update examples to use preferred API
-  * package: add "browser" keyword
-
-1.0.0 / 2014-05-20
-==================
-
-  * package: remove "android-browser"
-  * test: add <dict> build() test
-  * test: re-add the empty string build() test
-  * test: remove "fixtures" and legacy "tests" dir
-  * test: add some more build() tests
-  * test: add a parse() CDATA test
-  * test: starting on build() tests
-  * test: more parse() tests
-  * package: attempt to fix "android-browser" testling
-  * parse: better <data> with newline handling
-  * README: add Testling badge
-  * test: add <data> node tests
-  * test: add a <date> parse() test
-  * travis: don't test node v0.6 or v0.8
-  * test: some more parse() tests
-  * test: add simple <string> parsing test
-  * build: add support for an optional "opts" object
-  * package: test mobile devices
-  * test: use multiline to inline the XML
-  * package: beautify
-  * package: fix "mocha" harness
-  * package: more testling browsers
-  * build: add the "version=1.0" attribute
-  * beginnings of "mocha" tests
-  * build: more JSDocs
-  * tests: add test that ensures that empty string conversion works
-  * build: update "xmlbuilder" to v2.2.1
-  * parse: ignore comment and cdata nodes
-  * tests: make the "Newlines" test actually contain a newline
-  * parse: lint
-  * test travis
-  * README: add Travis CI badge
-  * add .travis.yml file
-  * build: updated DTD to reflect name change
-  * parse: return falsey values in an Array plist
-  * build: fix encoding a typed array in the browser
-  * build: add support for Typed Arrays and ArrayBuffers
-  * build: more lint
-  * build: slight cleanup and optimizations
-  * build: use .txt() for the "date" value
-  * parse: always return a Buffer for <data> nodes
-  * build: don't interpret Strings as base64
-  * dist: commit prebuilt plist*.js files
-  * parse: fix typo in deprecate message
-  * parse: fix parse() return value
-  * parse: add jsdoc comments for the deprecated APIs
-  * parse: add `parse()` function
-  * node, parse: use `util-deprecate` module
-  * re-implemented parseFile to be asynchronous
-  * node: fix jsdoc comment
-  * Makefile: fix "node" require stubbing
-  * examples: add "browser" example
-  * package: tweak "main"
-  * package: remove "engines" field
-  * Makefile: fix --exclude command for browserify
-  * package: update "description"
-  * lib: more styling
-  * Makefile: add -build.js and -parse.js dist files
-  * lib: separate out the parse and build logic into their own files
-  * Makefile: add makefile with browserify build rules
-  * package: add "browserify" as a dev dependency
-  * plist: tabs to spaces (again)
-  * add a .jshintrc file
-  * LICENSE: update
-  * node-webkit support
-  * Ignore tests/ in .npmignore file
-  * Remove duplicate devDependencies key
-  * Remove trailing whitespace
-  * adding recent contributors. Bumping npm package number (patch release)
-  * Fixed node.js string handling
-  * bumping version number
-  * Fixed global variable plist leak
-  * patch release 0.4.1
-  * removed temporary debug output file
-  * flipping the cases for writing data and string elements in build(). removed the 125 length check. Added validation of base64 encoding for data fields when parsing. added unit tests.
-  * fixed syntax errors in README examples (issue #20)
-  * added Sync versions of calls. added deprecation warnings for old method calls. updated documentation. If the resulting object from parseStringSync is an array with 1 element, return just the element. If a plist string or file doesnt have a <plist> tag as the document root element, fail noisily (issue #15)
-  * incrementing package version
-  * added cross platform base64 encode/decode for data elements (issue #17.) Comments and hygiene.
-  * refactored the code to use a DOM parser instead of SAX. closes issues #5 and #16
-  * rolling up package version
-  * updated base64 detection regexp. updated README. hygiene.
-  * refactored the build function. Fixes issue #14
-  * refactored tests. Modified tests from issue #9. thanks @sylvinus
-  * upgrade xmlbuilder package version. this is why .end() was needed in last commit; breaking change to xmlbuilder lib. :/
-  * bug fix in build function, forgot to call .end() Refactored tests to use nodeunit
-  * Implemented support for real, identity tests
-  * Refactored base64 detection - still sloppy, fixed date building. Passing tests OK.
-  * Implemented basic plist builder that turns an existing JS object into plist XML. date, real and data types still need to be implemented.
diff --git a/bin/node_modules/plist/LICENSE b/bin/node_modules/plist/LICENSE
deleted file mode 100644
index 04a9e91..0000000
--- a/bin/node_modules/plist/LICENSE
+++ /dev/null
@@ -1,24 +0,0 @@
-(The MIT License)
-
-Copyright (c) 2010-2014 Nathan Rajlich <nathan@tootallnate.net>
-
-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/bin/node_modules/plist/Makefile b/bin/node_modules/plist/Makefile
deleted file mode 100644
index 62695e0..0000000
--- a/bin/node_modules/plist/Makefile
+++ /dev/null
@@ -1,76 +0,0 @@
-
-# get Makefile directory name: http://stackoverflow.com/a/5982798/376773
-THIS_MAKEFILE_PATH:=$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))
-THIS_DIR:=$(shell cd $(dir $(THIS_MAKEFILE_PATH));pwd)
-
-# BIN directory
-BIN := $(THIS_DIR)/node_modules/.bin
-
-# applications
-NODE ?= node
-NPM ?= $(NODE) $(shell which npm)
-BROWSERIFY ?= $(NODE) $(BIN)/browserify
-MOCHA ?= $(NODE) $(BIN)/mocha
-ZUUL ?= $(NODE) $(BIN)/zuul
-
-REPORTER ?= spec
-
-all: dist/plist.js dist/plist-build.js dist/plist-parse.js
-
-install: node_modules
-
-clean:
-	@rm -rf node_modules dist
-
-dist:
-	@mkdir -p $@
-
-dist/plist-build.js: node_modules lib/build.js dist
-	@$(BROWSERIFY) \
-		--standalone plist \
-		lib/build.js > $@
-
-dist/plist-parse.js: node_modules lib/parse.js dist
-	@$(BROWSERIFY) \
-		--standalone plist \
-		lib/parse.js > $@
-
-dist/plist.js: node_modules lib/*.js dist
-	@$(BROWSERIFY) \
-		--standalone plist \
-		--ignore lib/node.js \
-		lib/plist.js > $@
-
-node_modules: package.json
-	@NODE_ENV= $(NPM) install
-	@touch node_modules
-
-test:
-	@if [ "x$(BROWSER_NAME)" = "x" ]; then \
-		$(MAKE) test-node; \
-		else \
-		$(MAKE) test-zuul; \
-	fi
-
-test-node:
-	@$(MOCHA) \
-		--reporter $(REPORTER) \
-		test/*.js
-
-test-zuul:
-	@if [ "x$(BROWSER_PLATFORM)" = "x" ]; then \
-		$(ZUUL) \
-		--ui mocha-bdd \
-		--browser-name $(BROWSER_NAME) \
-		--browser-version $(BROWSER_VERSION) \
-		test/*.js; \
-		else \
-		$(ZUUL) \
-		--ui mocha-bdd \
-		--browser-name $(BROWSER_NAME) \
-		--browser-version $(BROWSER_VERSION) \
-		--browser-platform "$(BROWSER_PLATFORM)" \
-		test/*.js; \
-	fi
-
-.PHONY: all install clean test test-node test-zuul
diff --git a/bin/node_modules/plist/README.md b/bin/node_modules/plist/README.md
deleted file mode 100644
index 4d0310a..0000000
--- a/bin/node_modules/plist/README.md
+++ /dev/null
@@ -1,113 +0,0 @@
-plist.js
-========
-### Mac OS X Plist parser/builder for Node.js and browsers
-
-[![Sauce Test Status](https://saucelabs.com/browser-matrix/plistjs.svg)](https://saucelabs.com/u/plistjs)
-
-[![Build Status](https://travis-ci.org/TooTallNate/plist.js.svg?branch=master)](https://travis-ci.org/TooTallNate/plist.js)
-
-Provides facilities for reading and writing Mac OS X Plist (property list)
-files. These are often used in programming OS X and iOS applications, as
-well as the iTunes configuration XML file.
-
-Plist files represent stored programming "object"s. They are very similar
-to JSON. A valid Plist file is representable as a native JavaScript Object
-and vice-versa.
-
-
-## Usage
-
-### Node.js
-
-Install using `npm`:
-
-``` bash
-$ npm install --save plist
-```
-
-Then `require()` the _plist_ module in your file:
-
-``` js
-var plist = require('plist');
-
-// now use the `parse()` and `build()` functions
-var val = plist.parse('<plist><string>Hello World!</string></plist>');
-console.log(val);  // "Hello World!"
-```
-
-
-### Browser
-
-Include the `dist/plist.js` in a `<script>` tag in your HTML file:
-
-``` html
-<script src="plist.js"></script>
-<script>
-  // now use the `parse()` and `build()` functions
-  var val = plist.parse('<plist><string>Hello World!</string></plist>');
-  console.log(val);  // "Hello World!"
-</script>
-```
-
-
-## API
-
-### Parsing
-
-Parsing a plist from filename:
-
-``` javascript
-var fs = require('fs');
-var plist = require('plist');
-
-var obj = plist.parse(fs.readFileSync('myPlist.plist', 'utf8'));
-console.log(JSON.stringify(obj));
-```
-
-Parsing a plist from string payload:
-
-``` javascript
-var plist = require('plist');
-
-var obj = plist.parse('<plist><string>Hello World!</string></plist>');
-console.log(obj);  // Hello World!
-```
-
-### Building
-
-Given an existing JavaScript Object, you can turn it into an XML document
-that complies with the plist DTD:
-
-``` javascript
-var plist = require('plist');
-
-console.log(plist.build({ foo: 'bar' }));
-```
-
-
-## License
-
-(The MIT License)
-
-Copyright (c) 2010-2014 Nathan Rajlich <nathan@tootallnate.net>
-
-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/bin/node_modules/plist/dist/plist-build.js b/bin/node_modules/plist/dist/plist-build.js
deleted file mode 100644
index 078738e..0000000
--- a/bin/node_modules/plist/dist/plist-build.js
+++ /dev/null
@@ -1,12596 +0,0 @@
-!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.plist=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
-(function (Buffer){
-
-/**
- * Module dependencies.
- */
-
-var base64 = require('base64-js');
-var xmlbuilder = require('xmlbuilder');
-
-/**
- * Module exports.
- */
-
-exports.build = build;
-
-/**
- * Accepts a `Date` instance and returns an ISO date string.
- *
- * @param {Date} d - Date instance to serialize
- * @returns {String} ISO date string representation of `d`
- * @api private
- */
-
-function ISODateString(d){
-  function pad(n){
-    return n < 10 ? '0' + n : n;
-  }
-  return d.getUTCFullYear()+'-'
-    + pad(d.getUTCMonth()+1)+'-'
-    + pad(d.getUTCDate())+'T'
-    + pad(d.getUTCHours())+':'
-    + pad(d.getUTCMinutes())+':'
-    + pad(d.getUTCSeconds())+'Z';
-}
-
-/**
- * Returns the internal "type" of `obj` via the
- * `Object.prototype.toString()` trick.
- *
- * @param {Mixed} obj - any value
- * @returns {String} the internal "type" name
- * @api private
- */
-
-var toString = Object.prototype.toString;
-function type (obj) {
-  var m = toString.call(obj).match(/\[object (.*)\]/);
-  return m ? m[1] : m;
-}
-
-/**
- * Generate an XML plist string from the input object `obj`.
- *
- * @param {Object} obj - the object to convert
- * @param {Object} [opts] - optional options object
- * @returns {String} converted plist XML string
- * @api public
- */
-
-function build (obj, opts) {
-  var XMLHDR = {
-    version: '1.0',
-    encoding: 'UTF-8'
-  };
-
-  var XMLDTD = {
-    pubid: '-//Apple//DTD PLIST 1.0//EN',
-    sysid: 'http://www.apple.com/DTDs/PropertyList-1.0.dtd'
-  };
-
-  var doc = xmlbuilder.create('plist');
-
-  doc.dec(XMLHDR.version, XMLHDR.encoding, XMLHDR.standalone);
-  doc.dtd(XMLDTD.pubid, XMLDTD.sysid);
-  doc.att('version', '1.0');
-
-  walk_obj(obj, doc);
-
-  if (!opts) opts = {};
-  // default `pretty` to `true`
-  opts.pretty = opts.pretty !== false;
-  return doc.end(opts);
-}
-
-/**
- * depth first, recursive traversal of a javascript object. when complete,
- * next_child contains a reference to the build XML object.
- *
- * @api private
- */
-
-function walk_obj(next, next_child) {
-  var tag_type, i, prop;
-  var name = type(next);
-
-  if (Array.isArray(next)) {
-    next_child = next_child.ele('array');
-    for (i = 0; i < next.length; i++) {
-      walk_obj(next[i], next_child);
-    }
-
-  } else if (Buffer.isBuffer(next)) {
-    next_child.ele('data').raw(next.toString('base64'));
-
-  } else if ('Object' == name) {
-    next_child = next_child.ele('dict');
-    for (prop in next) {
-      if (next.hasOwnProperty(prop)) {
-        next_child.ele('key').txt(prop);
-        walk_obj(next[prop], next_child);
-      }
-    }
-
-  } else if ('Number' == name) {
-    // detect if this is an integer or real
-    // TODO: add an ability to force one way or another via a "cast"
-    tag_type = (next % 1 === 0) ? 'integer' : 'real';
-    next_child.ele(tag_type).txt(next.toString());
-
-  } else if ('Date' == name) {
-    next_child.ele('date').txt(ISODateString(new Date(next)));
-
-  } else if ('Boolean' == name) {
-    next_child.ele(next ? 'true' : 'false');
-
-  } else if ('String' == name) {
-    next_child.ele('string').txt(next);
-
-  } else if ('ArrayBuffer' == name) {
-    next_child.ele('data').raw(base64.fromByteArray(next));
-
-  } else if (next.buffer && 'ArrayBuffer' == type(next.buffer)) {
-    // a typed array
-    next_child.ele('data').raw(base64.fromByteArray(new Uint8Array(next.buffer), next_child));
-
-  }
-}
-
-}).call(this,require("buffer").Buffer)
-},{"base64-js":2,"buffer":3,"xmlbuilder":21}],2:[function(require,module,exports){
-var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
-
-;(function (exports) {
-	'use strict';
-
-  var Arr = (typeof Uint8Array !== 'undefined')
-    ? Uint8Array
-    : Array
-
-	var ZERO   = '0'.charCodeAt(0)
-	var PLUS   = '+'.charCodeAt(0)
-	var SLASH  = '/'.charCodeAt(0)
-	var NUMBER = '0'.charCodeAt(0)
-	var LOWER  = 'a'.charCodeAt(0)
-	var UPPER  = 'A'.charCodeAt(0)
-
-	function decode (elt) {
-		var code = elt.charCodeAt(0)
-		if (code === PLUS)
-			return 62 // '+'
-		if (code === SLASH)
-			return 63 // '/'
-		if (code < NUMBER)
-			return -1 //no match
-		if (code < NUMBER + 10)
-			return code - NUMBER + 26 + 26
-		if (code < UPPER + 26)
-			return code - UPPER
-		if (code < LOWER + 26)
-			return code - LOWER + 26
-	}
-
-	function b64ToByteArray (b64) {
-		var i, j, l, tmp, placeHolders, arr
-
-		if (b64.length % 4 > 0) {
-			throw new Error('Invalid string. Length must be a multiple of 4')
-		}
-
-		// the number of equal signs (place holders)
-		// if there are two placeholders, than the two characters before it
-		// represent one byte
-		// if there is only one, then the three characters before it represent 2 bytes
-		// this is just a cheap hack to not do indexOf twice
-		var len = b64.length
-		placeHolders = '=' === b64.charAt(len - 2) ? 2 : '=' === b64.charAt(len - 1) ? 1 : 0
-
-		// base64 is 4/3 + up to two characters of the original data
-		arr = new Arr(b64.length * 3 / 4 - placeHolders)
-
-		// if there are placeholders, only get up to the last complete 4 chars
-		l = placeHolders > 0 ? b64.length - 4 : b64.length
-
-		var L = 0
-
-		function push (v) {
-			arr[L++] = v
-		}
-
-		for (i = 0, j = 0; i < l; i += 4, j += 3) {
-			tmp = (decode(b64.charAt(i)) << 18) | (decode(b64.charAt(i + 1)) << 12) | (decode(b64.charAt(i + 2)) << 6) | decode(b64.charAt(i + 3))
-			push((tmp & 0xFF0000) >> 16)
-			push((tmp & 0xFF00) >> 8)
-			push(tmp & 0xFF)
-		}
-
-		if (placeHolders === 2) {
-			tmp = (decode(b64.charAt(i)) << 2) | (decode(b64.charAt(i + 1)) >> 4)
-			push(tmp & 0xFF)
-		} else if (placeHolders === 1) {
-			tmp = (decode(b64.charAt(i)) << 10) | (decode(b64.charAt(i + 1)) << 4) | (decode(b64.charAt(i + 2)) >> 2)
-			push((tmp >> 8) & 0xFF)
-			push(tmp & 0xFF)
-		}
-
-		return arr
-	}
-
-	function uint8ToBase64 (uint8) {
-		var i,
-			extraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes
-			output = "",
-			temp, length
-
-		function encode (num) {
-			return lookup.charAt(num)
-		}
-
-		function tripletToBase64 (num) {
-			return encode(num >> 18 & 0x3F) + encode(num >> 12 & 0x3F) + encode(num >> 6 & 0x3F) + encode(num & 0x3F)
-		}
-
-		// go through the array every three bytes, we'll deal with trailing stuff later
-		for (i = 0, length = uint8.length - extraBytes; i < length; i += 3) {
-			temp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
-			output += tripletToBase64(temp)
-		}
-
-		// pad the end with zeros, but make sure to not forget the extra bytes
-		switch (extraBytes) {
-			case 1:
-				temp = uint8[uint8.length - 1]
-				output += encode(temp >> 2)
-				output += encode((temp << 4) & 0x3F)
-				output += '=='
-				break
-			case 2:
-				temp = (uint8[uint8.length - 2] << 8) + (uint8[uint8.length - 1])
-				output += encode(temp >> 10)
-				output += encode((temp >> 4) & 0x3F)
-				output += encode((temp << 2) & 0x3F)
-				output += '='
-				break
-		}
-
-		return output
-	}
-
-	module.exports.toByteArray = b64ToByteArray
-	module.exports.fromByteArray = uint8ToBase64
-}())
-
-},{}],3:[function(require,module,exports){
-/*!
- * The buffer module from node.js, for the browser.
- *
- * @author   Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
- * @license  MIT
- */
-
-var base64 = require('base64-js')
-var ieee754 = require('ieee754')
-
-exports.Buffer = Buffer
-exports.SlowBuffer = Buffer
-exports.INSPECT_MAX_BYTES = 50
-Buffer.poolSize = 8192
-
-/**
- * If `TYPED_ARRAY_SUPPORT`:
- *   === true    Use Uint8Array implementation (fastest)
- *   === false   Use Object implementation (most compatible, even IE6)
- *
- * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
- * Opera 11.6+, iOS 4.2+.
- *
- * Note:
- *
- * - Implementation must support adding new properties to `Uint8Array` instances.
- *   Firefox 4-29 lacked support, fixed in Firefox 30+.
- *   See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.
- *
- *  - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.
- *
- *  - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of
- *    incorrect length in some situations.
- *
- * We detect these buggy browsers and set `TYPED_ARRAY_SUPPORT` to `false` so they will
- * get the Object implementation, which is slower but will work correctly.
- */
-var TYPED_ARRAY_SUPPORT = (function () {
-  try {
-    var buf = new ArrayBuffer(0)
-    var arr = new Uint8Array(buf)
-    arr.foo = function () { return 42 }
-    return 42 === arr.foo() && // typed array instances can be augmented
-        typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`
-        new Uint8Array(1).subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`
-  } catch (e) {
-    return false
-  }
-})()
-
-/**
- * Class: Buffer
- * =============
- *
- * The Buffer constructor returns instances of `Uint8Array` that are augmented
- * with function properties for all the node `Buffer` API functions. We use
- * `Uint8Array` so that square bracket notation works as expected -- it returns
- * a single octet.
- *
- * By augmenting the instances, we can avoid modifying the `Uint8Array`
- * prototype.
- */
-function Buffer (subject, encoding, noZero) {
-  if (!(this instanceof Buffer))
-    return new Buffer(subject, encoding, noZero)
-
-  var type = typeof subject
-
-  // Find the length
-  var length
-  if (type === 'number')
-    length = subject > 0 ? subject >>> 0 : 0
-  else if (type === 'string') {
-    if (encoding === 'base64')
-      subject = base64clean(subject)
-    length = Buffer.byteLength(subject, encoding)
-  } else if (type === 'object' && subject !== null) { // assume object is array-like
-    if (subject.type === 'Buffer' && isArray(subject.data))
-      subject = subject.data
-    length = +subject.length > 0 ? Math.floor(+subject.length) : 0
-  } else
-    throw new Error('First argument needs to be a number, array or string.')
-
-  var buf
-  if (TYPED_ARRAY_SUPPORT) {
-    // Preferred: Return an augmented `Uint8Array` instance for best performance
-    buf = Buffer._augment(new Uint8Array(length))
-  } else {
-    // Fallback: Return THIS instance of Buffer (created by `new`)
-    buf = this
-    buf.length = length
-    buf._isBuffer = true
-  }
-
-  var i
-  if (TYPED_ARRAY_SUPPORT && typeof subject.byteLength === 'number') {
-    // Speed optimization -- use set if we're copying from a typed array
-    buf._set(subject)
-  } else if (isArrayish(subject)) {
-    // Treat array-ish objects as a byte array
-    if (Buffer.isBuffer(subject)) {
-      for (i = 0; i < length; i++)
-        buf[i] = subject.readUInt8(i)
-    } else {
-      for (i = 0; i < length; i++)
-        buf[i] = ((subject[i] % 256) + 256) % 256
-    }
-  } else if (type === 'string') {
-    buf.write(subject, 0, encoding)
-  } else if (type === 'number' && !TYPED_ARRAY_SUPPORT && !noZero) {
-    for (i = 0; i < length; i++) {
-      buf[i] = 0
-    }
-  }
-
-  return buf
-}
-
-// STATIC METHODS
-// ==============
-
-Buffer.isEncoding = function (encoding) {
-  switch (String(encoding).toLowerCase()) {
-    case 'hex':
-    case 'utf8':
-    case 'utf-8':
-    case 'ascii':
-    case 'binary':
-    case 'base64':
-    case 'raw':
-    case 'ucs2':
-    case 'ucs-2':
-    case 'utf16le':
-    case 'utf-16le':
-      return true
-    default:
-      return false
-  }
-}
-
-Buffer.isBuffer = function (b) {
-  return !!(b != null && b._isBuffer)
-}
-
-Buffer.byteLength = function (str, encoding) {
-  var ret
-  str = str.toString()
-  switch (encoding || 'utf8') {
-    case 'hex':
-      ret = str.length / 2
-      break
-    case 'utf8':
-    case 'utf-8':
-      ret = utf8ToBytes(str).length
-      break
-    case 'ascii':
-    case 'binary':
-    case 'raw':
-      ret = str.length
-      break
-    case 'base64':
-      ret = base64ToBytes(str).length
-      break
-    case 'ucs2':
-    case 'ucs-2':
-    case 'utf16le':
-    case 'utf-16le':
-      ret = str.length * 2
-      break
-    default:
-      throw new Error('Unknown encoding')
-  }
-  return ret
-}
-
-Buffer.concat = function (list, totalLength) {
-  assert(isArray(list), 'Usage: Buffer.concat(list[, length])')
-
-  if (list.length === 0) {
-    return new Buffer(0)
-  } else if (list.length === 1) {
-    return list[0]
-  }
-
-  var i
-  if (totalLength === undefined) {
-    totalLength = 0
-    for (i = 0; i < list.length; i++) {
-      totalLength += list[i].length
-    }
-  }
-
-  var buf = new Buffer(totalLength)
-  var pos = 0
-  for (i = 0; i < list.length; i++) {
-    var item = list[i]
-    item.copy(buf, pos)
-    pos += item.length
-  }
-  return buf
-}
-
-Buffer.compare = function (a, b) {
-  assert(Buffer.isBuffer(a) && Buffer.isBuffer(b), 'Arguments must be Buffers')
-  var x = a.length
-  var y = b.length
-  for (var i = 0, len = Math.min(x, y); i < len && a[i] === b[i]; i++) {}
-  if (i !== len) {
-    x = a[i]
-    y = b[i]
-  }
-  if (x < y) {
-    return -1
-  }
-  if (y < x) {
-    return 1
-  }
-  return 0
-}
-
-// BUFFER INSTANCE METHODS
-// =======================
-
-function hexWrite (buf, string, offset, length) {
-  offset = Number(offset) || 0
-  var remaining = buf.length - offset
-  if (!length) {
-    length = remaining
-  } else {
-    length = Number(length)
-    if (length > remaining) {
-      length = remaining
-    }
-  }
-
-  // must be an even number of digits
-  var strLen = string.length
-  assert(strLen % 2 === 0, 'Invalid hex string')
-
-  if (length > strLen / 2) {
-    length = strLen / 2
-  }
-  for (var i = 0; i < length; i++) {
-    var byte = parseInt(string.substr(i * 2, 2), 16)
-    assert(!isNaN(byte), 'Invalid hex string')
-    buf[offset + i] = byte
-  }
-  return i
-}
-
-function utf8Write (buf, string, offset, length) {
-  var charsWritten = blitBuffer(utf8ToBytes(string), buf, offset, length)
-  return charsWritten
-}
-
-function asciiWrite (buf, string, offset, length) {
-  var charsWritten = blitBuffer(asciiToBytes(string), buf, offset, length)
-  return charsWritten
-}
-
-function binaryWrite (buf, string, offset, length) {
-  return asciiWrite(buf, string, offset, length)
-}
-
-function base64Write (buf, string, offset, length) {
-  var charsWritten = blitBuffer(base64ToBytes(string), buf, offset, length)
-  return charsWritten
-}
-
-function utf16leWrite (buf, string, offset, length) {
-  var charsWritten = blitBuffer(utf16leToBytes(string), buf, offset, length)
-  return charsWritten
-}
-
-Buffer.prototype.write = function (string, offset, length, encoding) {
-  // Support both (string, offset, length, encoding)
-  // and the legacy (string, encoding, offset, length)
-  if (isFinite(offset)) {
-    if (!isFinite(length)) {
-      encoding = length
-      length = undefined
-    }
-  } else {  // legacy
-    var swap = encoding
-    encoding = offset
-    offset = length
-    length = swap
-  }
-
-  offset = Number(offset) || 0
-  var remaining = this.length - offset
-  if (!length) {
-    length = remaining
-  } else {
-    length = Number(length)
-    if (length > remaining) {
-      length = remaining
-    }
-  }
-  encoding = String(encoding || 'utf8').toLowerCase()
-
-  var ret
-  switch (encoding) {
-    case 'hex':
-      ret = hexWrite(this, string, offset, length)
-      break
-    case 'utf8':
-    case 'utf-8':
-      ret = utf8Write(this, string, offset, length)
-      break
-    case 'ascii':
-      ret = asciiWrite(this, string, offset, length)
-      break
-    case 'binary':
-      ret = binaryWrite(this, string, offset, length)
-      break
-    case 'base64':
-      ret = base64Write(this, string, offset, length)
-      break
-    case 'ucs2':
-    case 'ucs-2':
-    case 'utf16le':
-    case 'utf-16le':
-      ret = utf16leWrite(this, string, offset, length)
-      break
-    default:
-      throw new Error('Unknown encoding')
-  }
-  return ret
-}
-
-Buffer.prototype.toString = function (encoding, start, end) {
-  var self = this
-
-  encoding = String(encoding || 'utf8').toLowerCase()
-  start = Number(start) || 0
-  end = (end === undefined) ? self.length : Number(end)
-
-  // Fastpath empty strings
-  if (end === start)
-    return ''
-
-  var ret
-  switch (encoding) {
-    case 'hex':
-      ret = hexSlice(self, start, end)
-      break
-    case 'utf8':
-    case 'utf-8':
-      ret = utf8Slice(self, start, end)
-      break
-    case 'ascii':
-      ret = asciiSlice(self, start, end)
-      break
-    case 'binary':
-      ret = binarySlice(self, start, end)
-      break
-    case 'base64':
-      ret = base64Slice(self, start, end)
-      break
-    case 'ucs2':
-    case 'ucs-2':
-    case 'utf16le':
-    case 'utf-16le':
-      ret = utf16leSlice(self, start, end)
-      break
-    default:
-      throw new Error('Unknown encoding')
-  }
-  return ret
-}
-
-Buffer.prototype.toJSON = function () {
-  return {
-    type: 'Buffer',
-    data: Array.prototype.slice.call(this._arr || this, 0)
-  }
-}
-
-Buffer.prototype.equals = function (b) {
-  assert(Buffer.isBuffer(b), 'Argument must be a Buffer')
-  return Buffer.compare(this, b) === 0
-}
-
-Buffer.prototype.compare = function (b) {
-  assert(Buffer.isBuffer(b), 'Argument must be a Buffer')
-  return Buffer.compare(this, b)
-}
-
-// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
-Buffer.prototype.copy = function (target, target_start, start, end) {
-  var source = this
-
-  if (!start) start = 0
-  if (!end && end !== 0) end = this.length
-  if (!target_start) target_start = 0
-
-  // Copy 0 bytes; we're done
-  if (end === start) return
-  if (target.length === 0 || source.length === 0) return
-
-  // Fatal error conditions
-  assert(end >= start, 'sourceEnd < sourceStart')
-  assert(target_start >= 0 && target_start < target.length,
-      'targetStart out of bounds')
-  assert(start >= 0 && start < source.length, 'sourceStart out of bounds')
-  assert(end >= 0 && end <= source.length, 'sourceEnd out of bounds')
-
-  // Are we oob?
-  if (end > this.length)
-    end = this.length
-  if (target.length - target_start < end - start)
-    end = target.length - target_start + start
-
-  var len = end - start
-
-  if (len < 100 || !TYPED_ARRAY_SUPPORT) {
-    for (var i = 0; i < len; i++) {
-      target[i + target_start] = this[i + start]
-    }
-  } else {
-    target._set(this.subarray(start, start + len), target_start)
-  }
-}
-
-function base64Slice (buf, start, end) {
-  if (start === 0 && end === buf.length) {
-    return base64.fromByteArray(buf)
-  } else {
-    return base64.fromByteArray(buf.slice(start, end))
-  }
-}
-
-function utf8Slice (buf, start, end) {
-  var res = ''
-  var tmp = ''
-  end = Math.min(buf.length, end)
-
-  for (var i = start; i < end; i++) {
-    if (buf[i] <= 0x7F) {
-      res += decodeUtf8Char(tmp) + String.fromCharCode(buf[i])
-      tmp = ''
-    } else {
-      tmp += '%' + buf[i].toString(16)
-    }
-  }
-
-  return res + decodeUtf8Char(tmp)
-}
-
-function asciiSlice (buf, start, end) {
-  var ret = ''
-  end = Math.min(buf.length, end)
-
-  for (var i = start; i < end; i++) {
-    ret += String.fromCharCode(buf[i])
-  }
-  return ret
-}
-
-function binarySlice (buf, start, end) {
-  return asciiSlice(buf, start, end)
-}
-
-function hexSlice (buf, start, end) {
-  var len = buf.length
-
-  if (!start || start < 0) start = 0
-  if (!end || end < 0 || end > len) end = len
-
-  var out = ''
-  for (var i = start; i < end; i++) {
-    out += toHex(buf[i])
-  }
-  return out
-}
-
-function utf16leSlice (buf, start, end) {
-  var bytes = buf.slice(start, end)
-  var res = ''
-  for (var i = 0; i < bytes.length; i += 2) {
-    res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)
-  }
-  return res
-}
-
-Buffer.prototype.slice = function (start, end) {
-  var len = this.length
-  start = ~~start
-  end = end === undefined ? len : ~~end
-
-  if (start < 0) {
-    start += len;
-    if (start < 0)
-      start = 0
-  } else if (start > len) {
-    start = len
-  }
-
-  if (end < 0) {
-    end += len
-    if (end < 0)
-      end = 0
-  } else if (end > len) {
-    end = len
-  }
-
-  if (end < start)
-    end = start
-
-  if (TYPED_ARRAY_SUPPORT) {
-    return Buffer._augment(this.subarray(start, end))
-  } else {
-    var sliceLen = end - start
-    var newBuf = new Buffer(sliceLen, undefined, true)
-    for (var i = 0; i < sliceLen; i++) {
-      newBuf[i] = this[i + start]
-    }
-    return newBuf
-  }
-}
-
-// `get` will be removed in Node 0.13+
-Buffer.prototype.get = function (offset) {
-  console.log('.get() is deprecated. Access using array indexes instead.')
-  return this.readUInt8(offset)
-}
-
-// `set` will be removed in Node 0.13+
-Buffer.prototype.set = function (v, offset) {
-  console.log('.set() is deprecated. Access using array indexes instead.')
-  return this.writeUInt8(v, offset)
-}
-
-Buffer.prototype.readUInt8 = function (offset, noAssert) {
-  if (!noAssert) {
-    assert(offset !== undefined && offset !== null, 'missing offset')
-    assert(offset < this.length, 'Trying to read beyond buffer length')
-  }
-
-  if (offset >= this.length)
-    return
-
-  return this[offset]
-}
-
-function readUInt16 (buf, offset, littleEndian, noAssert) {
-  if (!noAssert) {
-    assert(typeof littleEndian === 'boolean', 'missing or invalid endian')
-    assert(offset !== undefined && offset !== null, 'missing offset')
-    assert(offset + 1 < buf.length, 'Trying to read beyond buffer length')
-  }
-
-  var len = buf.length
-  if (offset >= len)
-    return
-
-  var val
-  if (littleEndian) {
-    val = buf[offset]
-    if (offset + 1 < len)
-      val |= buf[offset + 1] << 8
-  } else {
-    val = buf[offset] << 8
-    if (offset + 1 < len)
-      val |= buf[offset + 1]
-  }
-  return val
-}
-
-Buffer.prototype.readUInt16LE = function (offset, noAssert) {
-  return readUInt16(this, offset, true, noAssert)
-}
-
-Buffer.prototype.readUInt16BE = function (offset, noAssert) {
-  return readUInt16(this, offset, false, noAssert)
-}
-
-function readUInt32 (buf, offset, littleEndian, noAssert) {
-  if (!noAssert) {
-    assert(typeof littleEndian === 'boolean', 'missing or invalid endian')
-    assert(offset !== undefined && offset !== null, 'missing offset')
-    assert(offset + 3 < buf.length, 'Trying to read beyond buffer length')
-  }
-
-  var len = buf.length
-  if (offset >= len)
-    return
-
-  var val
-  if (littleEndian) {
-    if (offset + 2 < len)
-      val = buf[offset + 2] << 16
-    if (offset + 1 < len)
-      val |= buf[offset + 1] << 8
-    val |= buf[offset]
-    if (offset + 3 < len)
-      val = val + (buf[offset + 3] << 24 >>> 0)
-  } else {
-    if (offset + 1 < len)
-      val = buf[offset + 1] << 16
-    if (offset + 2 < len)
-      val |= buf[offset + 2] << 8
-    if (offset + 3 < len)
-      val |= buf[offset + 3]
-    val = val + (buf[offset] << 24 >>> 0)
-  }
-  return val
-}
-
-Buffer.prototype.readUInt32LE = function (offset, noAssert) {
-  return readUInt32(this, offset, true, noAssert)
-}
-
-Buffer.prototype.readUInt32BE = function (offset, noAssert) {
-  return readUInt32(this, offset, false, noAssert)
-}
-
-Buffer.prototype.readInt8 = function (offset, noAssert) {
-  if (!noAssert) {
-    assert(offset !== undefined && offset !== null,
-        'missing offset')
-    assert(offset < this.length, 'Trying to read beyond buffer length')
-  }
-
-  if (offset >= this.length)
-    return
-
-  var neg = this[offset] & 0x80
-  if (neg)
-    return (0xff - this[offset] + 1) * -1
-  else
-    return this[offset]
-}
-
-function readInt16 (buf, offset, littleEndian, noAssert) {
-  if (!noAssert) {
-    assert(typeof littleEndian === 'boolean', 'missing or invalid endian')
-    assert(offset !== undefined && offset !== null, 'missing offset')
-    assert(offset + 1 < buf.length, 'Trying to read beyond buffer length')
-  }
-
-  var len = buf.length
-  if (offset >= len)
-    return
-
-  var val = readUInt16(buf, offset, littleEndian, true)
-  var neg = val & 0x8000
-  if (neg)
-    return (0xffff - val + 1) * -1
-  else
-    return val
-}
-
-Buffer.prototype.readInt16LE = function (offset, noAssert) {
-  return readInt16(this, offset, true, noAssert)
-}
-
-Buffer.prototype.readInt16BE = function (offset, noAssert) {
-  return readInt16(this, offset, false, noAssert)
-}
-
-function readInt32 (buf, offset, littleEndian, noAssert) {
-  if (!noAssert) {
-    assert(typeof littleEndian === 'boolean', 'missing or invalid endian')
-    assert(offset !== undefined && offset !== null, 'missing offset')
-    assert(offset + 3 < buf.length, 'Trying to read beyond buffer length')
-  }
-
-  var len = buf.length
-  if (offset >= len)
-    return
-
-  var val = readUInt32(buf, offset, littleEndian, true)
-  var neg = val & 0x80000000
-  if (neg)
-    return (0xffffffff - val + 1) * -1
-  else
-    return val
-}
-
-Buffer.prototype.readInt32LE = function (offset, noAssert) {
-  return readInt32(this, offset, true, noAssert)
-}
-
-Buffer.prototype.readInt32BE = function (offset, noAssert) {
-  return readInt32(this, offset, false, noAssert)
-}
-
-function readFloat (buf, offset, littleEndian, noAssert) {
-  if (!noAssert) {
-    assert(typeof littleEndian === 'boolean', 'missing or invalid endian')
-    assert(offset + 3 < buf.length, 'Trying to read beyond buffer length')
-  }
-
-  return ieee754.read(buf, offset, littleEndian, 23, 4)
-}
-
-Buffer.prototype.readFloatLE = function (offset, noAssert) {
-  return readFloat(this, offset, true, noAssert)
-}
-
-Buffer.prototype.readFloatBE = function (offset, noAssert) {
-  return readFloat(this, offset, false, noAssert)
-}
-
-function readDouble (buf, offset, littleEndian, noAssert) {
-  if (!noAssert) {
-    assert(typeof littleEndian === 'boolean', 'missing or invalid endian')
-    assert(offset + 7 < buf.length, 'Trying to read beyond buffer length')
-  }
-
-  return ieee754.read(buf, offset, littleEndian, 52, 8)
-}
-
-Buffer.prototype.readDoubleLE = function (offset, noAssert) {
-  return readDouble(this, offset, true, noAssert)
-}
-
-Buffer.prototype.readDoubleBE = function (offset, noAssert) {
-  return readDouble(this, offset, false, noAssert)
-}
-
-Buffer.prototype.writeUInt8 = function (value, offset, noAssert) {
-  if (!noAssert) {
-    assert(value !== undefined && value !== null, 'missing value')
-    assert(offset !== undefined && offset !== null, 'missing offset')
-    assert(offset < this.length, 'trying to write beyond buffer length')
-    verifuint(value, 0xff)
-  }
-
-  if (offset >= this.length) return
-
-  this[offset] = value
-  return offset + 1
-}
-
-function writeUInt16 (buf, value, offset, littleEndian, noAssert) {
-  if (!noAssert) {
-    assert(value !== undefined && value !== null, 'missing value')
-    assert(typeof littleEndian === 'boolean', 'missing or invalid endian')
-    assert(offset !== undefined && offset !== null, 'missing offset')
-    assert(offset + 1 < buf.length, 'trying to write beyond buffer length')
-    verifuint(value, 0xffff)
-  }
-
-  var len = buf.length
-  if (offset >= len)
-    return
-
-  for (var i = 0, j = Math.min(len - offset, 2); i < j; i++) {
-    buf[offset + i] =
-        (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>
-            (littleEndian ? i : 1 - i) * 8
-  }
-  return offset + 2
-}
-
-Buffer.prototype.writeUInt16LE = function (value, offset, noAssert) {
-  return writeUInt16(this, value, offset, true, noAssert)
-}
-
-Buffer.prototype.writeUInt16BE = function (value, offset, noAssert) {
-  return writeUInt16(this, value, offset, false, noAssert)
-}
-
-function writeUInt32 (buf, value, offset, littleEndian, noAssert) {
-  if (!noAssert) {
-    assert(value !== undefined && value !== null, 'missing value')
-    assert(typeof littleEndian === 'boolean', 'missing or invalid endian')
-    assert(offset !== undefined && offset !== null, 'missing offset')
-    assert(offset + 3 < buf.length, 'trying to write beyond buffer length')
-    verifuint(value, 0xffffffff)
-  }
-
-  var len = buf.length
-  if (offset >= len)
-    return
-
-  for (var i = 0, j = Math.min(len - offset, 4); i < j; i++) {
-    buf[offset + i] =
-        (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff
-  }
-  return offset + 4
-}
-
-Buffer.prototype.writeUInt32LE = function (value, offset, noAssert) {
-  return writeUInt32(this, value, offset, true, noAssert)
-}
-
-Buffer.prototype.writeUInt32BE = function (value, offset, noAssert) {
-  return writeUInt32(this, value, offset, false, noAssert)
-}
-
-Buffer.prototype.writeInt8 = function (value, offset, noAssert) {
-  if (!noAssert) {
-    assert(value !== undefined && value !== null, 'missing value')
-    assert(offset !== undefined && offset !== null, 'missing offset')
-    assert(offset < this.length, 'Trying to write beyond buffer length')
-    verifsint(value, 0x7f, -0x80)
-  }
-
-  if (offset >= this.length)
-    return
-
-  if (value >= 0)
-    this.writeUInt8(value, offset, noAssert)
-  else
-    this.writeUInt8(0xff + value + 1, offset, noAssert)
-  return offset + 1
-}
-
-function writeInt16 (buf, value, offset, littleEndian, noAssert) {
-  if (!noAssert) {
-    assert(value !== undefined && value !== null, 'missing value')
-    assert(typeof littleEndian === 'boolean', 'missing or invalid endian')
-    assert(offset !== undefined && offset !== null, 'missing offset')
-    assert(offset + 1 < buf.length, 'Trying to write beyond buffer length')
-    verifsint(value, 0x7fff, -0x8000)
-  }
-
-  var len = buf.length
-  if (offset >= len)
-    return
-
-  if (value >= 0)
-    writeUInt16(buf, value, offset, littleEndian, noAssert)
-  else
-    writeUInt16(buf, 0xffff + value + 1, offset, littleEndian, noAssert)
-  return offset + 2
-}
-
-Buffer.prototype.writeInt16LE = function (value, offset, noAssert) {
-  return writeInt16(this, value, offset, true, noAssert)
-}
-
-Buffer.prototype.writeInt16BE = function (value, offset, noAssert) {
-  return writeInt16(this, value, offset, false, noAssert)
-}
-
-function writeInt32 (buf, value, offset, littleEndian, noAssert) {
-  if (!noAssert) {
-    assert(value !== undefined && value !== null, 'missing value')
-    assert(typeof littleEndian === 'boolean', 'missing or invalid endian')
-    assert(offset !== undefined && offset !== null, 'missing offset')
-    assert(offset + 3 < buf.length, 'Trying to write beyond buffer length')
-    verifsint(value, 0x7fffffff, -0x80000000)
-  }
-
-  var len = buf.length
-  if (offset >= len)
-    return
-
-  if (value >= 0)
-    writeUInt32(buf, value, offset, littleEndian, noAssert)
-  else
-    writeUInt32(buf, 0xffffffff + value + 1, offset, littleEndian, noAssert)
-  return offset + 4
-}
-
-Buffer.prototype.writeInt32LE = function (value, offset, noAssert) {
-  return writeInt32(this, value, offset, true, noAssert)
-}
-
-Buffer.prototype.writeInt32BE = function (value, offset, noAssert) {
-  return writeInt32(this, value, offset, false, noAssert)
-}
-
-function writeFloat (buf, value, offset, littleEndian, noAssert) {
-  if (!noAssert) {
-    assert(value !== undefined && value !== null, 'missing value')
-    assert(typeof littleEndian === 'boolean', 'missing or invalid endian')
-    assert(offset !== undefined && offset !== null, 'missing offset')
-    assert(offset + 3 < buf.length, 'Trying to write beyond buffer length')
-    verifIEEE754(value, 3.4028234663852886e+38, -3.4028234663852886e+38)
-  }
-
-  var len = buf.length
-  if (offset >= len)
-    return
-
-  ieee754.write(buf, value, offset, littleEndian, 23, 4)
-  return offset + 4
-}
-
-Buffer.prototype.writeFloatLE = function (value, offset, noAssert) {
-  return writeFloat(this, value, offset, true, noAssert)
-}
-
-Buffer.prototype.writeFloatBE = function (value, offset, noAssert) {
-  return writeFloat(this, value, offset, false, noAssert)
-}
-
-function writeDouble (buf, value, offset, littleEndian, noAssert) {
-  if (!noAssert) {
-    assert(value !== undefined && value !== null, 'missing value')
-    assert(typeof littleEndian === 'boolean', 'missing or invalid endian')
-    assert(offset !== undefined && offset !== null, 'missing offset')
-    assert(offset + 7 < buf.length,
-        'Trying to write beyond buffer length')
-    verifIEEE754(value, 1.7976931348623157E+308, -1.7976931348623157E+308)
-  }
-
-  var len = buf.length
-  if (offset >= len)
-    return
-
-  ieee754.write(buf, value, offset, littleEndian, 52, 8)
-  return offset + 8
-}
-
-Buffer.prototype.writeDoubleLE = function (value, offset, noAssert) {
-  return writeDouble(this, value, offset, true, noAssert)
-}
-
-Buffer.prototype.writeDoubleBE = function (value, offset, noAssert) {
-  return writeDouble(this, value, offset, false, noAssert)
-}
-
-// fill(value, start=0, end=buffer.length)
-Buffer.prototype.fill = function (value, start, end) {
-  if (!value) value = 0
-  if (!start) start = 0
-  if (!end) end = this.length
-
-  assert(end >= start, 'end < start')
-
-  // Fill 0 bytes; we're done
-  if (end === start) return
-  if (this.length === 0) return
-
-  assert(start >= 0 && start < this.length, 'start out of bounds')
-  assert(end >= 0 && end <= this.length, 'end out of bounds')
-
-  var i
-  if (typeof value === 'number') {
-    for (i = start; i < end; i++) {
-      this[i] = value
-    }
-  } else {
-    var bytes = utf8ToBytes(value.toString())
-    var len = bytes.length
-    for (i = start; i < end; i++) {
-      this[i] = bytes[i % len]
-    }
-  }
-
-  return this
-}
-
-Buffer.prototype.inspect = function () {
-  var out = []
-  var len = this.length
-  for (var i = 0; i < len; i++) {
-    out[i] = toHex(this[i])
-    if (i === exports.INSPECT_MAX_BYTES) {
-      out[i + 1] = '...'
-      break
-    }
-  }
-  return '<Buffer ' + out.join(' ') + '>'
-}
-
-/**
- * Creates a new `ArrayBuffer` with the *copied* memory of the buffer instance.
- * Added in Node 0.12. Only available in browsers that support ArrayBuffer.
- */
-Buffer.prototype.toArrayBuffer = function () {
-  if (typeof Uint8Array !== 'undefined') {
-    if (TYPED_ARRAY_SUPPORT) {
-      return (new Buffer(this)).buffer
-    } else {
-      var buf = new Uint8Array(this.length)
-      for (var i = 0, len = buf.length; i < len; i += 1) {
-        buf[i] = this[i]
-      }
-      return buf.buffer
-    }
-  } else {
-    throw new Error('Buffer.toArrayBuffer not supported in this browser')
-  }
-}
-
-// HELPER FUNCTIONS
-// ================
-
-var BP = Buffer.prototype
-
-/**
- * Augment a Uint8Array *instance* (not the Uint8Array class!) with Buffer methods
- */
-Buffer._augment = function (arr) {
-  arr._isBuffer = true
-
-  // save reference to original Uint8Array get/set methods before overwriting
-  arr._get = arr.get
-  arr._set = arr.set
-
-  // deprecated, will be removed in node 0.13+
-  arr.get = BP.get
-  arr.set = BP.set
-
-  arr.write = BP.write
-  arr.toString = BP.toString
-  arr.toLocaleString = BP.toString
-  arr.toJSON = BP.toJSON
-  arr.equals = BP.equals
-  arr.compare = BP.compare
-  arr.copy = BP.copy
-  arr.slice = BP.slice
-  arr.readUInt8 = BP.readUInt8
-  arr.readUInt16LE = BP.readUInt16LE
-  arr.readUInt16BE = BP.readUInt16BE
-  arr.readUInt32LE = BP.readUInt32LE
-  arr.readUInt32BE = BP.readUInt32BE
-  arr.readInt8 = BP.readInt8
-  arr.readInt16LE = BP.readInt16LE
-  arr.readInt16BE = BP.readInt16BE
-  arr.readInt32LE = BP.readInt32LE
-  arr.readInt32BE = BP.readInt32BE
-  arr.readFloatLE = BP.readFloatLE
-  arr.readFloatBE = BP.readFloatBE
-  arr.readDoubleLE = BP.readDoubleLE
-  arr.readDoubleBE = BP.readDoubleBE
-  arr.writeUInt8 = BP.writeUInt8
-  arr.writeUInt16LE = BP.writeUInt16LE
-  arr.writeUInt16BE = BP.writeUInt16BE
-  arr.writeUInt32LE = BP.writeUInt32LE
-  arr.writeUInt32BE = BP.writeUInt32BE
-  arr.writeInt8 = BP.writeInt8
-  arr.writeInt16LE = BP.writeInt16LE
-  arr.writeInt16BE = BP.writeInt16BE
-  arr.writeInt32LE = BP.writeInt32LE
-  arr.writeInt32BE = BP.writeInt32BE
-  arr.writeFloatLE = BP.writeFloatLE
-  arr.writeFloatBE = BP.writeFloatBE
-  arr.writeDoubleLE = BP.writeDoubleLE
-  arr.writeDoubleBE = BP.writeDoubleBE
-  arr.fill = BP.fill
-  arr.inspect = BP.inspect
-  arr.toArrayBuffer = BP.toArrayBuffer
-
-  return arr
-}
-
-var INVALID_BASE64_RE = /[^+\/0-9A-z]/g
-
-function base64clean (str) {
-  // Node strips out invalid characters like \n and \t from the string, base64-js does not
-  str = stringtrim(str).replace(INVALID_BASE64_RE, '')
-  // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
-  while (str.length % 4 !== 0) {
-    str = str + '='
-  }
-  return str
-}
-
-function stringtrim (str) {
-  if (str.trim) return str.trim()
-  return str.replace(/^\s+|\s+$/g, '')
-}
-
-function isArray (subject) {
-  return (Array.isArray || function (subject) {
-    return Object.prototype.toString.call(subject) === '[object Array]'
-  })(subject)
-}
-
-function isArrayish (subject) {
-  return isArray(subject) || Buffer.isBuffer(subject) ||
-      subject && typeof subject === 'object' &&
-      typeof subject.length === 'number'
-}
-
-function toHex (n) {
-  if (n < 16) return '0' + n.toString(16)
-  return n.toString(16)
-}
-
-function utf8ToBytes (str) {
-  var byteArray = []
-  for (var i = 0; i < str.length; i++) {
-    var b = str.charCodeAt(i)
-    if (b <= 0x7F) {
-      byteArray.push(b)
-    } else {
-      var start = i
-      if (b >= 0xD800 && b <= 0xDFFF) i++
-      var h = encodeURIComponent(str.slice(start, i+1)).substr(1).split('%')
-      for (var j = 0; j < h.length; j++) {
-        byteArray.push(parseInt(h[j], 16))
-      }
-    }
-  }
-  return byteArray
-}
-
-function asciiToBytes (str) {
-  var byteArray = []
-  for (var i = 0; i < str.length; i++) {
-    // Node's code seems to be doing this and not & 0x7F..
-    byteArray.push(str.charCodeAt(i) & 0xFF)
-  }
-  return byteArray
-}
-
-function utf16leToBytes (str) {
-  var c, hi, lo
-  var byteArray = []
-  for (var i = 0; i < str.length; i++) {
-    c = str.charCodeAt(i)
-    hi = c >> 8
-    lo = c % 256
-    byteArray.push(lo)
-    byteArray.push(hi)
-  }
-
-  return byteArray
-}
-
-function base64ToBytes (str) {
-  return base64.toByteArray(str)
-}
-
-function blitBuffer (src, dst, offset, length) {
-  for (var i = 0; i < length; i++) {
-    if ((i + offset >= dst.length) || (i >= src.length))
-      break
-    dst[i + offset] = src[i]
-  }
-  return i
-}
-
-function decodeUtf8Char (str) {
-  try {
-    return decodeURIComponent(str)
-  } catch (err) {
-    return String.fromCharCode(0xFFFD) // UTF 8 invalid char
-  }
-}
-
-/*
- * We have to make sure that the value is a valid integer. This means that it
- * is non-negative. It has no fractional component and that it does not
- * exceed the maximum allowed value.
- */
-function verifuint (value, max) {
-  assert(typeof value === 'number', 'cannot write a non-number as a number')
-  assert(value >= 0, 'specified a negative value for writing an unsigned value')
-  assert(value <= max, 'value is larger than maximum value for type')
-  assert(Math.floor(value) === value, 'value has a fractional component')
-}
-
-function verifsint (value, max, min) {
-  assert(typeof value === 'number', 'cannot write a non-number as a number')
-  assert(value <= max, 'value larger than maximum allowed value')
-  assert(value >= min, 'value smaller than minimum allowed value')
-  assert(Math.floor(value) === value, 'value has a fractional component')
-}
-
-function verifIEEE754 (value, max, min) {
-  assert(typeof value === 'number', 'cannot write a non-number as a number')
-  assert(value <= max, 'value larger than maximum allowed value')
-  assert(value >= min, 'value smaller than minimum allowed value')
-}
-
-function assert (test, message) {
-  if (!test) throw new Error(message || 'Failed assertion')
-}
-
-},{"base64-js":2,"ieee754":4}],4:[function(require,module,exports){
-exports.read = function(buffer, offset, isLE, mLen, nBytes) {
-  var e, m,
-      eLen = nBytes * 8 - mLen - 1,
-      eMax = (1 << eLen) - 1,
-      eBias = eMax >> 1,
-      nBits = -7,
-      i = isLE ? (nBytes - 1) : 0,
-      d = isLE ? -1 : 1,
-      s = buffer[offset + i];
-
-  i += d;
-
-  e = s & ((1 << (-nBits)) - 1);
-  s >>= (-nBits);
-  nBits += eLen;
-  for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8);
-
-  m = e & ((1 << (-nBits)) - 1);
-  e >>= (-nBits);
-  nBits += mLen;
-  for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8);
-
-  if (e === 0) {
-    e = 1 - eBias;
-  } else if (e === eMax) {
-    return m ? NaN : ((s ? -1 : 1) * Infinity);
-  } else {
-    m = m + Math.pow(2, mLen);
-    e = e - eBias;
-  }
-  return (s ? -1 : 1) * m * Math.pow(2, e - mLen);
-};
-
-exports.write = function(buffer, value, offset, isLE, mLen, nBytes) {
-  var e, m, c,
-      eLen = nBytes * 8 - mLen - 1,
-      eMax = (1 << eLen) - 1,
-      eBias = eMax >> 1,
-      rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0),
-      i = isLE ? 0 : (nBytes - 1),
-      d = isLE ? 1 : -1,
-      s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0;
-
-  value = Math.abs(value);
-
-  if (isNaN(value) || value === Infinity) {
-    m = isNaN(value) ? 1 : 0;
-    e = eMax;
-  } else {
-    e = Math.floor(Math.log(value) / Math.LN2);
-    if (value * (c = Math.pow(2, -e)) < 1) {
-      e--;
-      c *= 2;
-    }
-    if (e + eBias >= 1) {
-      value += rt / c;
-    } else {
-      value += rt * Math.pow(2, 1 - eBias);
-    }
-    if (value * c >= 2) {
-      e++;
-      c /= 2;
-    }
-
-    if (e + eBias >= eMax) {
-      m = 0;
-      e = eMax;
-    } else if (e + eBias >= 1) {
-      m = (value * c - 1) * Math.pow(2, mLen);
-      e = e + eBias;
-    } else {
-      m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen);
-      e = 0;
-    }
-  }
-
-  for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8);
-
-  e = (e << mLen) | m;
-  eLen += mLen;
-  for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8);
-
-  buffer[offset + i - d] |= s * 128;
-};
-
-},{}],5:[function(require,module,exports){
-// Generated by CoffeeScript 1.6.3
-(function() {
-  var XMLAttribute, _;
-
-  _ = require('lodash-node');
-
-  module.exports = XMLAttribute = (function() {
-    function XMLAttribute(parent, name, value) {
-      this.stringify = parent.stringify;
-      if (name == null) {
-        throw new Error("Missing attribute name");
-      }
-      if (value == null) {
-        throw new Error("Missing attribute value");
-      }
-      this.name = this.stringify.attName(name);
-      this.value = this.stringify.attValue(value);
-    }
-
-    XMLAttribute.prototype.clone = function() {
-      return _.create(XMLAttribute.prototype, this);
-    };
-
-    XMLAttribute.prototype.toString = function(options, level) {
-      return ' ' + this.name + '="' + this.value + '"';
-    };
-
-    return XMLAttribute;
-
-  })();
-
-}).call(this);
-
-},{"lodash-node":95}],6:[function(require,module,exports){
-// Generated by CoffeeScript 1.6.3
-(function() {
-  var XMLBuilder, XMLDeclaration, XMLDocType, XMLElement, XMLStringifier, _;
-
-  _ = require('lodash-node');
-
-  XMLStringifier = require('./XMLStringifier');
-
-  XMLDeclaration = require('./XMLDeclaration');
-
-  XMLDocType = require('./XMLDocType');
-
-  XMLElement = require('./XMLElement');
-
-  module.exports = XMLBuilder = (function() {
-    function XMLBuilder(name, options) {
-      var root, temp;
-      if (name == null) {
-        throw new Error("Root element needs a name");
-      }
-      if (options == null) {
-        options = {};
-      }
-      this.options = options;
-      this.stringify = new XMLStringifier(options);
-      temp = new XMLElement(this, 'doc');
-      root = temp.element(name);
-      root.isRoot = true;
-      root.documentObject = this;
-      this.rootObject = root;
-      if (!options.headless) {
-        root.declaration(options);
-        if ((options.pubID != null) || (options.sysID != null)) {
-          root.doctype(options);
-        }
-      }
-    }
-
-    XMLBuilder.prototype.root = function() {
-      return this.rootObject;
-    };
-
-    XMLBuilder.prototype.end = function(options) {
-      return toString(options);
-    };
-
-    XMLBuilder.prototype.toString = function(options) {
-      var indent, newline, pretty, r;
-      pretty = (options != null ? options.pretty : void 0) || false;
-      indent = (options != null ? options.indent : void 0) || '  ';
-      newline = (options != null ? options.newline : void 0) || '\n';
-      r = '';
-      if (this.xmldec != null) {
-        r += this.xmldec.toString(options);
-      }
-      if (this.doctype != null) {
-        r += this.doctype.toString(options);
-      }
-      r += this.rootObject.toString(options);
-      if (pretty && r.slice(-newline.length) === newline) {
-        r = r.slice(0, -newline.length);
-      }
-      return r;
-    };
-
-    return XMLBuilder;
-
-  })();
-
-}).call(this);
-
-},{"./XMLDeclaration":13,"./XMLDocType":14,"./XMLElement":15,"./XMLStringifier":19,"lodash-node":95}],7:[function(require,module,exports){
-// Generated by CoffeeScript 1.6.3
-(function() {
-  var XMLCData, XMLNode, _,
-    __hasProp = {}.hasOwnProperty,
-    __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
-
-  _ = require('lodash-node');
-
-  XMLNode = require('./XMLNode');
-
-  module.exports = XMLCData = (function(_super) {
-    __extends(XMLCData, _super);
-
-    function XMLCData(parent, text) {
-      XMLCData.__super__.constructor.call(this, parent);
-      if (text == null) {
-        throw new Error("Missing CDATA text");
-      }
-      this.text = this.stringify.cdata(text);
-    }
-
-    XMLCData.prototype.clone = function() {
-      return _.create(XMLCData.prototype, this);
-    };
-
-    XMLCData.prototype.toString = function(options, level) {
-      var indent, newline, pretty, r, space;
-      pretty = (options != null ? options.pretty : void 0) || false;
-      indent = (options != null ? options.indent : void 0) || '  ';
-      newline = (options != null ? options.newline : void 0) || '\n';
-      level || (level = 0);
-      space = new Array(level + 1).join(indent);
-      r = '';
-      if (pretty) {
-        r += space;
-      }
-      r += '<![CDATA[' + this.text + ']]>';
-      if (pretty) {
-        r += newline;
-      }
-      return r;
-    };
-
-    return XMLCData;
-
-  })(XMLNode);
-
-}).call(this);
-
-},{"./XMLNode":16,"lodash-node":95}],8:[function(require,module,exports){
-// Generated by CoffeeScript 1.6.3
-(function() {
-  var XMLComment, XMLNode, _,
-    __hasProp = {}.hasOwnProperty,
-    __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
-
-  _ = require('lodash-node');
-
-  XMLNode = require('./XMLNode');
-
-  module.exports = XMLComment = (function(_super) {
-    __extends(XMLComment, _super);
-
-    function XMLComment(parent, text) {
-      XMLComment.__super__.constructor.call(this, parent);
-      if (text == null) {
-        throw new Error("Missing comment text");
-      }
-      this.text = this.stringify.comment(text);
-    }
-
-    XMLComment.prototype.clone = function() {
-      return _.create(XMLComment.prototype, this);
-    };
-
-    XMLComment.prototype.toString = function(options, level) {
-      var indent, newline, pretty, r, space;
-      pretty = (options != null ? options.pretty : void 0) || false;
-      indent = (options != null ? options.indent : void 0) || '  ';
-      newline = (options != null ? options.newline : void 0) || '\n';
-      level || (level = 0);
-      space = new Array(level + 1).join(indent);
-      r = '';
-      if (pretty) {
-        r += space;
-      }
-      r += '<!-- ' + this.text + ' -->';
-      if (pretty) {
-        r += newline;
-      }
-      return r;
-    };
-
-    return XMLComment;
-
-  })(XMLNode);
-
-}).call(this);
-
-},{"./XMLNode":16,"lodash-node":95}],9:[function(require,module,exports){
-// Generated by CoffeeScript 1.6.3
-(function() {
-  var XMLDTDAttList, _;
-
-  _ = require('lodash-node');
-
-  module.exports = XMLDTDAttList = (function() {
-    function XMLDTDAttList(parent, elementName, attributeName, attributeType, defaultValueType, defaultValue) {
-      this.stringify = parent.stringify;
-      if (elementName == null) {
-        throw new Error("Missing DTD element name");
-      }
-      if (attributeName == null) {
-        throw new Error("Missing DTD attribute name");
-      }
-      if (!attributeType) {
-        throw new Error("Missing DTD attribute type");
-      }
-      if (!defaultValueType) {
-        throw new Error("Missing DTD attribute default");
-      }
-      if (defaultValueType.indexOf('#') !== 0) {
-        defaultValueType = '#' + defaultValueType;
-      }
-      if (!defaultValueType.match(/^(#REQUIRED|#IMPLIED|#FIXED|#DEFAULT)$/)) {
-        throw new Error("Invalid default value type; expected: #REQUIRED, #IMPLIED, #FIXED or #DEFAULT");
-      }
-      if (defaultValue && !defaultValueType.match(/^(#FIXED|#DEFAULT)$/)) {
-        throw new Error("Default value only applies to #FIXED or #DEFAULT");
-      }
-      this.elementName = this.stringify.eleName(elementName);
-      this.attributeName = this.stringify.attName(attributeName);
-      this.attributeType = this.stringify.dtdAttType(attributeType);
-      this.defaultValue = this.stringify.dtdAttDefault(defaultValue);
-      this.defaultValueType = defaultValueType;
-    }
-
-    XMLDTDAttList.prototype.clone = function() {
-      return _.create(XMLDTDAttList.prototype, this);
-    };
-
-    XMLDTDAttList.prototype.toString = function(options, level) {
-      var indent, newline, pretty, r, space;
-      pretty = (options != null ? options.pretty : void 0) || false;
-      indent = (options != null ? options.indent : void 0) || '  ';
-      newline = (options != null ? options.newline : void 0) || '\n';
-      level || (level = 0);
-      space = new Array(level + 1).join(indent);
-      r = '';
-      if (pretty) {
-        r += space;
-      }
-      r += '<!ATTLIST ' + this.elementName + ' ' + this.attributeName + ' ' + this.attributeType;
-      if (this.defaultValueType !== '#DEFAULT') {
-        r += ' ' + this.defaultValueType;
-      }
-      if (this.defaultValue) {
-        r += ' "' + this.defaultValue + '"';
-      }
-      r += '>';
-      if (pretty) {
-        r += newline;
-      }
-      return r;
-    };
-
-    return XMLDTDAttList;
-
-  })();
-
-}).call(this);
-
-},{"lodash-node":95}],10:[function(require,module,exports){
-// Generated by CoffeeScript 1.6.3
-(function() {
-  var XMLDTDElement, _;
-
-  _ = require('lodash-node');
-
-  module.exports = XMLDTDElement = (function() {
-    function XMLDTDElement(parent, name, value) {
-      this.stringify = parent.stringify;
-      if (name == null) {
-        throw new Error("Missing DTD element name");
-      }
-      if (!value) {
-        value = '(#PCDATA)';
-      }
-      if (_.isArray(value)) {
-        value = '(' + value.join(',') + ')';
-      }
-      this.name = this.stringify.eleName(name);
-      this.value = this.stringify.dtdElementValue(value);
-    }
-
-    XMLDTDElement.prototype.clone = function() {
-      return _.create(XMLDTDElement.prototype, this);
-    };
-
-    XMLDTDElement.prototype.toString = function(options, level) {
-      var indent, newline, pretty, r, space;
-      pretty = (options != null ? options.pretty : void 0) || false;
-      indent = (options != null ? options.indent : void 0) || '  ';
-      newline = (options != null ? options.newline : void 0) || '\n';
-      level || (level = 0);
-      space = new Array(level + 1).join(indent);
-      r = '';
-      if (pretty) {
-        r += space;
-      }
-      r += '<!ELEMENT ' + this.name + ' ' + this.value + '>';
-      if (pretty) {
-        r += newline;
-      }
-      return r;
-    };
-
-    return XMLDTDElement;
-
-  })();
-
-}).call(this);
-
-},{"lodash-node":95}],11:[function(require,module,exports){
-// Generated by CoffeeScript 1.6.3
-(function() {
-  var XMLDTDEntity, _;
-
-  _ = require('lodash-node');
-
-  module.exports = XMLDTDEntity = (function() {
-    function XMLDTDEntity(parent, pe, name, value) {
-      this.stringify = parent.stringify;
-      if (name == null) {
-        throw new Error("Missing entity name");
-      }
-      if (value == null) {
-        throw new Error("Missing entity value");
-      }
-      this.pe = !!pe;
-      this.name = this.stringify.eleName(name);
-      if (!_.isObject(value)) {
-        this.value = this.stringify.dtdEntityValue(value);
-      } else {
-        if (!value.pubID && !value.sysID) {
-          throw new Error("Public and/or system identifiers are required for an external entity");
-        }
-        if (value.pubID && !value.sysID) {
-          throw new Error("System identifier is required for a public external entity");
-        }
-        if (value.pubID != null) {
-          this.pubID = this.stringify.dtdPubID(value.pubID);
-        }
-        if (value.sysID != null) {
-          this.sysID = this.stringify.dtdSysID(value.sysID);
-        }
-        if (value.nData != null) {
-          this.nData = this.stringify.dtdNData(value.nData);
-        }
-        if (this.pe && this.nData) {
-          throw new Error("Notation declaration is not allowed in a parameter entity");
-        }
-      }
-    }
-
-    XMLDTDEntity.prototype.clone = function() {
-      return _.create(XMLDTDEntity.prototype, this);
-    };
-
-    XMLDTDEntity.prototype.toString = function(options, level) {
-      var indent, newline, pretty, r, space;
-      pretty = (options != null ? options.pretty : void 0) || false;
-      indent = (options != null ? options.indent : void 0) || '  ';
-      newline = (options != null ? options.newline : void 0) || '\n';
-      level || (level = 0);
-      space = new Array(level + 1).join(indent);
-      r = '';
-      if (pretty) {
-        r += space;
-      }
-      r += '<!ENTITY';
-      if (this.pe) {
-        r += ' %';
-      }
-      r += ' ' + this.name;
-      if (this.value) {
-        r += ' "' + this.value + '"';
-      } else {
-        if (this.pubID && this.sysID) {
-          r += ' PUBLIC "' + this.pubID + '" "' + this.sysID + '"';
-        } else if (this.sysID) {
-          r += ' SYSTEM "' + this.sysID + '"';
-        }
-        if (this.nData) {
-          r += ' NDATA ' + this.nData;
-        }
-      }
-      r += '>';
-      if (pretty) {
-        r += newline;
-      }
-      return r;
-    };
-
-    return XMLDTDEntity;
-
-  })();
-
-}).call(this);
-
-},{"lodash-node":95}],12:[function(require,module,exports){
-// Generated by CoffeeScript 1.6.3
-(function() {
-  var XMLDTDNotation, _;
-
-  _ = require('lodash-node');
-
-  module.exports = XMLDTDNotation = (function() {
-    function XMLDTDNotation(parent, name, value) {
-      this.stringify = parent.stringify;
-      if (name == null) {
-        throw new Error("Missing notation name");
-      }
-      if (!value.pubID && !value.sysID) {
-        throw new Error("Public or system identifiers are required for an external entity");
-      }
-      this.name = this.stringify.eleName(name);
-      if (value.pubID != null) {
-        this.pubID = this.stringify.dtdPubID(value.pubID);
-      }
-      if (value.sysID != null) {
-        this.sysID = this.stringify.dtdSysID(value.sysID);
-      }
-    }
-
-    XMLDTDNotation.prototype.clone = function() {
-      return _.create(XMLDTDNotation.prototype, this);
-    };
-
-    XMLDTDNotation.prototype.toString = function(options, level) {
-      var indent, newline, pretty, r, space;
-      pretty = (options != null ? options.pretty : void 0) || false;
-      indent = (options != null ? options.indent : void 0) || '  ';
-      newline = (options != null ? options.newline : void 0) || '\n';
-      level || (level = 0);
-      space = new Array(level + 1).join(indent);
-      r = '';
-      if (pretty) {
-        r += space;
-      }
-      r += '<!NOTATION ' + this.name;
-      if (this.pubID && this.sysID) {
-        r += ' PUBLIC "' + this.pubID + '" "' + this.sysID + '"';
-      } else if (this.pubID) {
-        r += ' PUBLIC "' + this.pubID + '"';
-      } else if (this.sysID) {
-        r += ' SYSTEM "' + this.sysID + '"';
-      }
-      r += '>';
-      if (pretty) {
-        r += newline;
-      }
-      return r;
-    };
-
-    return XMLDTDNotation;
-
-  })();
-
-}).call(this);
-
-},{"lodash-node":95}],13:[function(require,module,exports){
-// Generated by CoffeeScript 1.6.3
-(function() {
-  var XMLDeclaration, XMLNode, _,
-    __hasProp = {}.hasOwnProperty,
-    __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
-
-  _ = require('lodash-node');
-
-  XMLNode = require('./XMLNode');
-
-  module.exports = XMLDeclaration = (function(_super) {
-    __extends(XMLDeclaration, _super);
-
-    function XMLDeclaration(parent, version, encoding, standalone) {
-      var _ref;
-      XMLDeclaration.__super__.constructor.call(this, parent);
-      if (_.isObject(version)) {
-        _ref = version, version = _ref.version, encoding = _ref.encoding, standalone = _ref.standalone;
-      }
-      if (!version) {
-        version = '1.0';
-      }
-      if (version != null) {
-        this.version = this.stringify.xmlVersion(version);
-      }
-      if (encoding != null) {
-        this.encoding = this.stringify.xmlEncoding(encoding);
-      }
-      if (standalone != null) {
-        this.standalone = this.stringify.xmlStandalone(standalone);
-      }
-    }
-
-    XMLDeclaration.prototype.clone = function() {
-      return _.create(XMLDeclaration.prototype, this);
-    };
-
-    XMLDeclaration.prototype.toString = function(options, level) {
-      var indent, newline, pretty, r, space;
-      pretty = (options != null ? options.pretty : void 0) || false;
-      indent = (options != null ? options.indent : void 0) || '  ';
-      newline = (options != null ? options.newline : void 0) || '\n';
-      level || (level = 0);
-      space = new Array(level + 1).join(indent);
-      r = '';
-      if (pretty) {
-        r += space;
-      }
-      r += '<?xml';
-      if (this.version != null) {
-        r += ' version="' + this.version + '"';
-      }
-      if (this.encoding != null) {
-        r += ' encoding="' + this.encoding + '"';
-      }
-      if (this.standalone != null) {
-        r += ' standalone="' + this.standalone + '"';
-      }
-      r += '?>';
-      if (pretty) {
-        r += newline;
-      }
-      return r;
-    };
-
-    return XMLDeclaration;
-
-  })(XMLNode);
-
-}).call(this);
-
-},{"./XMLNode":16,"lodash-node":95}],14:[function(require,module,exports){
-// Generated by CoffeeScript 1.6.3
-(function() {
-  var XMLDocType, _;
-
-  _ = require('lodash-node');
-
-  module.exports = XMLDocType = (function() {
-    function XMLDocType(parent, pubID, sysID) {
-      var _ref, _ref1;
-      this.documentObject = parent;
-      this.stringify = this.documentObject.stringify;
-      this.children = [];
-      if (_.isObject(pubID)) {
-        _ref = pubID, pubID = _ref.pubID, sysID = _ref.sysID;
-      }
-      if (sysID == null) {
-        _ref1 = [pubID, sysID], sysID = _ref1[0], pubID = _ref1[1];
-      }
-      if (pubID != null) {
-        this.pubID = this.stringify.dtdPubID(pubID);
-      }
-      if (sysID != null) {
-        this.sysID = this.stringify.dtdSysID(sysID);
-      }
-    }
-
-    XMLDocType.prototype.clone = function() {
-      return _.create(XMLDocType.prototype, this);
-    };
-
-    XMLDocType.prototype.element = function(name, value) {
-      var XMLDTDElement, child;
-      XMLDTDElement = require('./XMLDTDElement');
-      child = new XMLDTDElement(this, name, value);
-      this.children.push(child);
-      return this;
-    };
-
-    XMLDocType.prototype.attList = function(elementName, attributeName, attributeType, defaultValueType, defaultValue) {
-      var XMLDTDAttList, child;
-      XMLDTDAttList = require('./XMLDTDAttList');
-      child = new XMLDTDAttList(this, elementName, attributeName, attributeType, defaultValueType, defaultValue);
-      this.children.push(child);
-      return this;
-    };
-
-    XMLDocType.prototype.entity = function(name, value) {
-      var XMLDTDEntity, child;
-      XMLDTDEntity = require('./XMLDTDEntity');
-      child = new XMLDTDEntity(this, false, name, value);
-      this.children.push(child);
-      return this;
-    };
-
-    XMLDocType.prototype.pEntity = function(name, value) {
-      var XMLDTDEntity, child;
-      XMLDTDEntity = require('./XMLDTDEntity');
-      child = new XMLDTDEntity(this, true, name, value);
-      this.children.push(child);
-      return this;
-    };
-
-    XMLDocType.prototype.notation = function(name, value) {
-      var XMLDTDNotation, child;
-      XMLDTDNotation = require('./XMLDTDNotation');
-      child = new XMLDTDNotation(this, name, value);
-      this.children.push(child);
-      return this;
-    };
-
-    XMLDocType.prototype.cdata = function(value) {
-      var XMLCData, child;
-      XMLCData = require('./XMLCData');
-      child = new XMLCData(this, value);
-      this.children.push(child);
-      return this;
-    };
-
-    XMLDocType.prototype.comment = function(value) {
-      var XMLComment, child;
-      XMLComment = require('./XMLComment');
-      child = new XMLComment(this, value);
-      this.children.push(child);
-      return this;
-    };
-
-    XMLDocType.prototype.instruction = function(target, value) {
-      var XMLProcessingInstruction, child;
-      XMLProcessingInstruction = require('./XMLProcessingInstruction');
-      child = new XMLProcessingInstruction(this, target, value);
-      this.children.push(child);
-      return this;
-    };
-
-    XMLDocType.prototype.root = function() {
-      return this.documentObject.root();
-    };
-
-    XMLDocType.prototype.document = function() {
-      return this.documentObject;
-    };
-
-    XMLDocType.prototype.toString = function(options, level) {
-      var child, indent, newline, pretty, r, space, _i, _len, _ref;
-      pretty = (options != null ? options.pretty : void 0) || false;
-      indent = (options != null ? options.indent : void 0) || '  ';
-      newline = (options != null ? options.newline : void 0) || '\n';
-      level || (level = 0);
-      space = new Array(level + 1).join(indent);
-      r = '';
-      if (pretty) {
-        r += space;
-      }
-      r += '<!DOCTYPE ' + this.root().name;
-      if (this.pubID && this.sysID) {
-        r += ' PUBLIC "' + this.pubID + '" "' + this.sysID + '"';
-      } else if (this.sysID) {
-        r += ' SYSTEM "' + this.sysID + '"';
-      }
-      if (this.children.length > 0) {
-        r += ' [';
-        if (pretty) {
-          r += newline;
-        }
-        _ref = this.children;
-        for (_i = 0, _len = _ref.length; _i < _len; _i++) {
-          child = _ref[_i];
-          r += child.toString(options, level + 1);
-        }
-        r += ']';
-      }
-      r += '>';
-      if (pretty) {
-        r += newline;
-      }
-      return r;
-    };
-
-    XMLDocType.prototype.ele = function(name, value) {
-      return this.element(name, value);
-    };
-
-    XMLDocType.prototype.att = function(elementName, attributeName, attributeType, defaultValueType, defaultValue) {
-      return this.attList(elementName, attributeName, attributeType, defaultValueType, defaultValue);
-    };
-
-    XMLDocType.prototype.ent = function(name, value) {
-      return this.entity(name, value);
-    };
-
-    XMLDocType.prototype.pent = function(name, value) {
-      return this.pEntity(name, value);
-    };
-
-    XMLDocType.prototype.not = function(name, value) {
-      return this.notation(name, value);
-    };
-
-    XMLDocType.prototype.dat = function(value) {
-      return this.cdata(value);
-    };
-
-    XMLDocType.prototype.com = function(value) {
-      return this.comment(value);
-    };
-
-    XMLDocType.prototype.ins = function(target, value) {
-      return this.instruction(target, value);
-    };
-
-    XMLDocType.prototype.up = function() {
-      return this.root();
-    };
-
-    XMLDocType.prototype.doc = function() {
-      return this.document();
-    };
-
-    return XMLDocType;
-
-  })();
-
-}).call(this);
-
-},{"./XMLCData":7,"./XMLComment":8,"./XMLDTDAttList":9,"./XMLDTDElement":10,"./XMLDTDEntity":11,"./XMLDTDNotation":12,"./XMLProcessingInstruction":17,"lodash-node":95}],15:[function(require,module,exports){
-// Generated by CoffeeScript 1.6.3
-(function() {
-  var XMLAttribute, XMLElement, XMLNode, XMLProcessingInstruction, _,
-    __hasProp = {}.hasOwnProperty,
-    __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
-
-  _ = require('lodash-node');
-
-  XMLNode = require('./XMLNode');
-
-  XMLAttribute = require('./XMLAttribute');
-
-  XMLProcessingInstruction = require('./XMLProcessingInstruction');
-
-  module.exports = XMLElement = (function(_super) {
-    __extends(XMLElement, _super);
-
-    function XMLElement(parent, name, attributes) {
-      XMLElement.__super__.constructor.call(this, parent);
-      if (name == null) {
-        throw new Error("Missing element name");
-      }
-      this.name = this.stringify.eleName(name);
-      this.children = [];
-      this.instructions = [];
-      this.attributes = {};
-      if (attributes != null) {
-        this.attribute(attributes);
-      }
-    }
-
-    XMLElement.prototype.clone = function() {
-      var att, attName, clonedSelf, pi, _i, _len, _ref, _ref1;
-      clonedSelf = _.create(XMLElement.prototype, this);
-      clonedSelf.attributes = {};
-      _ref = this.attributes;
-      for (attName in _ref) {
-        if (!__hasProp.call(_ref, attName)) continue;
-        att = _ref[attName];
-        clonedSelf.attributes[attName] = att.clone();
-      }
-      clonedSelf.instructions = [];
-      _ref1 = this.instructions;
-      for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
-        pi = _ref1[_i];
-        clonedSelf.instructions.push(pi.clone());
-      }
-      clonedSelf.children = [];
-      this.children.forEach(function(child) {
-        var clonedChild;
-        clonedChild = child.clone();
-        clonedChild.parent = clonedSelf;
-        return clonedSelf.children.push(clonedChild);
-      });
-      return clonedSelf;
-    };
-
-    XMLElement.prototype.attribute = function(name, value) {
-      var attName, attValue;
-      if (_.isObject(name)) {
-        for (attName in name) {
-          if (!__hasProp.call(name, attName)) continue;
-          attValue = name[attName];
-          this.attribute(attName, attValue);
-        }
-      } else {
-        if (_.isFunction(value)) {
-          value = value.apply();
-        }
-        if (!this.options.skipNullAttributes || (value != null)) {
-          this.attributes[name] = new XMLAttribute(this, name, value);
-        }
-      }
-      return this;
-    };
-
-    XMLElement.prototype.removeAttribute = function(name) {
-      var attName, _i, _len;
-      if (name == null) {
-        throw new Error("Missing attribute name");
-      }
-      if (_.isArray(name)) {
-        for (_i = 0, _len = name.length; _i < _len; _i++) {
-          attName = name[_i];
-          delete this.attributes[attName];
-        }
-      } else {
-        delete this.attributes[name];
-      }
-      return this;
-    };
-
-    XMLElement.prototype.instruction = function(target, value) {
-      var insTarget, insValue, instruction, _i, _len;
-      if (_.isArray(target)) {
-        for (_i = 0, _len = target.length; _i < _len; _i++) {
-          insTarget = target[_i];
-          this.instruction(insTarget);
-        }
-      } else if (_.isObject(target)) {
-        for (insTarget in target) {
-          if (!__hasProp.call(target, insTarget)) continue;
-          insValue = target[insTarget];
-          this.instruction(insTarget, insValue);
-        }
-      } else {
-        if (_.isFunction(value)) {
-          value = value.apply();
-        }
-        instruction = new XMLProcessingInstruction(this, target, value);
-        this.instructions.push(instruction);
-      }
-      return this;
-    };
-
-    XMLElement.prototype.toString = function(options, level) {
-      var att, child, indent, instruction, name, newline, pretty, r, space, _i, _j, _len, _len1, _ref, _ref1, _ref2;
-      pretty = (options != null ? options.pretty : void 0) || false;
-      indent = (options != null ? options.indent : void 0) || '  ';
-      newline = (options != null ? options.newline : void 0) || '\n';
-      level || (level = 0);
-      space = new Array(level + 1).join(indent);
-      r = '';
-      _ref = this.instructions;
-      for (_i = 0, _len = _ref.length; _i < _len; _i++) {
-        instruction = _ref[_i];
-        r += instruction.toString(options, level + 1);
-      }
-      if (pretty) {
-        r += space;
-      }
-      r += '<' + this.name;
-      _ref1 = this.attributes;
-      for (name in _ref1) {
-        if (!__hasProp.call(_ref1, name)) continue;
-        att = _ref1[name];
-        r += att.toString(options);
-      }
-      if (this.children.length === 0) {
-        r += '/>';
-        if (pretty) {
-          r += newline;
-        }
-      } else if (pretty && this.children.length === 1 && (this.children[0].value != null)) {
-        r += '>';
-        r += this.children[0].value;
-        r += '</' + this.name + '>';
-        r += newline;
-      } else {
-        r += '>';
-        if (pretty) {
-          r += newline;
-        }
-        _ref2 = this.children;
-        for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) {
-          child = _ref2[_j];
-          r += child.toString(options, level + 1);
-        }
-        if (pretty) {
-          r += space;
-        }
-        r += '</' + this.name + '>';
-        if (pretty) {
-          r += newline;
-        }
-      }
-      return r;
-    };
-
-    XMLElement.prototype.att = function(name, value) {
-      return this.attribute(name, value);
-    };
-
-    XMLElement.prototype.ins = function(target, value) {
-      return this.instruction(target, value);
-    };
-
-    XMLElement.prototype.a = function(name, value) {
-      return this.attribute(name, value);
-    };
-
-    XMLElement.prototype.i = function(target, value) {
-      return this.instruction(target, value);
-    };
-
-    return XMLElement;
-
-  })(XMLNode);
-
-}).call(this);
-
-},{"./XMLAttribute":5,"./XMLNode":16,"./XMLProcessingInstruction":17,"lodash-node":95}],16:[function(require,module,exports){
-// Generated by CoffeeScript 1.6.3
-(function() {
-  var XMLNode, _,
-    __hasProp = {}.hasOwnProperty;
-
-  _ = require('lodash-node');
-
-  module.exports = XMLNode = (function() {
-    function XMLNode(parent) {
-      this.parent = parent;
-      this.options = this.parent.options;
-      this.stringify = this.parent.stringify;
-    }
-
-    XMLNode.prototype.clone = function() {
-      throw new Error("Cannot clone generic XMLNode");
-    };
-
-    XMLNode.prototype.element = function(name, attributes, text) {
-      var item, key, lastChild, val, _i, _len, _ref;
-      lastChild = null;
-      if (attributes == null) {
-        attributes = {};
-      }
-      if (!_.isObject(attributes)) {
-        _ref = [attributes, text], text = _ref[0], attributes = _ref[1];
-      }
-      if (_.isArray(name)) {
-        for (_i = 0, _len = name.length; _i < _len; _i++) {
-          item = name[_i];
-          lastChild = this.element(item);
-        }
-      } else if (_.isFunction(name)) {
-        lastChild = this.element(name.apply());
-      } else if (_.isObject(name)) {
-        for (key in name) {
-          if (!__hasProp.call(name, key)) continue;
-          val = name[key];
-          if (!(val != null)) {
-            continue;
-          }
-          if (_.isFunction(val)) {
-            val = val.apply();
-          }
-          if (!this.options.ignoreDecorators && this.stringify.convertAttKey && key.indexOf(this.stringify.convertAttKey) === 0) {
-            lastChild = this.attribute(key.substr(this.stringify.convertAttKey.length), val);
-          } else if (!this.options.ignoreDecorators && this.stringify.convertPIKey && key.indexOf(this.stringify.convertPIKey) === 0) {
-            lastChild = this.instruction(key.substr(this.stringify.convertPIKey.length), val);
-          } else if (_.isObject(val)) {
-            if (!this.options.ignoreDecorators && this.stringify.convertListKey && key.indexOf(this.stringify.convertListKey) === 0 && _.isArray(val)) {
-              lastChild = this.element(val);
-            } else {
-              lastChild = this.element(key);
-              lastChild.element(val);
-            }
-          } else {
-            lastChild = this.element(key, val);
-          }
-        }
-      } else {
-        if (!this.options.ignoreDecorators && this.stringify.convertTextKey && name.indexOf(this.stringify.convertTextKey) === 0) {
-          lastChild = this.text(text);
-        } else if (!this.options.ignoreDecorators && this.stringify.convertCDataKey && name.indexOf(this.stringify.convertCDataKey) === 0) {
-          lastChild = this.cdata(text);
-        } else if (!this.options.ignoreDecorators && this.stringify.convertCommentKey && name.indexOf(this.stringify.convertCommentKey) === 0) {
-          lastChild = this.comment(text);
-        } else if (!this.options.ignoreDecorators && this.stringify.convertRawKey && name.indexOf(this.stringify.convertRawKey) === 0) {
-          lastChild = this.raw(text);
-        } else {
-          lastChild = this.node(name, attributes, text);
-        }
-      }
-      if (lastChild == null) {
-        throw new Error("Could not create any elements with: " + name);
-      }
-      return lastChild;
-    };
-
-    XMLNode.prototype.insertBefore = function(name, attributes, text) {
-      var child, i, removed;
-      if (this.isRoot) {
-        throw new Error("Cannot insert elements at root level");
-      }
-      i = this.parent.children.indexOf(this);
-      removed = this.parent.children.splice(i);
-      child = this.parent.element(name, attributes, text);
-      Array.prototype.push.apply(this.parent.children, removed);
-      return child;
-    };
-
-    XMLNode.prototype.insertAfter = function(name, attributes, text) {
-      var child, i, removed;
-      if (this.isRoot) {
-        throw new Error("Cannot insert elements at root level");
-      }
-      i = this.parent.children.indexOf(this);
-      removed = this.parent.children.splice(i + 1);
-      child = this.parent.element(name, attributes, text);
-      Array.prototype.push.apply(this.parent.children, removed);
-      return child;
-    };
-
-    XMLNode.prototype.remove = function() {
-      var i, _ref;
-      if (this.isRoot) {
-        throw new Error("Cannot remove the root element");
-      }
-      i = this.parent.children.indexOf(this);
-      [].splice.apply(this.parent.children, [i, i - i + 1].concat(_ref = [])), _ref;
-      return this.parent;
-    };
-
-    XMLNode.prototype.node = function(name, attributes, text) {
-      var XMLElement, child, _ref;
-      if (attributes == null) {
-        attributes = {};
-      }
-      if (!_.isObject(attributes)) {
-        _ref = [attributes, text], text = _ref[0], attributes = _ref[1];
-      }
-      XMLElement = require('./XMLElement');
-      child = new XMLElement(this, name, attributes);
-      if (text != null) {
-        child.text(text);
-      }
-      this.children.push(child);
-      return child;
-    };
-
-    XMLNode.prototype.text = function(value) {
-      var XMLText, child;
-      XMLText = require('./XMLText');
-      child = new XMLText(this, value);
-      this.children.push(child);
-      return this;
-    };
-
-    XMLNode.prototype.cdata = function(value) {
-      var XMLCData, child;
-      XMLCData = require('./XMLCData');
-      child = new XMLCData(this, value);
-      this.children.push(child);
-      return this;
-    };
-
-    XMLNode.prototype.comment = function(value) {
-      var XMLComment, child;
-      XMLComment = require('./XMLComment');
-      child = new XMLComment(this, value);
-      this.children.push(child);
-      return this;
-    };
-
-    XMLNode.prototype.raw = function(value) {
-      var XMLRaw, child;
-      XMLRaw = require('./XMLRaw');
-      child = new XMLRaw(this, value);
-      this.children.push(child);
-      return this;
-    };
-
-    XMLNode.prototype.declaration = function(version, encoding, standalone) {
-      var XMLDeclaration, doc, xmldec;
-      doc = this.document();
-      XMLDeclaration = require('./XMLDeclaration');
-      xmldec = new XMLDeclaration(doc, version, encoding, standalone);
-      doc.xmldec = xmldec;
-      return doc.root();
-    };
-
-    XMLNode.prototype.doctype = function(pubID, sysID) {
-      var XMLDocType, doc, doctype;
-      doc = this.document();
-      XMLDocType = require('./XMLDocType');
-      doctype = new XMLDocType(doc, pubID, sysID);
-      doc.doctype = doctype;
-      return doctype;
-    };
-
-    XMLNode.prototype.up = function() {
-      if (this.isRoot) {
-        throw new Error("The root node has no parent. Use doc() if you need to get the document object.");
-      }
-      return this.parent;
-    };
-
-    XMLNode.prototype.root = function() {
-      var child;
-      if (this.isRoot) {
-        return this;
-      }
-      child = this.parent;
-      while (!child.isRoot) {
-        child = child.parent;
-      }
-      return child;
-    };
-
-    XMLNode.prototype.document = function() {
-      return this.root().documentObject;
-    };
-
-    XMLNode.prototype.end = function(options) {
-      return this.document().toString(options);
-    };
-
-    XMLNode.prototype.prev = function() {
-      var i;
-      if (this.isRoot) {
-        throw new Error("Root node has no siblings");
-      }
-      i = this.parent.children.indexOf(this);
-      if (i < 1) {
-        throw new Error("Already at the first node");
-      }
-      return this.parent.children[i - 1];
-    };
-
-    XMLNode.prototype.next = function() {
-      var i;
-      if (this.isRoot) {
-        throw new Error("Root node has no siblings");
-      }
-      i = this.parent.children.indexOf(this);
-      if (i === -1 || i === this.parent.children.length - 1) {
-        throw new Error("Already at the last node");
-      }
-      return this.parent.children[i + 1];
-    };
-
-    XMLNode.prototype.importXMLBuilder = function(xmlbuilder) {
-      var clonedRoot;
-      clonedRoot = xmlbuilder.root().clone();
-      clonedRoot.parent = this;
-      clonedRoot.isRoot = false;
-      this.children.push(clonedRoot);
-      return this;
-    };
-
-    XMLNode.prototype.ele = function(name, attributes, text) {
-      return this.element(name, attributes, text);
-    };
-
-    XMLNode.prototype.nod = function(name, attributes, text) {
-      return this.node(name, attributes, text);
-    };
-
-    XMLNode.prototype.txt = function(value) {
-      return this.text(value);
-    };
-
-    XMLNode.prototype.dat = function(value) {
-      return this.cdata(value);
-    };
-
-    XMLNode.prototype.com = function(value) {
-      return this.comment(value);
-    };
-
-    XMLNode.prototype.doc = function() {
-      return this.document();
-    };
-
-    XMLNode.prototype.dec = function(version, encoding, standalone) {
-      return this.declaration(version, encoding, standalone);
-    };
-
-    XMLNode.prototype.dtd = function(pubID, sysID) {
-      return this.doctype(pubID, sysID);
-    };
-
-    XMLNode.prototype.e = function(name, attributes, text) {
-      return this.element(name, attributes, text);
-    };
-
-    XMLNode.prototype.n = function(name, attributes, text) {
-      return this.node(name, attributes, text);
-    };
-
-    XMLNode.prototype.t = function(value) {
-      return this.text(value);
-    };
-
-    XMLNode.prototype.d = function(value) {
-      return this.cdata(value);
-    };
-
-    XMLNode.prototype.c = function(value) {
-      return this.comment(value);
-    };
-
-    XMLNode.prototype.r = function(value) {
-      return this.raw(value);
-    };
-
-    XMLNode.prototype.u = function() {
-      return this.up();
-    };
-
-    return XMLNode;
-
-  })();
-
-}).call(this);
-
-},{"./XMLCData":7,"./XMLComment":8,"./XMLDeclaration":13,"./XMLDocType":14,"./XMLElement":15,"./XMLRaw":18,"./XMLText":20,"lodash-node":95}],17:[function(require,module,exports){
-// Generated by CoffeeScript 1.6.3
-(function() {
-  var XMLProcessingInstruction, _;
-
-  _ = require('lodash-node');
-
-  module.exports = XMLProcessingInstruction = (function() {
-    function XMLProcessingInstruction(parent, target, value) {
-      this.stringify = parent.stringify;
-      if (target == null) {
-        throw new Error("Missing instruction target");
-      }
-      this.target = this.stringify.insTarget(target);
-      if (value) {
-        this.value = this.stringify.insValue(value);
-      }
-    }
-
-    XMLProcessingInstruction.prototype.clone = function() {
-      return _.create(XMLProcessingInstruction.prototype, this);
-    };
-
-    XMLProcessingInstruction.prototype.toString = function(options, level) {
-      var indent, newline, pretty, r, space;
-      pretty = (options != null ? options.pretty : void 0) || false;
-      indent = (options != null ? options.indent : void 0) || '  ';
-      newline = (options != null ? options.newline : void 0) || '\n';
-      level || (level = 0);
-      space = new Array(level + 1).join(indent);
-      r = '';
-      if (pretty) {
-        r += space;
-      }
-      r += '<?';
-      r += this.target;
-      if (this.value) {
-        r += ' ' + this.value;
-      }
-      r += '?>';
-      if (pretty) {
-        r += newline;
-      }
-      return r;
-    };
-
-    return XMLProcessingInstruction;
-
-  })();
-
-}).call(this);
-
-},{"lodash-node":95}],18:[function(require,module,exports){
-// Generated by CoffeeScript 1.6.3
-(function() {
-  var XMLNode, XMLRaw, _,
-    __hasProp = {}.hasOwnProperty,
-    __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
-
-  _ = require('lodash-node');
-
-  XMLNode = require('./XMLNode');
-
-  module.exports = XMLRaw = (function(_super) {
-    __extends(XMLRaw, _super);
-
-    function XMLRaw(parent, text) {
-      XMLRaw.__super__.constructor.call(this, parent);
-      if (text == null) {
-        throw new Error("Missing raw text");
-      }
-      this.value = this.stringify.raw(text);
-    }
-
-    XMLRaw.prototype.clone = function() {
-      return _.create(XMLRaw.prototype, this);
-    };
-
-    XMLRaw.prototype.toString = function(options, level) {
-      var indent, newline, pretty, r, space;
-      pretty = (options != null ? options.pretty : void 0) || false;
-      indent = (options != null ? options.indent : void 0) || '  ';
-      newline = (options != null ? options.newline : void 0) || '\n';
-      level || (level = 0);
-      space = new Array(level + 1).join(indent);
-      r = '';
-      if (pretty) {
-        r += space;
-      }
-      r += this.value;
-      if (pretty) {
-        r += newline;
-      }
-      return r;
-    };
-
-    return XMLRaw;
-
-  })(XMLNode);
-
-}).call(this);
-
-},{"./XMLNode":16,"lodash-node":95}],19:[function(require,module,exports){
-// Generated by CoffeeScript 1.6.3
-(function() {
-  var XMLStringifier,
-    __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },
-    __hasProp = {}.hasOwnProperty;
-
-  module.exports = XMLStringifier = (function() {
-    function XMLStringifier(options) {
-      this.assertLegalChar = __bind(this.assertLegalChar, this);
-      var key, value, _ref;
-      this.allowSurrogateChars = options != null ? options.allowSurrogateChars : void 0;
-      _ref = (options != null ? options.stringify : void 0) || {};
-      for (key in _ref) {
-        if (!__hasProp.call(_ref, key)) continue;
-        value = _ref[key];
-        this[key] = value;
-      }
-    }
-
-    XMLStringifier.prototype.eleName = function(val) {
-      val = '' + val || '';
-      return this.assertLegalChar(val);
-    };
-
-    XMLStringifier.prototype.eleText = function(val) {
-      val = '' + val || '';
-      return this.assertLegalChar(this.escape(val));
-    };
-
-    XMLStringifier.prototype.cdata = function(val) {
-      val = '' + val || '';
-      if (val.match(/]]>/)) {
-        throw new Error("Invalid CDATA text: " + val);
-      }
-      return this.assertLegalChar(val);
-    };
-
-    XMLStringifier.prototype.comment = function(val) {
-      val = '' + val || '';
-      if (val.match(/--/)) {
-        throw new Error("Comment text cannot contain double-hypen: " + val);
-      }
-      return this.assertLegalChar(this.escape(val));
-    };
-
-    XMLStringifier.prototype.raw = function(val) {
-      return '' + val || '';
-    };
-
-    XMLStringifier.prototype.attName = function(val) {
-      return '' + val || '';
-    };
-
-    XMLStringifier.prototype.attValue = function(val) {
-      val = '' + val || '';
-      return this.escape(val);
-    };
-
-    XMLStringifier.prototype.insTarget = function(val) {
-      return '' + val || '';
-    };
-
-    XMLStringifier.prototype.insValue = function(val) {
-      val = '' + val || '';
-      if (val.match(/\?>/)) {
-        throw new Error("Invalid processing instruction value: " + val);
-      }
-      return val;
-    };
-
-    XMLStringifier.prototype.xmlVersion = function(val) {
-      val = '' + val || '';
-      if (!val.match(/1\.[0-9]+/)) {
-        throw new Error("Invalid version number: " + val);
-      }
-      return val;
-    };
-
-    XMLStringifier.prototype.xmlEncoding = function(val) {
-      val = '' + val || '';
-      if (!val.match(/[A-Za-z](?:[A-Za-z0-9._-]|-)*/)) {
-        throw new Error("Invalid encoding: " + options.val);
-      }
-      return val;
-    };
-
-    XMLStringifier.prototype.xmlStandalone = function(val) {
-      if (val) {
-        return "yes";
-      } else {
-        return "no";
-      }
-    };
-
-    XMLStringifier.prototype.dtdPubID = function(val) {
-      return '' + val || '';
-    };
-
-    XMLStringifier.prototype.dtdSysID = function(val) {
-      return '' + val || '';
-    };
-
-    XMLStringifier.prototype.dtdElementValue = function(val) {
-      return '' + val || '';
-    };
-
-    XMLStringifier.prototype.dtdAttType = function(val) {
-      return '' + val || '';
-    };
-
-    XMLStringifier.prototype.dtdAttDefault = function(val) {
-      if (val != null) {
-        return '' + val || '';
-      } else {
-        return val;
-      }
-    };
-
-    XMLStringifier.prototype.dtdEntityValue = function(val) {
-      return '' + val || '';
-    };
-
-    XMLStringifier.prototype.dtdNData = function(val) {
-      return '' + val || '';
-    };
-
-    XMLStringifier.prototype.convertAttKey = '@';
-
-    XMLStringifier.prototype.convertPIKey = '?';
-
-    XMLStringifier.prototype.convertTextKey = '#text';
-
-    XMLStringifier.prototype.convertCDataKey = '#cdata';
-
-    XMLStringifier.prototype.convertCommentKey = '#comment';
-
-    XMLStringifier.prototype.convertRawKey = '#raw';
-
-    XMLStringifier.prototype.convertListKey = '#list';
-
-    XMLStringifier.prototype.assertLegalChar = function(str) {
-      var chars, chr;
-      if (this.allowSurrogateChars) {
-        chars = /[\u0000-\u0008\u000B-\u000C\u000E-\u001F\uFFFE-\uFFFF]/;
-      } else {
-        chars = /[\u0000-\u0008\u000B-\u000C\u000E-\u001F\uD800-\uDFFF\uFFFE-\uFFFF]/;
-      }
-      chr = str.match(chars);
-      if (chr) {
-        throw new Error("Invalid character (" + chr + ") in string: " + str + " at index " + chr.index);
-      }
-      return str;
-    };
-
-    XMLStringifier.prototype.escape = function(str) {
-      return str.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/'/g, '&apos;').replace(/"/g, '&quot;');
-    };
-
-    return XMLStringifier;
-
-  })();
-
-}).call(this);
-
-},{}],20:[function(require,module,exports){
-// Generated by CoffeeScript 1.6.3
-(function() {
-  var XMLNode, XMLText, _,
-    __hasProp = {}.hasOwnProperty,
-    __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
-
-  _ = require('lodash-node');
-
-  XMLNode = require('./XMLNode');
-
-  module.exports = XMLText = (function(_super) {
-    __extends(XMLText, _super);
-
-    function XMLText(parent, text) {
-      this.parent = parent;
-      XMLText.__super__.constructor.call(this, parent);
-      if (text == null) {
-        throw new Error("Missing element text");
-      }
-      this.value = this.stringify.eleText(text);
-    }
-
-    XMLText.prototype.clone = function() {
-      return _.create(XMLText.prototype, this);
-    };
-
-    XMLText.prototype.toString = function(options, level) {
-      var indent, newline, pretty, r, space;
-      pretty = (options != null ? options.pretty : void 0) || false;
-      indent = (options != null ? options.indent : void 0) || '  ';
-      newline = (options != null ? options.newline : void 0) || '\n';
-      level || (level = 0);
-      space = new Array(level + 1).join(indent);
-      r = '';
-      if (pretty) {
-        r += space;
-      }
-      r += this.value;
-      if (pretty) {
-        r += newline;
-      }
-      return r;
-    };
-
-    return XMLText;
-
-  })(XMLNode);
-
-}).call(this);
-
-},{"./XMLNode":16,"lodash-node":95}],21:[function(require,module,exports){
-// Generated by CoffeeScript 1.6.3
-(function() {
-  var XMLBuilder, _;
-
-  _ = require('lodash-node');
-
-  XMLBuilder = require('./XMLBuilder');
-
-  module.exports.create = function(name, xmldec, doctype, options) {
-    options = _.extend({}, xmldec, doctype, options);
-    return new XMLBuilder(name, options).root();
-  };
-
-}).call(this);
-
-},{"./XMLBuilder":6,"lodash-node":95}],22:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-module.exports = {
-  'compact': require('./arrays/compact'),
-  'difference': require('./arrays/difference'),
-  'drop': require('./arrays/rest'),
-  'findIndex': require('./arrays/findIndex'),
-  'findLastIndex': require('./arrays/findLastIndex'),
-  'first': require('./arrays/first'),
-  'flatten': require('./arrays/flatten'),
-  'head': require('./arrays/first'),
-  'indexOf': require('./arrays/indexOf'),
-  'initial': require('./arrays/initial'),
-  'intersection': require('./arrays/intersection'),
-  'last': require('./arrays/last'),
-  'lastIndexOf': require('./arrays/lastIndexOf'),
-  'object': require('./arrays/zipObject'),
-  'pull': require('./arrays/pull'),
-  'range': require('./arrays/range'),
-  'remove': require('./arrays/remove'),
-  'rest': require('./arrays/rest'),
-  'sortedIndex': require('./arrays/sortedIndex'),
-  'tail': require('./arrays/rest'),
-  'take': require('./arrays/first'),
-  'union': require('./arrays/union'),
-  'uniq': require('./arrays/uniq'),
-  'unique': require('./arrays/uniq'),
-  'unzip': require('./arrays/zip'),
-  'without': require('./arrays/without'),
-  'xor': require('./arrays/xor'),
-  'zip': require('./arrays/zip'),
-  'zipObject': require('./arrays/zipObject')
-};
-
-},{"./arrays/compact":23,"./arrays/difference":24,"./arrays/findIndex":25,"./arrays/findLastIndex":26,"./arrays/first":27,"./arrays/flatten":28,"./arrays/indexOf":29,"./arrays/initial":30,"./arrays/intersection":31,"./arrays/last":32,"./arrays/lastIndexOf":33,"./arrays/pull":34,"./arrays/range":35,"./arrays/remove":36,"./arrays/rest":37,"./arrays/sortedIndex":38,"./arrays/union":39,"./arrays/uniq":40,"./arrays/without":41,"./arrays/xor":42,"./arrays/zip":43,"./arrays/zipObject":44}],23:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * Creates an array with all falsey values removed. The values `false`, `null`,
- * `0`, `""`, `undefined`, and `NaN` are all falsey.
- *
- * @static
- * @memberOf _
- * @category Arrays
- * @param {Array} array The array to compact.
- * @returns {Array} Returns a new array of filtered values.
- * @example
- *
- * _.compact([0, 1, false, 2, '', 3]);
- * // => [1, 2, 3]
- */
-function compact(array) {
-  var index = -1,
-      length = array ? array.length : 0,
-      result = [];
-
-  while (++index < length) {
-    var value = array[index];
-    if (value) {
-      result.push(value);
-    }
-  }
-  return result;
-}
-
-module.exports = compact;
-
-},{}],24:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseDifference = require('../internals/baseDifference'),
-    baseFlatten = require('../internals/baseFlatten');
-
-/**
- * Creates an array excluding all values of the provided arrays using strict
- * equality for comparisons, i.e. `===`.
- *
- * @static
- * @memberOf _
- * @category Arrays
- * @param {Array} array The array to process.
- * @param {...Array} [values] The arrays of values to exclude.
- * @returns {Array} Returns a new array of filtered values.
- * @example
- *
- * _.difference([1, 2, 3, 4, 5], [5, 2, 10]);
- * // => [1, 3, 4]
- */
-function difference(array) {
-  return baseDifference(array, baseFlatten(arguments, true, true, 1));
-}
-
-module.exports = difference;
-
-},{"../internals/baseDifference":102,"../internals/baseFlatten":103}],25:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback');
-
-/**
- * This method is like `_.find` except that it returns the index of the first
- * element that passes the callback check, instead of the element itself.
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @category Arrays
- * @param {Array} array The array to search.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {number} Returns the index of the found element, else `-1`.
- * @example
- *
- * var characters = [
- *   { 'name': 'barney',  'age': 36, 'blocked': false },
- *   { 'name': 'fred',    'age': 40, 'blocked': true },
- *   { 'name': 'pebbles', 'age': 1,  'blocked': false }
- * ];
- *
- * _.findIndex(characters, function(chr) {
- *   return chr.age < 20;
- * });
- * // => 2
- *
- * // using "_.where" callback shorthand
- * _.findIndex(characters, { 'age': 36 });
- * // => 0
- *
- * // using "_.pluck" callback shorthand
- * _.findIndex(characters, 'blocked');
- * // => 1
- */
-function findIndex(array, callback, thisArg) {
-  var index = -1,
-      length = array ? array.length : 0;
-
-  callback = createCallback(callback, thisArg, 3);
-  while (++index < length) {
-    if (callback(array[index], index, array)) {
-      return index;
-    }
-  }
-  return -1;
-}
-
-module.exports = findIndex;
-
-},{"../functions/createCallback":84}],26:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback');
-
-/**
- * This method is like `_.findIndex` except that it iterates over elements
- * of a `collection` from right to left.
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @category Arrays
- * @param {Array} array The array to search.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {number} Returns the index of the found element, else `-1`.
- * @example
- *
- * var characters = [
- *   { 'name': 'barney',  'age': 36, 'blocked': true },
- *   { 'name': 'fred',    'age': 40, 'blocked': false },
- *   { 'name': 'pebbles', 'age': 1,  'blocked': true }
- * ];
- *
- * _.findLastIndex(characters, function(chr) {
- *   return chr.age > 30;
- * });
- * // => 1
- *
- * // using "_.where" callback shorthand
- * _.findLastIndex(characters, { 'age': 36 });
- * // => 0
- *
- * // using "_.pluck" callback shorthand
- * _.findLastIndex(characters, 'blocked');
- * // => 2
- */
-function findLastIndex(array, callback, thisArg) {
-  var length = array ? array.length : 0;
-  callback = createCallback(callback, thisArg, 3);
-  while (length--) {
-    if (callback(array[length], length, array)) {
-      return length;
-    }
-  }
-  return -1;
-}
-
-module.exports = findLastIndex;
-
-},{"../functions/createCallback":84}],27:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback'),
-    slice = require('../internals/slice');
-
-/* Native method shortcuts for methods with the same name as other `lodash` methods */
-var nativeMax = Math.max,
-    nativeMin = Math.min;
-
-/**
- * Gets the first element or first `n` elements of an array. If a callback
- * is provided elements at the beginning of the array are returned as long
- * as the callback returns truey. The callback is bound to `thisArg` and
- * invoked with three arguments; (value, index, array).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @alias head, take
- * @category Arrays
- * @param {Array} array The array to query.
- * @param {Function|Object|number|string} [callback] The function called
- *  per element or the number of elements to return. If a property name or
- *  object is provided it will be used to create a "_.pluck" or "_.where"
- *  style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {*} Returns the first element(s) of `array`.
- * @example
- *
- * _.first([1, 2, 3]);
- * // => 1
- *
- * _.first([1, 2, 3], 2);
- * // => [1, 2]
- *
- * _.first([1, 2, 3], function(num) {
- *   return num < 3;
- * });
- * // => [1, 2]
- *
- * var characters = [
- *   { 'name': 'barney',  'blocked': true,  'employer': 'slate' },
- *   { 'name': 'fred',    'blocked': false, 'employer': 'slate' },
- *   { 'name': 'pebbles', 'blocked': true,  'employer': 'na' }
- * ];
- *
- * // using "_.pluck" callback shorthand
- * _.first(characters, 'blocked');
- * // => [{ 'name': 'barney', 'blocked': true, 'employer': 'slate' }]
- *
- * // using "_.where" callback shorthand
- * _.pluck(_.first(characters, { 'employer': 'slate' }), 'name');
- * // => ['barney', 'fred']
- */
-function first(array, callback, thisArg) {
-  var n = 0,
-      length = array ? array.length : 0;
-
-  if (typeof callback != 'number' && callback != null) {
-    var index = -1;
-    callback = createCallback(callback, thisArg, 3);
-    while (++index < length && callback(array[index], index, array)) {
-      n++;
-    }
-  } else {
-    n = callback;
-    if (n == null || thisArg) {
-      return array ? array[0] : undefined;
-    }
-  }
-  return slice(array, 0, nativeMin(nativeMax(0, n), length));
-}
-
-module.exports = first;
-
-},{"../functions/createCallback":84,"../internals/slice":137}],28:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseFlatten = require('../internals/baseFlatten'),
-    map = require('../collections/map');
-
-/**
- * Flattens a nested array (the nesting can be to any depth). If `isShallow`
- * is truey, the array will only be flattened a single level. If a callback
- * is provided each element of the array is passed through the callback before
- * flattening. The callback is bound to `thisArg` and invoked with three
- * arguments; (value, index, array).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @category Arrays
- * @param {Array} array The array to flatten.
- * @param {boolean} [isShallow=false] A flag to restrict flattening to a single level.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Array} Returns a new flattened array.
- * @example
- *
- * _.flatten([1, [2], [3, [[4]]]]);
- * // => [1, 2, 3, 4];
- *
- * _.flatten([1, [2], [3, [[4]]]], true);
- * // => [1, 2, 3, [[4]]];
- *
- * var characters = [
- *   { 'name': 'barney', 'age': 30, 'pets': ['hoppy'] },
- *   { 'name': 'fred',   'age': 40, 'pets': ['baby puss', 'dino'] }
- * ];
- *
- * // using "_.pluck" callback shorthand
- * _.flatten(characters, 'pets');
- * // => ['hoppy', 'baby puss', 'dino']
- */
-function flatten(array, isShallow, callback, thisArg) {
-  // juggle arguments
-  if (typeof isShallow != 'boolean' && isShallow != null) {
-    thisArg = callback;
-    callback = (typeof isShallow != 'function' && thisArg && thisArg[isShallow] === array) ? null : isShallow;
-    isShallow = false;
-  }
-  if (callback != null) {
-    array = map(array, callback, thisArg);
-  }
-  return baseFlatten(array, isShallow);
-}
-
-module.exports = flatten;
-
-},{"../collections/map":64,"../internals/baseFlatten":103}],29:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseIndexOf = require('../internals/baseIndexOf'),
-    sortedIndex = require('./sortedIndex');
-
-/* Native method shortcuts for methods with the same name as other `lodash` methods */
-var nativeMax = Math.max;
-
-/**
- * Gets the index at which the first occurrence of `value` is found using
- * strict equality for comparisons, i.e. `===`. If the array is already sorted
- * providing `true` for `fromIndex` will run a faster binary search.
- *
- * @static
- * @memberOf _
- * @category Arrays
- * @param {Array} array The array to search.
- * @param {*} value The value to search for.
- * @param {boolean|number} [fromIndex=0] The index to search from or `true`
- *  to perform a binary search on a sorted array.
- * @returns {number} Returns the index of the matched value or `-1`.
- * @example
- *
- * _.indexOf([1, 2, 3, 1, 2, 3], 2);
- * // => 1
- *
- * _.indexOf([1, 2, 3, 1, 2, 3], 2, 3);
- * // => 4
- *
- * _.indexOf([1, 1, 2, 2, 3, 3], 2, true);
- * // => 2
- */
-function indexOf(array, value, fromIndex) {
-  if (typeof fromIndex == 'number') {
-    var length = array ? array.length : 0;
-    fromIndex = (fromIndex < 0 ? nativeMax(0, length + fromIndex) : fromIndex || 0);
-  } else if (fromIndex) {
-    var index = sortedIndex(array, value);
-    return array[index] === value ? index : -1;
-  }
-  return baseIndexOf(array, value, fromIndex);
-}
-
-module.exports = indexOf;
-
-},{"../internals/baseIndexOf":104,"./sortedIndex":38}],30:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback'),
-    slice = require('../internals/slice');
-
-/* Native method shortcuts for methods with the same name as other `lodash` methods */
-var nativeMax = Math.max,
-    nativeMin = Math.min;
-
-/**
- * Gets all but the last element or last `n` elements of an array. If a
- * callback is provided elements at the end of the array are excluded from
- * the result as long as the callback returns truey. The callback is bound
- * to `thisArg` and invoked with three arguments; (value, index, array).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @category Arrays
- * @param {Array} array The array to query.
- * @param {Function|Object|number|string} [callback=1] The function called
- *  per element or the number of elements to exclude. If a property name or
- *  object is provided it will be used to create a "_.pluck" or "_.where"
- *  style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Array} Returns a slice of `array`.
- * @example
- *
- * _.initial([1, 2, 3]);
- * // => [1, 2]
- *
- * _.initial([1, 2, 3], 2);
- * // => [1]
- *
- * _.initial([1, 2, 3], function(num) {
- *   return num > 1;
- * });
- * // => [1]
- *
- * var characters = [
- *   { 'name': 'barney',  'blocked': false, 'employer': 'slate' },
- *   { 'name': 'fred',    'blocked': true,  'employer': 'slate' },
- *   { 'name': 'pebbles', 'blocked': true,  'employer': 'na' }
- * ];
- *
- * // using "_.pluck" callback shorthand
- * _.initial(characters, 'blocked');
- * // => [{ 'name': 'barney',  'blocked': false, 'employer': 'slate' }]
- *
- * // using "_.where" callback shorthand
- * _.pluck(_.initial(characters, { 'employer': 'na' }), 'name');
- * // => ['barney', 'fred']
- */
-function initial(array, callback, thisArg) {
-  var n = 0,
-      length = array ? array.length : 0;
-
-  if (typeof callback != 'number' && callback != null) {
-    var index = length;
-    callback = createCallback(callback, thisArg, 3);
-    while (index-- && callback(array[index], index, array)) {
-      n++;
-    }
-  } else {
-    n = (callback == null || thisArg) ? 1 : callback || n;
-  }
-  return slice(array, 0, nativeMin(nativeMax(0, length - n), length));
-}
-
-module.exports = initial;
-
-},{"../functions/createCallback":84,"../internals/slice":137}],31:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseIndexOf = require('../internals/baseIndexOf'),
-    cacheIndexOf = require('../internals/cacheIndexOf'),
-    createCache = require('../internals/createCache'),
-    getArray = require('../internals/getArray'),
-    isArguments = require('../objects/isArguments'),
-    isArray = require('../objects/isArray'),
-    largeArraySize = require('../internals/largeArraySize'),
-    releaseArray = require('../internals/releaseArray'),
-    releaseObject = require('../internals/releaseObject');
-
-/**
- * Creates an array of unique values present in all provided arrays using
- * strict equality for comparisons, i.e. `===`.
- *
- * @static
- * @memberOf _
- * @category Arrays
- * @param {...Array} [array] The arrays to inspect.
- * @returns {Array} Returns an array of shared values.
- * @example
- *
- * _.intersection([1, 2, 3], [5, 2, 1, 4], [2, 1]);
- * // => [1, 2]
- */
-function intersection() {
-  var args = [],
-      argsIndex = -1,
-      argsLength = arguments.length,
-      caches = getArray(),
-      indexOf = baseIndexOf,
-      trustIndexOf = indexOf === baseIndexOf,
-      seen = getArray();
-
-  while (++argsIndex < argsLength) {
-    var value = arguments[argsIndex];
-    if (isArray(value) || isArguments(value)) {
-      args.push(value);
-      caches.push(trustIndexOf && value.length >= largeArraySize &&
-        createCache(argsIndex ? args[argsIndex] : seen));
-    }
-  }
-  var array = args[0],
-      index = -1,
-      length = array ? array.length : 0,
-      result = [];
-
-  outer:
-  while (++index < length) {
-    var cache = caches[0];
-    value = array[index];
-
-    if ((cache ? cacheIndexOf(cache, value) : indexOf(seen, value)) < 0) {
-      argsIndex = argsLength;
-      (cache || seen).push(value);
-      while (--argsIndex) {
-        cache = caches[argsIndex];
-        if ((cache ? cacheIndexOf(cache, value) : indexOf(args[argsIndex], value)) < 0) {
-          continue outer;
-        }
-      }
-      result.push(value);
-    }
-  }
-  while (argsLength--) {
-    cache = caches[argsLength];
-    if (cache) {
-      releaseObject(cache);
-    }
-  }
-  releaseArray(caches);
-  releaseArray(seen);
-  return result;
-}
-
-module.exports = intersection;
-
-},{"../internals/baseIndexOf":104,"../internals/cacheIndexOf":109,"../internals/createCache":114,"../internals/getArray":118,"../internals/largeArraySize":124,"../internals/releaseArray":132,"../internals/releaseObject":133,"../objects/isArguments":154,"../objects/isArray":155}],32:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback'),
-    slice = require('../internals/slice');
-
-/* Native method shortcuts for methods with the same name as other `lodash` methods */
-var nativeMax = Math.max;
-
-/**
- * Gets the last element or last `n` elements of an array. If a callback is
- * provided elements at the end of the array are returned as long as the
- * callback returns truey. The callback is bound to `thisArg` and invoked
- * with three arguments; (value, index, array).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @category Arrays
- * @param {Array} array The array to query.
- * @param {Function|Object|number|string} [callback] The function called
- *  per element or the number of elements to return. If a property name or
- *  object is provided it will be used to create a "_.pluck" or "_.where"
- *  style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {*} Returns the last element(s) of `array`.
- * @example
- *
- * _.last([1, 2, 3]);
- * // => 3
- *
- * _.last([1, 2, 3], 2);
- * // => [2, 3]
- *
- * _.last([1, 2, 3], function(num) {
- *   return num > 1;
- * });
- * // => [2, 3]
- *
- * var characters = [
- *   { 'name': 'barney',  'blocked': false, 'employer': 'slate' },
- *   { 'name': 'fred',    'blocked': true,  'employer': 'slate' },
- *   { 'name': 'pebbles', 'blocked': true,  'employer': 'na' }
- * ];
- *
- * // using "_.pluck" callback shorthand
- * _.pluck(_.last(characters, 'blocked'), 'name');
- * // => ['fred', 'pebbles']
- *
- * // using "_.where" callback shorthand
- * _.last(characters, { 'employer': 'na' });
- * // => [{ 'name': 'pebbles', 'blocked': true, 'employer': 'na' }]
- */
-function last(array, callback, thisArg) {
-  var n = 0,
-      length = array ? array.length : 0;
-
-  if (typeof callback != 'number' && callback != null) {
-    var index = length;
-    callback = createCallback(callback, thisArg, 3);
-    while (index-- && callback(array[index], index, array)) {
-      n++;
-    }
-  } else {
-    n = callback;
-    if (n == null || thisArg) {
-      return array ? array[length - 1] : undefined;
-    }
-  }
-  return slice(array, nativeMax(0, length - n));
-}
-
-module.exports = last;
-
-},{"../functions/createCallback":84,"../internals/slice":137}],33:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/* Native method shortcuts for methods with the same name as other `lodash` methods */
-var nativeMax = Math.max,
-    nativeMin = Math.min;
-
-/**
- * Gets the index at which the last occurrence of `value` is found using strict
- * equality for comparisons, i.e. `===`. If `fromIndex` is negative, it is used
- * as the offset from the end of the collection.
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @category Arrays
- * @param {Array} array The array to search.
- * @param {*} value The value to search for.
- * @param {number} [fromIndex=array.length-1] The index to search from.
- * @returns {number} Returns the index of the matched value or `-1`.
- * @example
- *
- * _.lastIndexOf([1, 2, 3, 1, 2, 3], 2);
- * // => 4
- *
- * _.lastIndexOf([1, 2, 3, 1, 2, 3], 2, 3);
- * // => 1
- */
-function lastIndexOf(array, value, fromIndex) {
-  var index = array ? array.length : 0;
-  if (typeof fromIndex == 'number') {
-    index = (fromIndex < 0 ? nativeMax(0, index + fromIndex) : nativeMin(fromIndex, index - 1)) + 1;
-  }
-  while (index--) {
-    if (array[index] === value) {
-      return index;
-    }
-  }
-  return -1;
-}
-
-module.exports = lastIndexOf;
-
-},{}],34:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * Used for `Array` method references.
- *
- * Normally `Array.prototype` would suffice, however, using an array literal
- * avoids issues in Narwhal.
- */
-var arrayRef = [];
-
-/** Native method shortcuts */
-var splice = arrayRef.splice;
-
-/**
- * Removes all provided values from the given array using strict equality for
- * comparisons, i.e. `===`.
- *
- * @static
- * @memberOf _
- * @category Arrays
- * @param {Array} array The array to modify.
- * @param {...*} [value] The values to remove.
- * @returns {Array} Returns `array`.
- * @example
- *
- * var array = [1, 2, 3, 1, 2, 3];
- * _.pull(array, 2, 3);
- * console.log(array);
- * // => [1, 1]
- */
-function pull(array) {
-  var args = arguments,
-      argsIndex = 0,
-      argsLength = args.length,
-      length = array ? array.length : 0;
-
-  while (++argsIndex < argsLength) {
-    var index = -1,
-        value = args[argsIndex];
-    while (++index < length) {
-      if (array[index] === value) {
-        splice.call(array, index--, 1);
-        length--;
-      }
-    }
-  }
-  return array;
-}
-
-module.exports = pull;
-
-},{}],35:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** Native method shortcuts */
-var ceil = Math.ceil;
-
-/* Native method shortcuts for methods with the same name as other `lodash` methods */
-var nativeMax = Math.max;
-
-/**
- * Creates an array of numbers (positive and/or negative) progressing from
- * `start` up to but not including `end`. If `start` is less than `stop` a
- * zero-length range is created unless a negative `step` is specified.
- *
- * @static
- * @memberOf _
- * @category Arrays
- * @param {number} [start=0] The start of the range.
- * @param {number} end The end of the range.
- * @param {number} [step=1] The value to increment or decrement by.
- * @returns {Array} Returns a new range array.
- * @example
- *
- * _.range(4);
- * // => [0, 1, 2, 3]
- *
- * _.range(1, 5);
- * // => [1, 2, 3, 4]
- *
- * _.range(0, 20, 5);
- * // => [0, 5, 10, 15]
- *
- * _.range(0, -4, -1);
- * // => [0, -1, -2, -3]
- *
- * _.range(1, 4, 0);
- * // => [1, 1, 1]
- *
- * _.range(0);
- * // => []
- */
-function range(start, end, step) {
-  start = +start || 0;
-  step = typeof step == 'number' ? step : (+step || 1);
-
-  if (end == null) {
-    end = start;
-    start = 0;
-  }
-  // use `Array(length)` so engines like Chakra and V8 avoid slower modes
-  // http://youtu.be/XAqIpGU8ZZk#t=17m25s
-  var index = -1,
-      length = nativeMax(0, ceil((end - start) / (step || 1))),
-      result = Array(length);
-
-  while (++index < length) {
-    result[index] = start;
-    start += step;
-  }
-  return result;
-}
-
-module.exports = range;
-
-},{}],36:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback');
-
-/**
- * Used for `Array` method references.
- *
- * Normally `Array.prototype` would suffice, however, using an array literal
- * avoids issues in Narwhal.
- */
-var arrayRef = [];
-
-/** Native method shortcuts */
-var splice = arrayRef.splice;
-
-/**
- * Removes all elements from an array that the callback returns truey for
- * and returns an array of removed elements. The callback is bound to `thisArg`
- * and invoked with three arguments; (value, index, array).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @category Arrays
- * @param {Array} array The array to modify.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Array} Returns a new array of removed elements.
- * @example
- *
- * var array = [1, 2, 3, 4, 5, 6];
- * var evens = _.remove(array, function(num) { return num % 2 == 0; });
- *
- * console.log(array);
- * // => [1, 3, 5]
- *
- * console.log(evens);
- * // => [2, 4, 6]
- */
-function remove(array, callback, thisArg) {
-  var index = -1,
-      length = array ? array.length : 0,
-      result = [];
-
-  callback = createCallback(callback, thisArg, 3);
-  while (++index < length) {
-    var value = array[index];
-    if (callback(value, index, array)) {
-      result.push(value);
-      splice.call(array, index--, 1);
-      length--;
-    }
-  }
-  return result;
-}
-
-module.exports = remove;
-
-},{"../functions/createCallback":84}],37:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback'),
-    slice = require('../internals/slice');
-
-/* Native method shortcuts for methods with the same name as other `lodash` methods */
-var nativeMax = Math.max;
-
-/**
- * The opposite of `_.initial` this method gets all but the first element or
- * first `n` elements of an array. If a callback function is provided elements
- * at the beginning of the array are excluded from the result as long as the
- * callback returns truey. The callback is bound to `thisArg` and invoked
- * with three arguments; (value, index, array).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @alias drop, tail
- * @category Arrays
- * @param {Array} array The array to query.
- * @param {Function|Object|number|string} [callback=1] The function called
- *  per element or the number of elements to exclude. If a property name or
- *  object is provided it will be used to create a "_.pluck" or "_.where"
- *  style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Array} Returns a slice of `array`.
- * @example
- *
- * _.rest([1, 2, 3]);
- * // => [2, 3]
- *
- * _.rest([1, 2, 3], 2);
- * // => [3]
- *
- * _.rest([1, 2, 3], function(num) {
- *   return num < 3;
- * });
- * // => [3]
- *
- * var characters = [
- *   { 'name': 'barney',  'blocked': true,  'employer': 'slate' },
- *   { 'name': 'fred',    'blocked': false,  'employer': 'slate' },
- *   { 'name': 'pebbles', 'blocked': true, 'employer': 'na' }
- * ];
- *
- * // using "_.pluck" callback shorthand
- * _.pluck(_.rest(characters, 'blocked'), 'name');
- * // => ['fred', 'pebbles']
- *
- * // using "_.where" callback shorthand
- * _.rest(characters, { 'employer': 'slate' });
- * // => [{ 'name': 'pebbles', 'blocked': true, 'employer': 'na' }]
- */
-function rest(array, callback, thisArg) {
-  if (typeof callback != 'number' && callback != null) {
-    var n = 0,
-        index = -1,
-        length = array ? array.length : 0;
-
-    callback = createCallback(callback, thisArg, 3);
-    while (++index < length && callback(array[index], index, array)) {
-      n++;
-    }
-  } else {
-    n = (callback == null || thisArg) ? 1 : nativeMax(0, callback);
-  }
-  return slice(array, n);
-}
-
-module.exports = rest;
-
-},{"../functions/createCallback":84,"../internals/slice":137}],38:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback'),
-    identity = require('../utilities/identity');
-
-/**
- * Uses a binary search to determine the smallest index at which a value
- * should be inserted into a given sorted array in order to maintain the sort
- * order of the array. If a callback is provided it will be executed for
- * `value` and each element of `array` to compute their sort ranking. The
- * callback is bound to `thisArg` and invoked with one argument; (value).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @category Arrays
- * @param {Array} array The array to inspect.
- * @param {*} value The value to evaluate.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {number} Returns the index at which `value` should be inserted
- *  into `array`.
- * @example
- *
- * _.sortedIndex([20, 30, 50], 40);
- * // => 2
- *
- * // using "_.pluck" callback shorthand
- * _.sortedIndex([{ 'x': 20 }, { 'x': 30 }, { 'x': 50 }], { 'x': 40 }, 'x');
- * // => 2
- *
- * var dict = {
- *   'wordToNumber': { 'twenty': 20, 'thirty': 30, 'fourty': 40, 'fifty': 50 }
- * };
- *
- * _.sortedIndex(['twenty', 'thirty', 'fifty'], 'fourty', function(word) {
- *   return dict.wordToNumber[word];
- * });
- * // => 2
- *
- * _.sortedIndex(['twenty', 'thirty', 'fifty'], 'fourty', function(word) {
- *   return this.wordToNumber[word];
- * }, dict);
- * // => 2
- */
-function sortedIndex(array, value, callback, thisArg) {
-  var low = 0,
-      high = array ? array.length : low;
-
-  // explicitly reference `identity` for better inlining in Firefox
-  callback = callback ? createCallback(callback, thisArg, 1) : identity;
-  value = callback(value);
-
-  while (low < high) {
-    var mid = (low + high) >>> 1;
-    (callback(array[mid]) < value)
-      ? low = mid + 1
-      : high = mid;
-  }
-  return low;
-}
-
-module.exports = sortedIndex;
-
-},{"../functions/createCallback":84,"../utilities/identity":183}],39:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseFlatten = require('../internals/baseFlatten'),
-    baseUniq = require('../internals/baseUniq');
-
-/**
- * Creates an array of unique values, in order, of the provided arrays using
- * strict equality for comparisons, i.e. `===`.
- *
- * @static
- * @memberOf _
- * @category Arrays
- * @param {...Array} [array] The arrays to inspect.
- * @returns {Array} Returns an array of combined values.
- * @example
- *
- * _.union([1, 2, 3], [5, 2, 1, 4], [2, 1]);
- * // => [1, 2, 3, 5, 4]
- */
-function union() {
-  return baseUniq(baseFlatten(arguments, true, true));
-}
-
-module.exports = union;
-
-},{"../internals/baseFlatten":103,"../internals/baseUniq":108}],40:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseUniq = require('../internals/baseUniq'),
-    createCallback = require('../functions/createCallback');
-
-/**
- * Creates a duplicate-value-free version of an array using strict equality
- * for comparisons, i.e. `===`. If the array is sorted, providing
- * `true` for `isSorted` will use a faster algorithm. If a callback is provided
- * each element of `array` is passed through the callback before uniqueness
- * is computed. The callback is bound to `thisArg` and invoked with three
- * arguments; (value, index, array).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @alias unique
- * @category Arrays
- * @param {Array} array The array to process.
- * @param {boolean} [isSorted=false] A flag to indicate that `array` is sorted.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Array} Returns a duplicate-value-free array.
- * @example
- *
- * _.uniq([1, 2, 1, 3, 1]);
- * // => [1, 2, 3]
- *
- * _.uniq([1, 1, 2, 2, 3], true);
- * // => [1, 2, 3]
- *
- * _.uniq(['A', 'b', 'C', 'a', 'B', 'c'], function(letter) { return letter.toLowerCase(); });
- * // => ['A', 'b', 'C']
- *
- * _.uniq([1, 2.5, 3, 1.5, 2, 3.5], function(num) { return this.floor(num); }, Math);
- * // => [1, 2.5, 3]
- *
- * // using "_.pluck" callback shorthand
- * _.uniq([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');
- * // => [{ 'x': 1 }, { 'x': 2 }]
- */
-function uniq(array, isSorted, callback, thisArg) {
-  // juggle arguments
-  if (typeof isSorted != 'boolean' && isSorted != null) {
-    thisArg = callback;
-    callback = (typeof isSorted != 'function' && thisArg && thisArg[isSorted] === array) ? null : isSorted;
-    isSorted = false;
-  }
-  if (callback != null) {
-    callback = createCallback(callback, thisArg, 3);
-  }
-  return baseUniq(array, isSorted, callback);
-}
-
-module.exports = uniq;
-
-},{"../functions/createCallback":84,"../internals/baseUniq":108}],41:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseDifference = require('../internals/baseDifference'),
-    slice = require('../internals/slice');
-
-/**
- * Creates an array excluding all provided values using strict equality for
- * comparisons, i.e. `===`.
- *
- * @static
- * @memberOf _
- * @category Arrays
- * @param {Array} array The array to filter.
- * @param {...*} [value] The values to exclude.
- * @returns {Array} Returns a new array of filtered values.
- * @example
- *
- * _.without([1, 2, 1, 0, 3, 1, 4], 0, 1);
- * // => [2, 3, 4]
- */
-function without(array) {
-  return baseDifference(array, slice(arguments, 1));
-}
-
-module.exports = without;
-
-},{"../internals/baseDifference":102,"../internals/slice":137}],42:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseDifference = require('../internals/baseDifference'),
-    baseUniq = require('../internals/baseUniq'),
-    isArguments = require('../objects/isArguments'),
-    isArray = require('../objects/isArray');
-
-/**
- * Creates an array that is the symmetric difference of the provided arrays.
- * See http://en.wikipedia.org/wiki/Symmetric_difference.
- *
- * @static
- * @memberOf _
- * @category Arrays
- * @param {...Array} [array] The arrays to inspect.
- * @returns {Array} Returns an array of values.
- * @example
- *
- * _.xor([1, 2, 3], [5, 2, 1, 4]);
- * // => [3, 5, 4]
- *
- * _.xor([1, 2, 5], [2, 3, 5], [3, 4, 5]);
- * // => [1, 4, 5]
- */
-function xor() {
-  var index = -1,
-      length = arguments.length;
-
-  while (++index < length) {
-    var array = arguments[index];
-    if (isArray(array) || isArguments(array)) {
-      var result = result
-        ? baseUniq(baseDifference(result, array).concat(baseDifference(array, result)))
-        : array;
-    }
-  }
-  return result || [];
-}
-
-module.exports = xor;
-
-},{"../internals/baseDifference":102,"../internals/baseUniq":108,"../objects/isArguments":154,"../objects/isArray":155}],43:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var max = require('../collections/max'),
-    pluck = require('../collections/pluck');
-
-/**
- * Creates an array of grouped elements, the first of which contains the first
- * elements of the given arrays, the second of which contains the second
- * elements of the given arrays, and so on.
- *
- * @static
- * @memberOf _
- * @alias unzip
- * @category Arrays
- * @param {...Array} [array] Arrays to process.
- * @returns {Array} Returns a new array of grouped elements.
- * @example
- *
- * _.zip(['fred', 'barney'], [30, 40], [true, false]);
- * // => [['fred', 30, true], ['barney', 40, false]]
- */
-function zip() {
-  var array = arguments.length > 1 ? arguments : arguments[0],
-      index = -1,
-      length = array ? max(pluck(array, 'length')) : 0,
-      result = Array(length < 0 ? 0 : length);
-
-  while (++index < length) {
-    result[index] = pluck(array, index);
-  }
-  return result;
-}
-
-module.exports = zip;
-
-},{"../collections/max":65,"../collections/pluck":67}],44:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isArray = require('../objects/isArray');
-
-/**
- * Creates an object composed from arrays of `keys` and `values`. Provide
- * either a single two dimensional array, i.e. `[[key1, value1], [key2, value2]]`
- * or two arrays, one of `keys` and one of corresponding `values`.
- *
- * @static
- * @memberOf _
- * @alias object
- * @category Arrays
- * @param {Array} keys The array of keys.
- * @param {Array} [values=[]] The array of values.
- * @returns {Object} Returns an object composed of the given keys and
- *  corresponding values.
- * @example
- *
- * _.zipObject(['fred', 'barney'], [30, 40]);
- * // => { 'fred': 30, 'barney': 40 }
- */
-function zipObject(keys, values) {
-  var index = -1,
-      length = keys ? keys.length : 0,
-      result = {};
-
-  if (!values && length && !isArray(keys[0])) {
-    values = [];
-  }
-  while (++index < length) {
-    var key = keys[index];
-    if (values) {
-      result[key] = values[index];
-    } else if (key) {
-      result[key[0]] = key[1];
-    }
-  }
-  return result;
-}
-
-module.exports = zipObject;
-
-},{"../objects/isArray":155}],45:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-module.exports = {
-  'chain': require('./chaining/chain'),
-  'tap': require('./chaining/tap'),
-  'value': require('./chaining/wrapperValueOf'),
-  'wrapperChain': require('./chaining/wrapperChain'),
-  'wrapperToString': require('./chaining/wrapperToString'),
-  'wrapperValueOf': require('./chaining/wrapperValueOf')
-};
-
-},{"./chaining/chain":46,"./chaining/tap":47,"./chaining/wrapperChain":48,"./chaining/wrapperToString":49,"./chaining/wrapperValueOf":50}],46:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var lodashWrapper = require('../internals/lodashWrapper');
-
-/**
- * Creates a `lodash` object that wraps the given value with explicit
- * method chaining enabled.
- *
- * @static
- * @memberOf _
- * @category Chaining
- * @param {*} value The value to wrap.
- * @returns {Object} Returns the wrapper object.
- * @example
- *
- * var characters = [
- *   { 'name': 'barney',  'age': 36 },
- *   { 'name': 'fred',    'age': 40 },
- *   { 'name': 'pebbles', 'age': 1 }
- * ];
- *
- * var youngest = _.chain(characters)
- *     .sortBy('age')
- *     .map(function(chr) { return chr.name + ' is ' + chr.age; })
- *     .first()
- *     .value();
- * // => 'pebbles is 1'
- */
-function chain(value) {
-  value = new lodashWrapper(value);
-  value.__chain__ = true;
-  return value;
-}
-
-module.exports = chain;
-
-},{"../internals/lodashWrapper":125}],47:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * Invokes `interceptor` with the `value` as the first argument and then
- * returns `value`. The purpose of this method is to "tap into" a method
- * chain in order to perform operations on intermediate results within
- * the chain.
- *
- * @static
- * @memberOf _
- * @category Chaining
- * @param {*} value The value to provide to `interceptor`.
- * @param {Function} interceptor The function to invoke.
- * @returns {*} Returns `value`.
- * @example
- *
- * _([1, 2, 3, 4])
- *  .tap(function(array) { array.pop(); })
- *  .reverse()
- *  .value();
- * // => [3, 2, 1]
- */
-function tap(value, interceptor) {
-  interceptor(value);
-  return value;
-}
-
-module.exports = tap;
-
-},{}],48:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * Enables explicit method chaining on the wrapper object.
- *
- * @name chain
- * @memberOf _
- * @category Chaining
- * @returns {*} Returns the wrapper object.
- * @example
- *
- * var characters = [
- *   { 'name': 'barney', 'age': 36 },
- *   { 'name': 'fred',   'age': 40 }
- * ];
- *
- * // without explicit chaining
- * _(characters).first();
- * // => { 'name': 'barney', 'age': 36 }
- *
- * // with explicit chaining
- * _(characters).chain()
- *   .first()
- *   .pick('age')
- *   .value();
- * // => { 'age': 36 }
- */
-function wrapperChain() {
-  this.__chain__ = true;
-  return this;
-}
-
-module.exports = wrapperChain;
-
-},{}],49:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * Produces the `toString` result of the wrapped value.
- *
- * @name toString
- * @memberOf _
- * @category Chaining
- * @returns {string} Returns the string result.
- * @example
- *
- * _([1, 2, 3]).toString();
- * // => '1,2,3'
- */
-function wrapperToString() {
-  return String(this.__wrapped__);
-}
-
-module.exports = wrapperToString;
-
-},{}],50:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var forEach = require('../collections/forEach'),
-    support = require('../support');
-
-/**
- * Extracts the wrapped value.
- *
- * @name valueOf
- * @memberOf _
- * @alias value
- * @category Chaining
- * @returns {*} Returns the wrapped value.
- * @example
- *
- * _([1, 2, 3]).valueOf();
- * // => [1, 2, 3]
- */
-function wrapperValueOf() {
-  return this.__wrapped__;
-}
-
-module.exports = wrapperValueOf;
-
-},{"../collections/forEach":59,"../support":179}],51:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-module.exports = {
-  'all': require('./collections/every'),
-  'any': require('./collections/some'),
-  'at': require('./collections/at'),
-  'collect': require('./collections/map'),
-  'contains': require('./collections/contains'),
-  'countBy': require('./collections/countBy'),
-  'detect': require('./collections/find'),
-  'each': require('./collections/forEach'),
-  'eachRight': require('./collections/forEachRight'),
-  'every': require('./collections/every'),
-  'filter': require('./collections/filter'),
-  'find': require('./collections/find'),
-  'findLast': require('./collections/findLast'),
-  'findWhere': require('./collections/find'),
-  'foldl': require('./collections/reduce'),
-  'foldr': require('./collections/reduceRight'),
-  'forEach': require('./collections/forEach'),
-  'forEachRight': require('./collections/forEachRight'),
-  'groupBy': require('./collections/groupBy'),
-  'include': require('./collections/contains'),
-  'indexBy': require('./collections/indexBy'),
-  'inject': require('./collections/reduce'),
-  'invoke': require('./collections/invoke'),
-  'map': require('./collections/map'),
-  'max': require('./collections/max'),
-  'min': require('./collections/min'),
-  'pluck': require('./collections/pluck'),
-  'reduce': require('./collections/reduce'),
-  'reduceRight': require('./collections/reduceRight'),
-  'reject': require('./collections/reject'),
-  'sample': require('./collections/sample'),
-  'select': require('./collections/filter'),
-  'shuffle': require('./collections/shuffle'),
-  'size': require('./collections/size'),
-  'some': require('./collections/some'),
-  'sortBy': require('./collections/sortBy'),
-  'toArray': require('./collections/toArray'),
-  'where': require('./collections/where')
-};
-
-},{"./collections/at":52,"./collections/contains":53,"./collections/countBy":54,"./collections/every":55,"./collections/filter":56,"./collections/find":57,"./collections/findLast":58,"./collections/forEach":59,"./collections/forEachRight":60,"./collections/groupBy":61,"./collections/indexBy":62,"./collections/invoke":63,"./collections/map":64,"./collections/max":65,"./collections/min":66,"./collections/pluck":67,"./collections/reduce":68,"./collections/reduceRight":69,"./collections/reject":70,"./collections/sample":71,"./collections/shuffle":72,"./collections/size":73,"./collections/some":74,"./collections/sortBy":75,"./collections/toArray":76,"./collections/where":77}],52:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseFlatten = require('../internals/baseFlatten'),
-    isString = require('../objects/isString');
-
-/**
- * Creates an array of elements from the specified indexes, or keys, of the
- * `collection`. Indexes may be specified as individual arguments or as arrays
- * of indexes.
- *
- * @static
- * @memberOf _
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {...(number|number[]|string|string[])} [index] The indexes of `collection`
- *   to retrieve, specified as individual indexes or arrays of indexes.
- * @returns {Array} Returns a new array of elements corresponding to the
- *  provided indexes.
- * @example
- *
- * _.at(['a', 'b', 'c', 'd', 'e'], [0, 2, 4]);
- * // => ['a', 'c', 'e']
- *
- * _.at(['fred', 'barney', 'pebbles'], 0, 2);
- * // => ['fred', 'pebbles']
- */
-function at(collection) {
-  var args = arguments,
-      index = -1,
-      props = baseFlatten(args, true, false, 1),
-      length = (args[2] && args[2][args[1]] === collection) ? 1 : props.length,
-      result = Array(length);
-
-  while(++index < length) {
-    result[index] = collection[props[index]];
-  }
-  return result;
-}
-
-module.exports = at;
-
-},{"../internals/baseFlatten":103,"../objects/isString":169}],53:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseIndexOf = require('../internals/baseIndexOf'),
-    forOwn = require('../objects/forOwn'),
-    isArray = require('../objects/isArray'),
-    isString = require('../objects/isString');
-
-/* Native method shortcuts for methods with the same name as other `lodash` methods */
-var nativeMax = Math.max;
-
-/**
- * Checks if a given value is present in a collection using strict equality
- * for comparisons, i.e. `===`. If `fromIndex` is negative, it is used as the
- * offset from the end of the collection.
- *
- * @static
- * @memberOf _
- * @alias include
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {*} target The value to check for.
- * @param {number} [fromIndex=0] The index to search from.
- * @returns {boolean} Returns `true` if the `target` element is found, else `false`.
- * @example
- *
- * _.contains([1, 2, 3], 1);
- * // => true
- *
- * _.contains([1, 2, 3], 1, 2);
- * // => false
- *
- * _.contains({ 'name': 'fred', 'age': 40 }, 'fred');
- * // => true
- *
- * _.contains('pebbles', 'eb');
- * // => true
- */
-function contains(collection, target, fromIndex) {
-  var index = -1,
-      indexOf = baseIndexOf,
-      length = collection ? collection.length : 0,
-      result = false;
-
-  fromIndex = (fromIndex < 0 ? nativeMax(0, length + fromIndex) : fromIndex) || 0;
-  if (isArray(collection)) {
-    result = indexOf(collection, target, fromIndex) > -1;
-  } else if (typeof length == 'number') {
-    result = (isString(collection) ? collection.indexOf(target, fromIndex) : indexOf(collection, target, fromIndex)) > -1;
-  } else {
-    forOwn(collection, function(value) {
-      if (++index >= fromIndex) {
-        return !(result = value === target);
-      }
-    });
-  }
-  return result;
-}
-
-module.exports = contains;
-
-},{"../internals/baseIndexOf":104,"../objects/forOwn":149,"../objects/isArray":155,"../objects/isString":169}],54:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createAggregator = require('../internals/createAggregator');
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Native method shortcuts */
-var hasOwnProperty = objectProto.hasOwnProperty;
-
-/**
- * Creates an object composed of keys generated from the results of running
- * each element of `collection` through the callback. The corresponding value
- * of each key is the number of times the key was returned by the callback.
- * The callback is bound to `thisArg` and invoked with three arguments;
- * (value, index|key, collection).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Object} Returns the composed aggregate object.
- * @example
- *
- * _.countBy([4.3, 6.1, 6.4], function(num) { return Math.floor(num); });
- * // => { '4': 1, '6': 2 }
- *
- * _.countBy([4.3, 6.1, 6.4], function(num) { return this.floor(num); }, Math);
- * // => { '4': 1, '6': 2 }
- *
- * _.countBy(['one', 'two', 'three'], 'length');
- * // => { '3': 2, '5': 1 }
- */
-var countBy = createAggregator(function(result, value, key) {
-  (hasOwnProperty.call(result, key) ? result[key]++ : result[key] = 1);
-});
-
-module.exports = countBy;
-
-},{"../internals/createAggregator":113}],55:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback'),
-    forOwn = require('../objects/forOwn');
-
-/**
- * Checks if the given callback returns truey value for **all** elements of
- * a collection. The callback is bound to `thisArg` and invoked with three
- * arguments; (value, index|key, collection).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @alias all
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {boolean} Returns `true` if all elements passed the callback check,
- *  else `false`.
- * @example
- *
- * _.every([true, 1, null, 'yes']);
- * // => false
- *
- * var characters = [
- *   { 'name': 'barney', 'age': 36 },
- *   { 'name': 'fred',   'age': 40 }
- * ];
- *
- * // using "_.pluck" callback shorthand
- * _.every(characters, 'age');
- * // => true
- *
- * // using "_.where" callback shorthand
- * _.every(characters, { 'age': 36 });
- * // => false
- */
-function every(collection, callback, thisArg) {
-  var result = true;
-  callback = createCallback(callback, thisArg, 3);
-
-  var index = -1,
-      length = collection ? collection.length : 0;
-
-  if (typeof length == 'number') {
-    while (++index < length) {
-      if (!(result = !!callback(collection[index], index, collection))) {
-        break;
-      }
-    }
-  } else {
-    forOwn(collection, function(value, index, collection) {
-      return (result = !!callback(value, index, collection));
-    });
-  }
-  return result;
-}
-
-module.exports = every;
-
-},{"../functions/createCallback":84,"../objects/forOwn":149}],56:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback'),
-    forOwn = require('../objects/forOwn');
-
-/**
- * Iterates over elements of a collection, returning an array of all elements
- * the callback returns truey for. The callback is bound to `thisArg` and
- * invoked with three arguments; (value, index|key, collection).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @alias select
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Array} Returns a new array of elements that passed the callback check.
- * @example
- *
- * var evens = _.filter([1, 2, 3, 4, 5, 6], function(num) { return num % 2 == 0; });
- * // => [2, 4, 6]
- *
- * var characters = [
- *   { 'name': 'barney', 'age': 36, 'blocked': false },
- *   { 'name': 'fred',   'age': 40, 'blocked': true }
- * ];
- *
- * // using "_.pluck" callback shorthand
- * _.filter(characters, 'blocked');
- * // => [{ 'name': 'fred', 'age': 40, 'blocked': true }]
- *
- * // using "_.where" callback shorthand
- * _.filter(characters, { 'age': 36 });
- * // => [{ 'name': 'barney', 'age': 36, 'blocked': false }]
- */
-function filter(collection, callback, thisArg) {
-  var result = [];
-  callback = createCallback(callback, thisArg, 3);
-
-  var index = -1,
-      length = collection ? collection.length : 0;
-
-  if (typeof length == 'number') {
-    while (++index < length) {
-      var value = collection[index];
-      if (callback(value, index, collection)) {
-        result.push(value);
-      }
-    }
-  } else {
-    forOwn(collection, function(value, index, collection) {
-      if (callback(value, index, collection)) {
-        result.push(value);
-      }
-    });
-  }
-  return result;
-}
-
-module.exports = filter;
-
-},{"../functions/createCallback":84,"../objects/forOwn":149}],57:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback'),
-    forOwn = require('../objects/forOwn');
-
-/**
- * Iterates over elements of a collection, returning the first element that
- * the callback returns truey for. The callback is bound to `thisArg` and
- * invoked with three arguments; (value, index|key, collection).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @alias detect, findWhere
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {*} Returns the found element, else `undefined`.
- * @example
- *
- * var characters = [
- *   { 'name': 'barney',  'age': 36, 'blocked': false },
- *   { 'name': 'fred',    'age': 40, 'blocked': true },
- *   { 'name': 'pebbles', 'age': 1,  'blocked': false }
- * ];
- *
- * _.find(characters, function(chr) {
- *   return chr.age < 40;
- * });
- * // => { 'name': 'barney', 'age': 36, 'blocked': false }
- *
- * // using "_.where" callback shorthand
- * _.find(characters, { 'age': 1 });
- * // =>  { 'name': 'pebbles', 'age': 1, 'blocked': false }
- *
- * // using "_.pluck" callback shorthand
- * _.find(characters, 'blocked');
- * // => { 'name': 'fred', 'age': 40, 'blocked': true }
- */
-function find(collection, callback, thisArg) {
-  callback = createCallback(callback, thisArg, 3);
-
-  var index = -1,
-      length = collection ? collection.length : 0;
-
-  if (typeof length == 'number') {
-    while (++index < length) {
-      var value = collection[index];
-      if (callback(value, index, collection)) {
-        return value;
-      }
-    }
-  } else {
-    var result;
-    forOwn(collection, function(value, index, collection) {
-      if (callback(value, index, collection)) {
-        result = value;
-        return false;
-      }
-    });
-    return result;
-  }
-}
-
-module.exports = find;
-
-},{"../functions/createCallback":84,"../objects/forOwn":149}],58:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback'),
-    forEachRight = require('./forEachRight');
-
-/**
- * This method is like `_.find` except that it iterates over elements
- * of a `collection` from right to left.
- *
- * @static
- * @memberOf _
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {*} Returns the found element, else `undefined`.
- * @example
- *
- * _.findLast([1, 2, 3, 4], function(num) {
- *   return num % 2 == 1;
- * });
- * // => 3
- */
-function findLast(collection, callback, thisArg) {
-  var result;
-  callback = createCallback(callback, thisArg, 3);
-  forEachRight(collection, function(value, index, collection) {
-    if (callback(value, index, collection)) {
-      result = value;
-      return false;
-    }
-  });
-  return result;
-}
-
-module.exports = findLast;
-
-},{"../functions/createCallback":84,"./forEachRight":60}],59:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseCreateCallback = require('../internals/baseCreateCallback'),
-    forOwn = require('../objects/forOwn');
-
-/**
- * Iterates over elements of a collection, executing the callback for each
- * element. The callback is bound to `thisArg` and invoked with three arguments;
- * (value, index|key, collection). Callbacks may exit iteration early by
- * explicitly returning `false`.
- *
- * Note: As with other "Collections" methods, objects with a `length` property
- * are iterated like arrays. To avoid this behavior `_.forIn` or `_.forOwn`
- * may be used for object iteration.
- *
- * @static
- * @memberOf _
- * @alias each
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function} [callback=identity] The function called per iteration.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Array|Object|string} Returns `collection`.
- * @example
- *
- * _([1, 2, 3]).forEach(function(num) { console.log(num); }).join(',');
- * // => logs each number and returns '1,2,3'
- *
- * _.forEach({ 'one': 1, 'two': 2, 'three': 3 }, function(num) { console.log(num); });
- * // => logs each number and returns the object (property order is not guaranteed across environments)
- */
-function forEach(collection, callback, thisArg) {
-  var index = -1,
-      length = collection ? collection.length : 0;
-
-  callback = callback && typeof thisArg == 'undefined' ? callback : baseCreateCallback(callback, thisArg, 3);
-  if (typeof length == 'number') {
-    while (++index < length) {
-      if (callback(collection[index], index, collection) === false) {
-        break;
-      }
-    }
-  } else {
-    forOwn(collection, callback);
-  }
-  return collection;
-}
-
-module.exports = forEach;
-
-},{"../internals/baseCreateCallback":100,"../objects/forOwn":149}],60:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseCreateCallback = require('../internals/baseCreateCallback'),
-    forOwn = require('../objects/forOwn'),
-    isArray = require('../objects/isArray'),
-    isString = require('../objects/isString'),
-    keys = require('../objects/keys');
-
-/**
- * This method is like `_.forEach` except that it iterates over elements
- * of a `collection` from right to left.
- *
- * @static
- * @memberOf _
- * @alias eachRight
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function} [callback=identity] The function called per iteration.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Array|Object|string} Returns `collection`.
- * @example
- *
- * _([1, 2, 3]).forEachRight(function(num) { console.log(num); }).join(',');
- * // => logs each number from right to left and returns '3,2,1'
- */
-function forEachRight(collection, callback, thisArg) {
-  var length = collection ? collection.length : 0;
-  callback = callback && typeof thisArg == 'undefined' ? callback : baseCreateCallback(callback, thisArg, 3);
-  if (typeof length == 'number') {
-    while (length--) {
-      if (callback(collection[length], length, collection) === false) {
-        break;
-      }
-    }
-  } else {
-    var props = keys(collection);
-    length = props.length;
-    forOwn(collection, function(value, key, collection) {
-      key = props ? props[--length] : --length;
-      return callback(collection[key], key, collection);
-    });
-  }
-  return collection;
-}
-
-module.exports = forEachRight;
-
-},{"../internals/baseCreateCallback":100,"../objects/forOwn":149,"../objects/isArray":155,"../objects/isString":169,"../objects/keys":171}],61:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createAggregator = require('../internals/createAggregator');
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Native method shortcuts */
-var hasOwnProperty = objectProto.hasOwnProperty;
-
-/**
- * Creates an object composed of keys generated from the results of running
- * each element of a collection through the callback. The corresponding value
- * of each key is an array of the elements responsible for generating the key.
- * The callback is bound to `thisArg` and invoked with three arguments;
- * (value, index|key, collection).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`
- *
- * @static
- * @memberOf _
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Object} Returns the composed aggregate object.
- * @example
- *
- * _.groupBy([4.2, 6.1, 6.4], function(num) { return Math.floor(num); });
- * // => { '4': [4.2], '6': [6.1, 6.4] }
- *
- * _.groupBy([4.2, 6.1, 6.4], function(num) { return this.floor(num); }, Math);
- * // => { '4': [4.2], '6': [6.1, 6.4] }
- *
- * // using "_.pluck" callback shorthand
- * _.groupBy(['one', 'two', 'three'], 'length');
- * // => { '3': ['one', 'two'], '5': ['three'] }
- */
-var groupBy = createAggregator(function(result, value, key) {
-  (hasOwnProperty.call(result, key) ? result[key] : result[key] = []).push(value);
-});
-
-module.exports = groupBy;
-
-},{"../internals/createAggregator":113}],62:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createAggregator = require('../internals/createAggregator');
-
-/**
- * Creates an object composed of keys generated from the results of running
- * each element of the collection through the given callback. The corresponding
- * value of each key is the last element responsible for generating the key.
- * The callback is bound to `thisArg` and invoked with three arguments;
- * (value, index|key, collection).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Object} Returns the composed aggregate object.
- * @example
- *
- * var keys = [
- *   { 'dir': 'left', 'code': 97 },
- *   { 'dir': 'right', 'code': 100 }
- * ];
- *
- * _.indexBy(keys, 'dir');
- * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }
- *
- * _.indexBy(keys, function(key) { return String.fromCharCode(key.code); });
- * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }
- *
- * _.indexBy(characters, function(key) { this.fromCharCode(key.code); }, String);
- * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }
- */
-var indexBy = createAggregator(function(result, value, key) {
-  result[key] = value;
-});
-
-module.exports = indexBy;
-
-},{"../internals/createAggregator":113}],63:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var forEach = require('./forEach'),
-    slice = require('../internals/slice');
-
-/**
- * Invokes the method named by `methodName` on each element in the `collection`
- * returning an array of the results of each invoked method. Additional arguments
- * will be provided to each invoked method. If `methodName` is a function it
- * will be invoked for, and `this` bound to, each element in the `collection`.
- *
- * @static
- * @memberOf _
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function|string} methodName The name of the method to invoke or
- *  the function invoked per iteration.
- * @param {...*} [arg] Arguments to invoke the method with.
- * @returns {Array} Returns a new array of the results of each invoked method.
- * @example
- *
- * _.invoke([[5, 1, 7], [3, 2, 1]], 'sort');
- * // => [[1, 5, 7], [1, 2, 3]]
- *
- * _.invoke([123, 456], String.prototype.split, '');
- * // => [['1', '2', '3'], ['4', '5', '6']]
- */
-function invoke(collection, methodName) {
-  var args = slice(arguments, 2),
-      index = -1,
-      isFunc = typeof methodName == 'function',
-      length = collection ? collection.length : 0,
-      result = Array(typeof length == 'number' ? length : 0);
-
-  forEach(collection, function(value) {
-    result[++index] = (isFunc ? methodName : value[methodName]).apply(value, args);
-  });
-  return result;
-}
-
-module.exports = invoke;
-
-},{"../internals/slice":137,"./forEach":59}],64:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback'),
-    forOwn = require('../objects/forOwn');
-
-/**
- * Creates an array of values by running each element in the collection
- * through the callback. The callback is bound to `thisArg` and invoked with
- * three arguments; (value, index|key, collection).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @alias collect
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Array} Returns a new array of the results of each `callback` execution.
- * @example
- *
- * _.map([1, 2, 3], function(num) { return num * 3; });
- * // => [3, 6, 9]
- *
- * _.map({ 'one': 1, 'two': 2, 'three': 3 }, function(num) { return num * 3; });
- * // => [3, 6, 9] (property order is not guaranteed across environments)
- *
- * var characters = [
- *   { 'name': 'barney', 'age': 36 },
- *   { 'name': 'fred',   'age': 40 }
- * ];
- *
- * // using "_.pluck" callback shorthand
- * _.map(characters, 'name');
- * // => ['barney', 'fred']
- */
-function map(collection, callback, thisArg) {
-  var index = -1,
-      length = collection ? collection.length : 0;
-
-  callback = createCallback(callback, thisArg, 3);
-  if (typeof length == 'number') {
-    var result = Array(length);
-    while (++index < length) {
-      result[index] = callback(collection[index], index, collection);
-    }
-  } else {
-    result = [];
-    forOwn(collection, function(value, key, collection) {
-      result[++index] = callback(value, key, collection);
-    });
-  }
-  return result;
-}
-
-module.exports = map;
-
-},{"../functions/createCallback":84,"../objects/forOwn":149}],65:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var charAtCallback = require('../internals/charAtCallback'),
-    createCallback = require('../functions/createCallback'),
-    forEach = require('./forEach'),
-    forOwn = require('../objects/forOwn'),
-    isArray = require('../objects/isArray'),
-    isString = require('../objects/isString');
-
-/**
- * Retrieves the maximum value of a collection. If the collection is empty or
- * falsey `-Infinity` is returned. If a callback is provided it will be executed
- * for each value in the collection to generate the criterion by which the value
- * is ranked. The callback is bound to `thisArg` and invoked with three
- * arguments; (value, index, collection).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {*} Returns the maximum value.
- * @example
- *
- * _.max([4, 2, 8, 6]);
- * // => 8
- *
- * var characters = [
- *   { 'name': 'barney', 'age': 36 },
- *   { 'name': 'fred',   'age': 40 }
- * ];
- *
- * _.max(characters, function(chr) { return chr.age; });
- * // => { 'name': 'fred', 'age': 40 };
- *
- * // using "_.pluck" callback shorthand
- * _.max(characters, 'age');
- * // => { 'name': 'fred', 'age': 40 };
- */
-function max(collection, callback, thisArg) {
-  var computed = -Infinity,
-      result = computed;
-
-  // allows working with functions like `_.map` without using
-  // their `index` argument as a callback
-  if (typeof callback != 'function' && thisArg && thisArg[callback] === collection) {
-    callback = null;
-  }
-  if (callback == null && isArray(collection)) {
-    var index = -1,
-        length = collection.length;
-
-    while (++index < length) {
-      var value = collection[index];
-      if (value > result) {
-        result = value;
-      }
-    }
-  } else {
-    callback = (callback == null && isString(collection))
-      ? charAtCallback
-      : createCallback(callback, thisArg, 3);
-
-    forEach(collection, function(value, index, collection) {
-      var current = callback(value, index, collection);
-      if (current > computed) {
-        computed = current;
-        result = value;
-      }
-    });
-  }
-  return result;
-}
-
-module.exports = max;
-
-},{"../functions/createCallback":84,"../internals/charAtCallback":111,"../objects/forOwn":149,"../objects/isArray":155,"../objects/isString":169,"./forEach":59}],66:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var charAtCallback = require('../internals/charAtCallback'),
-    createCallback = require('../functions/createCallback'),
-    forEach = require('./forEach'),
-    forOwn = require('../objects/forOwn'),
-    isArray = require('../objects/isArray'),
-    isString = require('../objects/isString');
-
-/**
- * Retrieves the minimum value of a collection. If the collection is empty or
- * falsey `Infinity` is returned. If a callback is provided it will be executed
- * for each value in the collection to generate the criterion by which the value
- * is ranked. The callback is bound to `thisArg` and invoked with three
- * arguments; (value, index, collection).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {*} Returns the minimum value.
- * @example
- *
- * _.min([4, 2, 8, 6]);
- * // => 2
- *
- * var characters = [
- *   { 'name': 'barney', 'age': 36 },
- *   { 'name': 'fred',   'age': 40 }
- * ];
- *
- * _.min(characters, function(chr) { return chr.age; });
- * // => { 'name': 'barney', 'age': 36 };
- *
- * // using "_.pluck" callback shorthand
- * _.min(characters, 'age');
- * // => { 'name': 'barney', 'age': 36 };
- */
-function min(collection, callback, thisArg) {
-  var computed = Infinity,
-      result = computed;
-
-  // allows working with functions like `_.map` without using
-  // their `index` argument as a callback
-  if (typeof callback != 'function' && thisArg && thisArg[callback] === collection) {
-    callback = null;
-  }
-  if (callback == null && isArray(collection)) {
-    var index = -1,
-        length = collection.length;
-
-    while (++index < length) {
-      var value = collection[index];
-      if (value < result) {
-        result = value;
-      }
-    }
-  } else {
-    callback = (callback == null && isString(collection))
-      ? charAtCallback
-      : createCallback(callback, thisArg, 3);
-
-    forEach(collection, function(value, index, collection) {
-      var current = callback(value, index, collection);
-      if (current < computed) {
-        computed = current;
-        result = value;
-      }
-    });
-  }
-  return result;
-}
-
-module.exports = min;
-
-},{"../functions/createCallback":84,"../internals/charAtCallback":111,"../objects/forOwn":149,"../objects/isArray":155,"../objects/isString":169,"./forEach":59}],67:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var map = require('./map');
-
-/**
- * Retrieves the value of a specified property from all elements in the collection.
- *
- * @static
- * @memberOf _
- * @type Function
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {string} property The name of the property to pluck.
- * @returns {Array} Returns a new array of property values.
- * @example
- *
- * var characters = [
- *   { 'name': 'barney', 'age': 36 },
- *   { 'name': 'fred',   'age': 40 }
- * ];
- *
- * _.pluck(characters, 'name');
- * // => ['barney', 'fred']
- */
-var pluck = map;
-
-module.exports = pluck;
-
-},{"./map":64}],68:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback'),
-    forOwn = require('../objects/forOwn');
-
-/**
- * Reduces a collection to a value which is the accumulated result of running
- * each element in the collection through the callback, where each successive
- * callback execution consumes the return value of the previous execution. If
- * `accumulator` is not provided the first element of the collection will be
- * used as the initial `accumulator` value. The callback is bound to `thisArg`
- * and invoked with four arguments; (accumulator, value, index|key, collection).
- *
- * @static
- * @memberOf _
- * @alias foldl, inject
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function} [callback=identity] The function called per iteration.
- * @param {*} [accumulator] Initial value of the accumulator.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {*} Returns the accumulated value.
- * @example
- *
- * var sum = _.reduce([1, 2, 3], function(sum, num) {
- *   return sum + num;
- * });
- * // => 6
- *
- * var mapped = _.reduce({ 'a': 1, 'b': 2, 'c': 3 }, function(result, num, key) {
- *   result[key] = num * 3;
- *   return result;
- * }, {});
- * // => { 'a': 3, 'b': 6, 'c': 9 }
- */
-function reduce(collection, callback, accumulator, thisArg) {
-  if (!collection) return accumulator;
-  var noaccum = arguments.length < 3;
-  callback = createCallback(callback, thisArg, 4);
-
-  var index = -1,
-      length = collection.length;
-
-  if (typeof length == 'number') {
-    if (noaccum) {
-      accumulator = collection[++index];
-    }
-    while (++index < length) {
-      accumulator = callback(accumulator, collection[index], index, collection);
-    }
-  } else {
-    forOwn(collection, function(value, index, collection) {
-      accumulator = noaccum
-        ? (noaccum = false, value)
-        : callback(accumulator, value, index, collection)
-    });
-  }
-  return accumulator;
-}
-
-module.exports = reduce;
-
-},{"../functions/createCallback":84,"../objects/forOwn":149}],69:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback'),
-    forEachRight = require('./forEachRight');
-
-/**
- * This method is like `_.reduce` except that it iterates over elements
- * of a `collection` from right to left.
- *
- * @static
- * @memberOf _
- * @alias foldr
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function} [callback=identity] The function called per iteration.
- * @param {*} [accumulator] Initial value of the accumulator.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {*} Returns the accumulated value.
- * @example
- *
- * var list = [[0, 1], [2, 3], [4, 5]];
- * var flat = _.reduceRight(list, function(a, b) { return a.concat(b); }, []);
- * // => [4, 5, 2, 3, 0, 1]
- */
-function reduceRight(collection, callback, accumulator, thisArg) {
-  var noaccum = arguments.length < 3;
-  callback = createCallback(callback, thisArg, 4);
-  forEachRight(collection, function(value, index, collection) {
-    accumulator = noaccum
-      ? (noaccum = false, value)
-      : callback(accumulator, value, index, collection);
-  });
-  return accumulator;
-}
-
-module.exports = reduceRight;
-
-},{"../functions/createCallback":84,"./forEachRight":60}],70:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback'),
-    filter = require('./filter');
-
-/**
- * The opposite of `_.filter` this method returns the elements of a
- * collection that the callback does **not** return truey for.
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Array} Returns a new array of elements that failed the callback check.
- * @example
- *
- * var odds = _.reject([1, 2, 3, 4, 5, 6], function(num) { return num % 2 == 0; });
- * // => [1, 3, 5]
- *
- * var characters = [
- *   { 'name': 'barney', 'age': 36, 'blocked': false },
- *   { 'name': 'fred',   'age': 40, 'blocked': true }
- * ];
- *
- * // using "_.pluck" callback shorthand
- * _.reject(characters, 'blocked');
- * // => [{ 'name': 'barney', 'age': 36, 'blocked': false }]
- *
- * // using "_.where" callback shorthand
- * _.reject(characters, { 'age': 36 });
- * // => [{ 'name': 'fred', 'age': 40, 'blocked': true }]
- */
-function reject(collection, callback, thisArg) {
-  callback = createCallback(callback, thisArg, 3);
-  return filter(collection, function(value, index, collection) {
-    return !callback(value, index, collection);
-  });
-}
-
-module.exports = reject;
-
-},{"../functions/createCallback":84,"./filter":56}],71:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseRandom = require('../internals/baseRandom'),
-    isString = require('../objects/isString'),
-    shuffle = require('./shuffle'),
-    values = require('../objects/values');
-
-/* Native method shortcuts for methods with the same name as other `lodash` methods */
-var nativeMax = Math.max,
-    nativeMin = Math.min;
-
-/**
- * Retrieves a random element or `n` random elements from a collection.
- *
- * @static
- * @memberOf _
- * @category Collections
- * @param {Array|Object|string} collection The collection to sample.
- * @param {number} [n] The number of elements to sample.
- * @param- {Object} [guard] Allows working with functions like `_.map`
- *  without using their `index` arguments as `n`.
- * @returns {Array} Returns the random sample(s) of `collection`.
- * @example
- *
- * _.sample([1, 2, 3, 4]);
- * // => 2
- *
- * _.sample([1, 2, 3, 4], 2);
- * // => [3, 1]
- */
-function sample(collection, n, guard) {
-  if (collection && typeof collection.length != 'number') {
-    collection = values(collection);
-  }
-  if (n == null || guard) {
-    return collection ? collection[baseRandom(0, collection.length - 1)] : undefined;
-  }
-  var result = shuffle(collection);
-  result.length = nativeMin(nativeMax(0, n), result.length);
-  return result;
-}
-
-module.exports = sample;
-
-},{"../internals/baseRandom":107,"../objects/isString":169,"../objects/values":178,"./shuffle":72}],72:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseRandom = require('../internals/baseRandom'),
-    forEach = require('./forEach');
-
-/**
- * Creates an array of shuffled values, using a version of the Fisher-Yates
- * shuffle. See http://en.wikipedia.org/wiki/Fisher-Yates_shuffle.
- *
- * @static
- * @memberOf _
- * @category Collections
- * @param {Array|Object|string} collection The collection to shuffle.
- * @returns {Array} Returns a new shuffled collection.
- * @example
- *
- * _.shuffle([1, 2, 3, 4, 5, 6]);
- * // => [4, 1, 6, 3, 5, 2]
- */
-function shuffle(collection) {
-  var index = -1,
-      length = collection ? collection.length : 0,
-      result = Array(typeof length == 'number' ? length : 0);
-
-  forEach(collection, function(value) {
-    var rand = baseRandom(0, ++index);
-    result[index] = result[rand];
-    result[rand] = value;
-  });
-  return result;
-}
-
-module.exports = shuffle;
-
-},{"../internals/baseRandom":107,"./forEach":59}],73:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var keys = require('../objects/keys');
-
-/**
- * Gets the size of the `collection` by returning `collection.length` for arrays
- * and array-like objects or the number of own enumerable properties for objects.
- *
- * @static
- * @memberOf _
- * @category Collections
- * @param {Array|Object|string} collection The collection to inspect.
- * @returns {number} Returns `collection.length` or number of own enumerable properties.
- * @example
- *
- * _.size([1, 2]);
- * // => 2
- *
- * _.size({ 'one': 1, 'two': 2, 'three': 3 });
- * // => 3
- *
- * _.size('pebbles');
- * // => 7
- */
-function size(collection) {
-  var length = collection ? collection.length : 0;
-  return typeof length == 'number' ? length : keys(collection).length;
-}
-
-module.exports = size;
-
-},{"../objects/keys":171}],74:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback'),
-    forOwn = require('../objects/forOwn'),
-    isArray = require('../objects/isArray');
-
-/**
- * Checks if the callback returns a truey value for **any** element of a
- * collection. The function returns as soon as it finds a passing value and
- * does not iterate over the entire collection. The callback is bound to
- * `thisArg` and invoked with three arguments; (value, index|key, collection).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @alias any
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {boolean} Returns `true` if any element passed the callback check,
- *  else `false`.
- * @example
- *
- * _.some([null, 0, 'yes', false], Boolean);
- * // => true
- *
- * var characters = [
- *   { 'name': 'barney', 'age': 36, 'blocked': false },
- *   { 'name': 'fred',   'age': 40, 'blocked': true }
- * ];
- *
- * // using "_.pluck" callback shorthand
- * _.some(characters, 'blocked');
- * // => true
- *
- * // using "_.where" callback shorthand
- * _.some(characters, { 'age': 1 });
- * // => false
- */
-function some(collection, callback, thisArg) {
-  var result;
-  callback = createCallback(callback, thisArg, 3);
-
-  var index = -1,
-      length = collection ? collection.length : 0;
-
-  if (typeof length == 'number') {
-    while (++index < length) {
-      if ((result = callback(collection[index], index, collection))) {
-        break;
-      }
-    }
-  } else {
-    forOwn(collection, function(value, index, collection) {
-      return !(result = callback(value, index, collection));
-    });
-  }
-  return !!result;
-}
-
-module.exports = some;
-
-},{"../functions/createCallback":84,"../objects/forOwn":149,"../objects/isArray":155}],75:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var compareAscending = require('../internals/compareAscending'),
-    createCallback = require('../functions/createCallback'),
-    forEach = require('./forEach'),
-    getArray = require('../internals/getArray'),
-    getObject = require('../internals/getObject'),
-    isArray = require('../objects/isArray'),
-    map = require('./map'),
-    releaseArray = require('../internals/releaseArray'),
-    releaseObject = require('../internals/releaseObject');
-
-/**
- * Creates an array of elements, sorted in ascending order by the results of
- * running each element in a collection through the callback. This method
- * performs a stable sort, that is, it will preserve the original sort order
- * of equal elements. The callback is bound to `thisArg` and invoked with
- * three arguments; (value, index|key, collection).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an array of property names is provided for `callback` the collection
- * will be sorted by each property value.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Array|Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Array} Returns a new array of sorted elements.
- * @example
- *
- * _.sortBy([1, 2, 3], function(num) { return Math.sin(num); });
- * // => [3, 1, 2]
- *
- * _.sortBy([1, 2, 3], function(num) { return this.sin(num); }, Math);
- * // => [3, 1, 2]
- *
- * var characters = [
- *   { 'name': 'barney',  'age': 36 },
- *   { 'name': 'fred',    'age': 40 },
- *   { 'name': 'barney',  'age': 26 },
- *   { 'name': 'fred',    'age': 30 }
- * ];
- *
- * // using "_.pluck" callback shorthand
- * _.map(_.sortBy(characters, 'age'), _.values);
- * // => [['barney', 26], ['fred', 30], ['barney', 36], ['fred', 40]]
- *
- * // sorting by multiple properties
- * _.map(_.sortBy(characters, ['name', 'age']), _.values);
- * // = > [['barney', 26], ['barney', 36], ['fred', 30], ['fred', 40]]
- */
-function sortBy(collection, callback, thisArg) {
-  var index = -1,
-      isArr = isArray(callback),
-      length = collection ? collection.length : 0,
-      result = Array(typeof length == 'number' ? length : 0);
-
-  if (!isArr) {
-    callback = createCallback(callback, thisArg, 3);
-  }
-  forEach(collection, function(value, key, collection) {
-    var object = result[++index] = getObject();
-    if (isArr) {
-      object.criteria = map(callback, function(key) { return value[key]; });
-    } else {
-      (object.criteria = getArray())[0] = callback(value, key, collection);
-    }
-    object.index = index;
-    object.value = value;
-  });
-
-  length = result.length;
-  result.sort(compareAscending);
-  while (length--) {
-    var object = result[length];
-    result[length] = object.value;
-    if (!isArr) {
-      releaseArray(object.criteria);
-    }
-    releaseObject(object);
-  }
-  return result;
-}
-
-module.exports = sortBy;
-
-},{"../functions/createCallback":84,"../internals/compareAscending":112,"../internals/getArray":118,"../internals/getObject":119,"../internals/releaseArray":132,"../internals/releaseObject":133,"../objects/isArray":155,"./forEach":59,"./map":64}],76:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isString = require('../objects/isString'),
-    slice = require('../internals/slice'),
-    values = require('../objects/values');
-
-/**
- * Converts the `collection` to an array.
- *
- * @static
- * @memberOf _
- * @category Collections
- * @param {Array|Object|string} collection The collection to convert.
- * @returns {Array} Returns the new converted array.
- * @example
- *
- * (function() { return _.toArray(arguments).slice(1); })(1, 2, 3, 4);
- * // => [2, 3, 4]
- */
-function toArray(collection) {
-  if (collection && typeof collection.length == 'number') {
-    return slice(collection);
-  }
-  return values(collection);
-}
-
-module.exports = toArray;
-
-},{"../internals/slice":137,"../objects/isString":169,"../objects/values":178}],77:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var filter = require('./filter');
-
-/**
- * Performs a deep comparison of each element in a `collection` to the given
- * `properties` object, returning an array of all elements that have equivalent
- * property values.
- *
- * @static
- * @memberOf _
- * @type Function
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Object} props The object of property values to filter by.
- * @returns {Array} Returns a new array of elements that have the given properties.
- * @example
- *
- * var characters = [
- *   { 'name': 'barney', 'age': 36, 'pets': ['hoppy'] },
- *   { 'name': 'fred',   'age': 40, 'pets': ['baby puss', 'dino'] }
- * ];
- *
- * _.where(characters, { 'age': 36 });
- * // => [{ 'name': 'barney', 'age': 36, 'pets': ['hoppy'] }]
- *
- * _.where(characters, { 'pets': ['dino'] });
- * // => [{ 'name': 'fred', 'age': 40, 'pets': ['baby puss', 'dino'] }]
- */
-var where = filter;
-
-module.exports = where;
-
-},{"./filter":56}],78:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-module.exports = {
-  'after': require('./functions/after'),
-  'bind': require('./functions/bind'),
-  'bindAll': require('./functions/bindAll'),
-  'bindKey': require('./functions/bindKey'),
-  'compose': require('./functions/compose'),
-  'createCallback': require('./functions/createCallback'),
-  'curry': require('./functions/curry'),
-  'debounce': require('./functions/debounce'),
-  'defer': require('./functions/defer'),
-  'delay': require('./functions/delay'),
-  'memoize': require('./functions/memoize'),
-  'once': require('./functions/once'),
-  'partial': require('./functions/partial'),
-  'partialRight': require('./functions/partialRight'),
-  'throttle': require('./functions/throttle'),
-  'wrap': require('./functions/wrap')
-};
-
-},{"./functions/after":79,"./functions/bind":80,"./functions/bindAll":81,"./functions/bindKey":82,"./functions/compose":83,"./functions/createCallback":84,"./functions/curry":85,"./functions/debounce":86,"./functions/defer":87,"./functions/delay":88,"./functions/memoize":89,"./functions/once":90,"./functions/partial":91,"./functions/partialRight":92,"./functions/throttle":93,"./functions/wrap":94}],79:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isFunction = require('../objects/isFunction');
-
-/**
- * Creates a function that executes `func`, with  the `this` binding and
- * arguments of the created function, only after being called `n` times.
- *
- * @static
- * @memberOf _
- * @category Functions
- * @param {number} n The number of times the function must be called before
- *  `func` is executed.
- * @param {Function} func The function to restrict.
- * @returns {Function} Returns the new restricted function.
- * @example
- *
- * var saves = ['profile', 'settings'];
- *
- * var done = _.after(saves.length, function() {
- *   console.log('Done saving!');
- * });
- *
- * _.forEach(saves, function(type) {
- *   asyncSave({ 'type': type, 'complete': done });
- * });
- * // => logs 'Done saving!', after all saves have completed
- */
-function after(n, func) {
-  if (!isFunction(func)) {
-    throw new TypeError;
-  }
-  return function() {
-    if (--n < 1) {
-      return func.apply(this, arguments);
-    }
-  };
-}
-
-module.exports = after;
-
-},{"../objects/isFunction":162}],80:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createWrapper = require('../internals/createWrapper'),
-    slice = require('../internals/slice');
-
-/**
- * Creates a function that, when called, invokes `func` with the `this`
- * binding of `thisArg` and prepends any additional `bind` arguments to those
- * provided to the bound function.
- *
- * @static
- * @memberOf _
- * @category Functions
- * @param {Function} func The function to bind.
- * @param {*} [thisArg] The `this` binding of `func`.
- * @param {...*} [arg] Arguments to be partially applied.
- * @returns {Function} Returns the new bound function.
- * @example
- *
- * var func = function(greeting) {
- *   return greeting + ' ' + this.name;
- * };
- *
- * func = _.bind(func, { 'name': 'fred' }, 'hi');
- * func();
- * // => 'hi fred'
- */
-function bind(func, thisArg) {
-  return arguments.length > 2
-    ? createWrapper(func, 17, slice(arguments, 2), null, thisArg)
-    : createWrapper(func, 1, null, null, thisArg);
-}
-
-module.exports = bind;
-
-},{"../internals/createWrapper":115,"../internals/slice":137}],81:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseFlatten = require('../internals/baseFlatten'),
-    createWrapper = require('../internals/createWrapper'),
-    functions = require('../objects/functions');
-
-/**
- * Binds methods of an object to the object itself, overwriting the existing
- * method. Method names may be specified as individual arguments or as arrays
- * of method names. If no method names are provided all the function properties
- * of `object` will be bound.
- *
- * @static
- * @memberOf _
- * @category Functions
- * @param {Object} object The object to bind and assign the bound methods to.
- * @param {...string} [methodName] The object method names to
- *  bind, specified as individual method names or arrays of method names.
- * @returns {Object} Returns `object`.
- * @example
- *
- * var view = {
- *   'label': 'docs',
- *   'onClick': function() { console.log('clicked ' + this.label); }
- * };
- *
- * _.bindAll(view);
- * jQuery('#docs').on('click', view.onClick);
- * // => logs 'clicked docs', when the button is clicked
- */
-function bindAll(object) {
-  var funcs = arguments.length > 1 ? baseFlatten(arguments, true, false, 1) : functions(object),
-      index = -1,
-      length = funcs.length;
-
-  while (++index < length) {
-    var key = funcs[index];
-    object[key] = createWrapper(object[key], 1, null, null, object);
-  }
-  return object;
-}
-
-module.exports = bindAll;
-
-},{"../internals/baseFlatten":103,"../internals/createWrapper":115,"../objects/functions":151}],82:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createWrapper = require('../internals/createWrapper'),
-    slice = require('../internals/slice');
-
-/**
- * Creates a function that, when called, invokes the method at `object[key]`
- * and prepends any additional `bindKey` arguments to those provided to the bound
- * function. This method differs from `_.bind` by allowing bound functions to
- * reference methods that will be redefined or don't yet exist.
- * See http://michaux.ca/articles/lazy-function-definition-pattern.
- *
- * @static
- * @memberOf _
- * @category Functions
- * @param {Object} object The object the method belongs to.
- * @param {string} key The key of the method.
- * @param {...*} [arg] Arguments to be partially applied.
- * @returns {Function} Returns the new bound function.
- * @example
- *
- * var object = {
- *   'name': 'fred',
- *   'greet': function(greeting) {
- *     return greeting + ' ' + this.name;
- *   }
- * };
- *
- * var func = _.bindKey(object, 'greet', 'hi');
- * func();
- * // => 'hi fred'
- *
- * object.greet = function(greeting) {
- *   return greeting + 'ya ' + this.name + '!';
- * };
- *
- * func();
- * // => 'hiya fred!'
- */
-function bindKey(object, key) {
-  return arguments.length > 2
-    ? createWrapper(key, 19, slice(arguments, 2), null, object)
-    : createWrapper(key, 3, null, null, object);
-}
-
-module.exports = bindKey;
-
-},{"../internals/createWrapper":115,"../internals/slice":137}],83:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isFunction = require('../objects/isFunction');
-
-/**
- * Creates a function that is the composition of the provided functions,
- * where each function consumes the return value of the function that follows.
- * For example, composing the functions `f()`, `g()`, and `h()` produces `f(g(h()))`.
- * Each function is executed with the `this` binding of the composed function.
- *
- * @static
- * @memberOf _
- * @category Functions
- * @param {...Function} [func] Functions to compose.
- * @returns {Function} Returns the new composed function.
- * @example
- *
- * var realNameMap = {
- *   'pebbles': 'penelope'
- * };
- *
- * var format = function(name) {
- *   name = realNameMap[name.toLowerCase()] || name;
- *   return name.charAt(0).toUpperCase() + name.slice(1).toLowerCase();
- * };
- *
- * var greet = function(formatted) {
- *   return 'Hiya ' + formatted + '!';
- * };
- *
- * var welcome = _.compose(greet, format);
- * welcome('pebbles');
- * // => 'Hiya Penelope!'
- */
-function compose() {
-  var funcs = arguments,
-      length = funcs.length;
-
-  while (length--) {
-    if (!isFunction(funcs[length])) {
-      throw new TypeError;
-    }
-  }
-  return function() {
-    var args = arguments,
-        length = funcs.length;
-
-    while (length--) {
-      args = [funcs[length].apply(this, args)];
-    }
-    return args[0];
-  };
-}
-
-module.exports = compose;
-
-},{"../objects/isFunction":162}],84:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseCreateCallback = require('../internals/baseCreateCallback'),
-    baseIsEqual = require('../internals/baseIsEqual'),
-    isObject = require('../objects/isObject'),
-    keys = require('../objects/keys'),
-    property = require('../utilities/property');
-
-/**
- * Produces a callback bound to an optional `thisArg`. If `func` is a property
- * name the created callback will return the property value for a given element.
- * If `func` is an object the created callback will return `true` for elements
- * that contain the equivalent object properties, otherwise it will return `false`.
- *
- * @static
- * @memberOf _
- * @category Utilities
- * @param {*} [func=identity] The value to convert to a callback.
- * @param {*} [thisArg] The `this` binding of the created callback.
- * @param {number} [argCount] The number of arguments the callback accepts.
- * @returns {Function} Returns a callback function.
- * @example
- *
- * var characters = [
- *   { 'name': 'barney', 'age': 36 },
- *   { 'name': 'fred',   'age': 40 }
- * ];
- *
- * // wrap to create custom callback shorthands
- * _.createCallback = _.wrap(_.createCallback, function(func, callback, thisArg) {
- *   var match = /^(.+?)__([gl]t)(.+)$/.exec(callback);
- *   return !match ? func(callback, thisArg) : function(object) {
- *     return match[2] == 'gt' ? object[match[1]] > match[3] : object[match[1]] < match[3];
- *   };
- * });
- *
- * _.filter(characters, 'age__gt38');
- * // => [{ 'name': 'fred', 'age': 40 }]
- */
-function createCallback(func, thisArg, argCount) {
-  var type = typeof func;
-  if (func == null || type == 'function') {
-    return baseCreateCallback(func, thisArg, argCount);
-  }
-  // handle "_.pluck" style callback shorthands
-  if (type != 'object') {
-    return property(func);
-  }
-  var props = keys(func),
-      key = props[0],
-      a = func[key];
-
-  // handle "_.where" style callback shorthands
-  if (props.length == 1 && a === a && !isObject(a)) {
-    // fast path the common case of providing an object with a single
-    // property containing a primitive value
-    return function(object) {
-      var b = object[key];
-      return a === b && (a !== 0 || (1 / a == 1 / b));
-    };
-  }
-  return function(object) {
-    var length = props.length,
-        result = false;
-
-    while (length--) {
-      if (!(result = baseIsEqual(object[props[length]], func[props[length]], null, true))) {
-        break;
-      }
-    }
-    return result;
-  };
-}
-
-module.exports = createCallback;
-
-},{"../internals/baseCreateCallback":100,"../internals/baseIsEqual":105,"../objects/isObject":166,"../objects/keys":171,"../utilities/property":189}],85:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createWrapper = require('../internals/createWrapper');
-
-/**
- * Creates a function which accepts one or more arguments of `func` that when
- * invoked either executes `func` returning its result, if all `func` arguments
- * have been provided, or returns a function that accepts one or more of the
- * remaining `func` arguments, and so on. The arity of `func` can be specified
- * if `func.length` is not sufficient.
- *
- * @static
- * @memberOf _
- * @category Functions
- * @param {Function} func The function to curry.
- * @param {number} [arity=func.length] The arity of `func`.
- * @returns {Function} Returns the new curried function.
- * @example
- *
- * var curried = _.curry(function(a, b, c) {
- *   console.log(a + b + c);
- * });
- *
- * curried(1)(2)(3);
- * // => 6
- *
- * curried(1, 2)(3);
- * // => 6
- *
- * curried(1, 2, 3);
- * // => 6
- */
-function curry(func, arity) {
-  arity = typeof arity == 'number' ? arity : (+arity || func.length);
-  return createWrapper(func, 4, null, null, null, arity);
-}
-
-module.exports = curry;
-
-},{"../internals/createWrapper":115}],86:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isFunction = require('../objects/isFunction'),
-    isObject = require('../objects/isObject'),
-    now = require('../utilities/now');
-
-/* Native method shortcuts for methods with the same name as other `lodash` methods */
-var nativeMax = Math.max;
-
-/**
- * Creates a function that will delay the execution of `func` until after
- * `wait` milliseconds have elapsed since the last time it was invoked.
- * Provide an options object to indicate that `func` should be invoked on
- * the leading and/or trailing edge of the `wait` timeout. Subsequent calls
- * to the debounced function will return the result of the last `func` call.
- *
- * Note: If `leading` and `trailing` options are `true` `func` will be called
- * on the trailing edge of the timeout only if the the debounced function is
- * invoked more than once during the `wait` timeout.
- *
- * @static
- * @memberOf _
- * @category Functions
- * @param {Function} func The function to debounce.
- * @param {number} wait The number of milliseconds to delay.
- * @param {Object} [options] The options object.
- * @param {boolean} [options.leading=false] Specify execution on the leading edge of the timeout.
- * @param {number} [options.maxWait] The maximum time `func` is allowed to be delayed before it's called.
- * @param {boolean} [options.trailing=true] Specify execution on the trailing edge of the timeout.
- * @returns {Function} Returns the new debounced function.
- * @example
- *
- * // avoid costly calculations while the window size is in flux
- * var lazyLayout = _.debounce(calculateLayout, 150);
- * jQuery(window).on('resize', lazyLayout);
- *
- * // execute `sendMail` when the click event is fired, debouncing subsequent calls
- * jQuery('#postbox').on('click', _.debounce(sendMail, 300, {
- *   'leading': true,
- *   'trailing': false
- * });
- *
- * // ensure `batchLog` is executed once after 1 second of debounced calls
- * var source = new EventSource('/stream');
- * source.addEventListener('message', _.debounce(batchLog, 250, {
- *   'maxWait': 1000
- * }, false);
- */
-function debounce(func, wait, options) {
-  var args,
-      maxTimeoutId,
-      result,
-      stamp,
-      thisArg,
-      timeoutId,
-      trailingCall,
-      lastCalled = 0,
-      maxWait = false,
-      trailing = true;
-
-  if (!isFunction(func)) {
-    throw new TypeError;
-  }
-  wait = nativeMax(0, wait) || 0;
-  if (options === true) {
-    var leading = true;
-    trailing = false;
-  } else if (isObject(options)) {
-    leading = options.leading;
-    maxWait = 'maxWait' in options && (nativeMax(wait, options.maxWait) || 0);
-    trailing = 'trailing' in options ? options.trailing : trailing;
-  }
-  var delayed = function() {
-    var remaining = wait - (now() - stamp);
-    if (remaining <= 0) {
-      if (maxTimeoutId) {
-        clearTimeout(maxTimeoutId);
-      }
-      var isCalled = trailingCall;
-      maxTimeoutId = timeoutId = trailingCall = undefined;
-      if (isCalled) {
-        lastCalled = now();
-        result = func.apply(thisArg, args);
-        if (!timeoutId && !maxTimeoutId) {
-          args = thisArg = null;
-        }
-      }
-    } else {
-      timeoutId = setTimeout(delayed, remaining);
-    }
-  };
-
-  var maxDelayed = function() {
-    if (timeoutId) {
-      clearTimeout(timeoutId);
-    }
-    maxTimeoutId = timeoutId = trailingCall = undefined;
-    if (trailing || (maxWait !== wait)) {
-      lastCalled = now();
-      result = func.apply(thisArg, args);
-      if (!timeoutId && !maxTimeoutId) {
-        args = thisArg = null;
-      }
-    }
-  };
-
-  return function() {
-    args = arguments;
-    stamp = now();
-    thisArg = this;
-    trailingCall = trailing && (timeoutId || !leading);
-
-    if (maxWait === false) {
-      var leadingCall = leading && !timeoutId;
-    } else {
-      if (!maxTimeoutId && !leading) {
-        lastCalled = stamp;
-      }
-      var remaining = maxWait - (stamp - lastCalled),
-          isCalled = remaining <= 0;
-
-      if (isCalled) {
-        if (maxTimeoutId) {
-          maxTimeoutId = clearTimeout(maxTimeoutId);
-        }
-        lastCalled = stamp;
-        result = func.apply(thisArg, args);
-      }
-      else if (!maxTimeoutId) {
-        maxTimeoutId = setTimeout(maxDelayed, remaining);
-      }
-    }
-    if (isCalled && timeoutId) {
-      timeoutId = clearTimeout(timeoutId);
-    }
-    else if (!timeoutId && wait !== maxWait) {
-      timeoutId = setTimeout(delayed, wait);
-    }
-    if (leadingCall) {
-      isCalled = true;
-      result = func.apply(thisArg, args);
-    }
-    if (isCalled && !timeoutId && !maxTimeoutId) {
-      args = thisArg = null;
-    }
-    return result;
-  };
-}
-
-module.exports = debounce;
-
-},{"../objects/isFunction":162,"../objects/isObject":166,"../utilities/now":187}],87:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isFunction = require('../objects/isFunction'),
-    slice = require('../internals/slice');
-
-/**
- * Defers executing the `func` function until the current call stack has cleared.
- * Additional arguments will be provided to `func` when it is invoked.
- *
- * @static
- * @memberOf _
- * @category Functions
- * @param {Function} func The function to defer.
- * @param {...*} [arg] Arguments to invoke the function with.
- * @returns {number} Returns the timer id.
- * @example
- *
- * _.defer(function(text) { console.log(text); }, 'deferred');
- * // logs 'deferred' after one or more milliseconds
- */
-function defer(func) {
-  if (!isFunction(func)) {
-    throw new TypeError;
-  }
-  var args = slice(arguments, 1);
-  return setTimeout(function() { func.apply(undefined, args); }, 1);
-}
-
-module.exports = defer;
-
-},{"../internals/slice":137,"../objects/isFunction":162}],88:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isFunction = require('../objects/isFunction'),
-    slice = require('../internals/slice');
-
-/**
- * Executes the `func` function after `wait` milliseconds. Additional arguments
- * will be provided to `func` when it is invoked.
- *
- * @static
- * @memberOf _
- * @category Functions
- * @param {Function} func The function to delay.
- * @param {number} wait The number of milliseconds to delay execution.
- * @param {...*} [arg] Arguments to invoke the function with.
- * @returns {number} Returns the timer id.
- * @example
- *
- * _.delay(function(text) { console.log(text); }, 1000, 'later');
- * // => logs 'later' after one second
- */
-function delay(func, wait) {
-  if (!isFunction(func)) {
-    throw new TypeError;
-  }
-  var args = slice(arguments, 2);
-  return setTimeout(function() { func.apply(undefined, args); }, wait);
-}
-
-module.exports = delay;
-
-},{"../internals/slice":137,"../objects/isFunction":162}],89:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isFunction = require('../objects/isFunction'),
-    keyPrefix = require('../internals/keyPrefix');
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Native method shortcuts */
-var hasOwnProperty = objectProto.hasOwnProperty;
-
-/**
- * Creates a function that memoizes the result of `func`. If `resolver` is
- * provided it will be used to determine the cache key for storing the result
- * based on the arguments provided to the memoized function. By default, the
- * first argument provided to the memoized function is used as the cache key.
- * The `func` is executed with the `this` binding of the memoized function.
- * The result cache is exposed as the `cache` property on the memoized function.
- *
- * @static
- * @memberOf _
- * @category Functions
- * @param {Function} func The function to have its output memoized.
- * @param {Function} [resolver] A function used to resolve the cache key.
- * @returns {Function} Returns the new memoizing function.
- * @example
- *
- * var fibonacci = _.memoize(function(n) {
- *   return n < 2 ? n : fibonacci(n - 1) + fibonacci(n - 2);
- * });
- *
- * fibonacci(9)
- * // => 34
- *
- * var data = {
- *   'fred': { 'name': 'fred', 'age': 40 },
- *   'pebbles': { 'name': 'pebbles', 'age': 1 }
- * };
- *
- * // modifying the result cache
- * var get = _.memoize(function(name) { return data[name]; }, _.identity);
- * get('pebbles');
- * // => { 'name': 'pebbles', 'age': 1 }
- *
- * get.cache.pebbles.name = 'penelope';
- * get('pebbles');
- * // => { 'name': 'penelope', 'age': 1 }
- */
-function memoize(func, resolver) {
-  if (!isFunction(func)) {
-    throw new TypeError;
-  }
-  var memoized = function() {
-    var cache = memoized.cache,
-        key = resolver ? resolver.apply(this, arguments) : keyPrefix + arguments[0];
-
-    return hasOwnProperty.call(cache, key)
-      ? cache[key]
-      : (cache[key] = func.apply(this, arguments));
-  }
-  memoized.cache = {};
-  return memoized;
-}
-
-module.exports = memoize;
-
-},{"../internals/keyPrefix":123,"../objects/isFunction":162}],90:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isFunction = require('../objects/isFunction');
-
-/**
- * Creates a function that is restricted to execute `func` once. Repeat calls to
- * the function will return the value of the first call. The `func` is executed
- * with the `this` binding of the created function.
- *
- * @static
- * @memberOf _
- * @category Functions
- * @param {Function} func The function to restrict.
- * @returns {Function} Returns the new restricted function.
- * @example
- *
- * var initialize = _.once(createApplication);
- * initialize();
- * initialize();
- * // `initialize` executes `createApplication` once
- */
-function once(func) {
-  var ran,
-      result;
-
-  if (!isFunction(func)) {
-    throw new TypeError;
-  }
-  return function() {
-    if (ran) {
-      return result;
-    }
-    ran = true;
-    result = func.apply(this, arguments);
-
-    // clear the `func` variable so the function may be garbage collected
-    func = null;
-    return result;
-  };
-}
-
-module.exports = once;
-
-},{"../objects/isFunction":162}],91:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createWrapper = require('../internals/createWrapper'),
-    slice = require('../internals/slice');
-
-/**
- * Creates a function that, when called, invokes `func` with any additional
- * `partial` arguments prepended to those provided to the new function. This
- * method is similar to `_.bind` except it does **not** alter the `this` binding.
- *
- * @static
- * @memberOf _
- * @category Functions
- * @param {Function} func The function to partially apply arguments to.
- * @param {...*} [arg] Arguments to be partially applied.
- * @returns {Function} Returns the new partially applied function.
- * @example
- *
- * var greet = function(greeting, name) { return greeting + ' ' + name; };
- * var hi = _.partial(greet, 'hi');
- * hi('fred');
- * // => 'hi fred'
- */
-function partial(func) {
-  return createWrapper(func, 16, slice(arguments, 1));
-}
-
-module.exports = partial;
-
-},{"../internals/createWrapper":115,"../internals/slice":137}],92:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createWrapper = require('../internals/createWrapper'),
-    slice = require('../internals/slice');
-
-/**
- * This method is like `_.partial` except that `partial` arguments are
- * appended to those provided to the new function.
- *
- * @static
- * @memberOf _
- * @category Functions
- * @param {Function} func The function to partially apply arguments to.
- * @param {...*} [arg] Arguments to be partially applied.
- * @returns {Function} Returns the new partially applied function.
- * @example
- *
- * var defaultsDeep = _.partialRight(_.merge, _.defaults);
- *
- * var options = {
- *   'variable': 'data',
- *   'imports': { 'jq': $ }
- * };
- *
- * defaultsDeep(options, _.templateSettings);
- *
- * options.variable
- * // => 'data'
- *
- * options.imports
- * // => { '_': _, 'jq': $ }
- */
-function partialRight(func) {
-  return createWrapper(func, 32, null, slice(arguments, 1));
-}
-
-module.exports = partialRight;
-
-},{"../internals/createWrapper":115,"../internals/slice":137}],93:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var debounce = require('./debounce'),
-    isFunction = require('../objects/isFunction'),
-    isObject = require('../objects/isObject');
-
-/** Used as an internal `_.debounce` options object */
-var debounceOptions = {
-  'leading': false,
-  'maxWait': 0,
-  'trailing': false
-};
-
-/**
- * Creates a function that, when executed, will only call the `func` function
- * at most once per every `wait` milliseconds. Provide an options object to
- * indicate that `func` should be invoked on the leading and/or trailing edge
- * of the `wait` timeout. Subsequent calls to the throttled function will
- * return the result of the last `func` call.
- *
- * Note: If `leading` and `trailing` options are `true` `func` will be called
- * on the trailing edge of the timeout only if the the throttled function is
- * invoked more than once during the `wait` timeout.
- *
- * @static
- * @memberOf _
- * @category Functions
- * @param {Function} func The function to throttle.
- * @param {number} wait The number of milliseconds to throttle executions to.
- * @param {Object} [options] The options object.
- * @param {boolean} [options.leading=true] Specify execution on the leading edge of the timeout.
- * @param {boolean} [options.trailing=true] Specify execution on the trailing edge of the timeout.
- * @returns {Function} Returns the new throttled function.
- * @example
- *
- * // avoid excessively updating the position while scrolling
- * var throttled = _.throttle(updatePosition, 100);
- * jQuery(window).on('scroll', throttled);
- *
- * // execute `renewToken` when the click event is fired, but not more than once every 5 minutes
- * jQuery('.interactive').on('click', _.throttle(renewToken, 300000, {
- *   'trailing': false
- * }));
- */
-function throttle(func, wait, options) {
-  var leading = true,
-      trailing = true;
-
-  if (!isFunction(func)) {
-    throw new TypeError;
-  }
-  if (options === false) {
-    leading = false;
-  } else if (isObject(options)) {
-    leading = 'leading' in options ? options.leading : leading;
-    trailing = 'trailing' in options ? options.trailing : trailing;
-  }
-  debounceOptions.leading = leading;
-  debounceOptions.maxWait = wait;
-  debounceOptions.trailing = trailing;
-
-  return debounce(func, wait, debounceOptions);
-}
-
-module.exports = throttle;
-
-},{"../objects/isFunction":162,"../objects/isObject":166,"./debounce":86}],94:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createWrapper = require('../internals/createWrapper');
-
-/**
- * Creates a function that provides `value` to the wrapper function as its
- * first argument. Additional arguments provided to the function are appended
- * to those provided to the wrapper function. The wrapper is executed with
- * the `this` binding of the created function.
- *
- * @static
- * @memberOf _
- * @category Functions
- * @param {*} value The value to wrap.
- * @param {Function} wrapper The wrapper function.
- * @returns {Function} Returns the new function.
- * @example
- *
- * var p = _.wrap(_.escape, function(func, text) {
- *   return '<p>' + func(text) + '</p>';
- * });
- *
- * p('Fred, Wilma, & Pebbles');
- * // => '<p>Fred, Wilma, &amp; Pebbles</p>'
- */
-function wrap(value, wrapper) {
-  return createWrapper(wrapper, 16, [value]);
-}
-
-module.exports = wrap;
-
-},{"../internals/createWrapper":115}],95:[function(require,module,exports){
-/**
- * @license
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var arrays = require('./arrays'),
-    chaining = require('./chaining'),
-    collections = require('./collections'),
-    functions = require('./functions'),
-    objects = require('./objects'),
-    utilities = require('./utilities'),
-    forEach = require('./collections/forEach'),
-    forOwn = require('./objects/forOwn'),
-    isArray = require('./objects/isArray'),
-    lodashWrapper = require('./internals/lodashWrapper'),
-    mixin = require('./utilities/mixin'),
-    support = require('./support'),
-    templateSettings = require('./utilities/templateSettings');
-
-/**
- * Used for `Array` method references.
- *
- * Normally `Array.prototype` would suffice, however, using an array literal
- * avoids issues in Narwhal.
- */
-var arrayRef = [];
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Native method shortcuts */
-var hasOwnProperty = objectProto.hasOwnProperty;
-
-/**
- * Creates a `lodash` object which wraps the given value to enable intuitive
- * method chaining.
- *
- * In addition to Lo-Dash methods, wrappers also have the following `Array` methods:
- * `concat`, `join`, `pop`, `push`, `reverse`, `shift`, `slice`, `sort`, `splice`,
- * and `unshift`
- *
- * Chaining is supported in custom builds as long as the `value` method is
- * implicitly or explicitly included in the build.
- *
- * The chainable wrapper functions are:
- * `after`, `assign`, `bind`, `bindAll`, `bindKey`, `chain`, `compact`,
- * `compose`, `concat`, `countBy`, `create`, `createCallback`, `curry`,
- * `debounce`, `defaults`, `defer`, `delay`, `difference`, `filter`, `flatten`,
- * `forEach`, `forEachRight`, `forIn`, `forInRight`, `forOwn`, `forOwnRight`,
- * `functions`, `groupBy`, `indexBy`, `initial`, `intersection`, `invert`,
- * `invoke`, `keys`, `map`, `max`, `memoize`, `merge`, `min`, `object`, `omit`,
- * `once`, `pairs`, `partial`, `partialRight`, `pick`, `pluck`, `pull`, `push`,
- * `range`, `reject`, `remove`, `rest`, `reverse`, `shuffle`, `slice`, `sort`,
- * `sortBy`, `splice`, `tap`, `throttle`, `times`, `toArray`, `transform`,
- * `union`, `uniq`, `unshift`, `unzip`, `values`, `where`, `without`, `wrap`,
- * and `zip`
- *
- * The non-chainable wrapper functions are:
- * `clone`, `cloneDeep`, `contains`, `escape`, `every`, `find`, `findIndex`,
- * `findKey`, `findLast`, `findLastIndex`, `findLastKey`, `has`, `identity`,
- * `indexOf`, `isArguments`, `isArray`, `isBoolean`, `isDate`, `isElement`,
- * `isEmpty`, `isEqual`, `isFinite`, `isFunction`, `isNaN`, `isNull`, `isNumber`,
- * `isObject`, `isPlainObject`, `isRegExp`, `isString`, `isUndefined`, `join`,
- * `lastIndexOf`, `mixin`, `noConflict`, `parseInt`, `pop`, `random`, `reduce`,
- * `reduceRight`, `result`, `shift`, `size`, `some`, `sortedIndex`, `runInContext`,
- * `template`, `unescape`, `uniqueId`, and `value`
- *
- * The wrapper functions `first` and `last` return wrapped values when `n` is
- * provided, otherwise they return unwrapped values.
- *
- * Explicit chaining can be enabled by using the `_.chain` method.
- *
- * @name _
- * @constructor
- * @category Chaining
- * @param {*} value The value to wrap in a `lodash` instance.
- * @returns {Object} Returns a `lodash` instance.
- * @example
- *
- * var wrapped = _([1, 2, 3]);
- *
- * // returns an unwrapped value
- * wrapped.reduce(function(sum, num) {
- *   return sum + num;
- * });
- * // => 6
- *
- * // returns a wrapped value
- * var squares = wrapped.map(function(num) {
- *   return num * num;
- * });
- *
- * _.isArray(squares);
- * // => false
- *
- * _.isArray(squares.value());
- * // => true
- */
-function lodash(value) {
-  // don't wrap if already wrapped, even if wrapped by a different `lodash` constructor
-  return (value && typeof value == 'object' && !isArray(value) && hasOwnProperty.call(value, '__wrapped__'))
-   ? value
-   : new lodashWrapper(value);
-}
-// ensure `new lodashWrapper` is an instance of `lodash`
-lodashWrapper.prototype = lodash.prototype;
-
-// wrap `_.mixin` so it works when provided only one argument
-mixin = (function(fn) {
-  var functions = objects.functions;
-  return function(object, source, options) {
-    if (!source || (!options && !functions(source).length)) {
-      if (options == null) {
-        options = source;
-      }
-      source = object;
-      object = lodash;
-    }
-    return fn(object, source, options);
-  };
-}(mixin));
-
-// add functions that return wrapped values when chaining
-lodash.after = functions.after;
-lodash.assign = objects.assign;
-lodash.at = collections.at;
-lodash.bind = functions.bind;
-lodash.bindAll = functions.bindAll;
-lodash.bindKey = functions.bindKey;
-lodash.chain = chaining.chain;
-lodash.compact = arrays.compact;
-lodash.compose = functions.compose;
-lodash.constant = utilities.constant;
-lodash.countBy = collections.countBy;
-lodash.create = objects.create;
-lodash.createCallback = functions.createCallback;
-lodash.curry = functions.curry;
-lodash.debounce = functions.debounce;
-lodash.defaults = objects.defaults;
-lodash.defer = functions.defer;
-lodash.delay = functions.delay;
-lodash.difference = arrays.difference;
-lodash.filter = collections.filter;
-lodash.flatten = arrays.flatten;
-lodash.forEach = forEach;
-lodash.forEachRight = collections.forEachRight;
-lodash.forIn = objects.forIn;
-lodash.forInRight = objects.forInRight;
-lodash.forOwn = forOwn;
-lodash.forOwnRight = objects.forOwnRight;
-lodash.functions = objects.functions;
-lodash.groupBy = collections.groupBy;
-lodash.indexBy = collections.indexBy;
-lodash.initial = arrays.initial;
-lodash.intersection = arrays.intersection;
-lodash.invert = objects.invert;
-lodash.invoke = collections.invoke;
-lodash.keys = objects.keys;
-lodash.map = collections.map;
-lodash.mapValues = objects.mapValues;
-lodash.max = collections.max;
-lodash.memoize = functions.memoize;
-lodash.merge = objects.merge;
-lodash.min = collections.min;
-lodash.omit = objects.omit;
-lodash.once = functions.once;
-lodash.pairs = objects.pairs;
-lodash.partial = functions.partial;
-lodash.partialRight = functions.partialRight;
-lodash.pick = objects.pick;
-lodash.pluck = collections.pluck;
-lodash.property = utilities.property;
-lodash.pull = arrays.pull;
-lodash.range = arrays.range;
-lodash.reject = collections.reject;
-lodash.remove = arrays.remove;
-lodash.rest = arrays.rest;
-lodash.shuffle = collections.shuffle;
-lodash.sortBy = collections.sortBy;
-lodash.tap = chaining.tap;
-lodash.throttle = functions.throttle;
-lodash.times = utilities.times;
-lodash.toArray = collections.toArray;
-lodash.transform = objects.transform;
-lodash.union = arrays.union;
-lodash.uniq = arrays.uniq;
-lodash.values = objects.values;
-lodash.where = collections.where;
-lodash.without = arrays.without;
-lodash.wrap = functions.wrap;
-lodash.xor = arrays.xor;
-lodash.zip = arrays.zip;
-lodash.zipObject = arrays.zipObject;
-
-// add aliases
-lodash.collect = collections.map;
-lodash.drop = arrays.rest;
-lodash.each = forEach;
-lodash.eachRight = collections.forEachRight;
-lodash.extend = objects.assign;
-lodash.methods = objects.functions;
-lodash.object = arrays.zipObject;
-lodash.select = collections.filter;
-lodash.tail = arrays.rest;
-lodash.unique = arrays.uniq;
-lodash.unzip = arrays.zip;
-
-// add functions to `lodash.prototype`
-mixin(lodash);
-
-// add functions that return unwrapped values when chaining
-lodash.clone = objects.clone;
-lodash.cloneDeep = objects.cloneDeep;
-lodash.contains = collections.contains;
-lodash.escape = utilities.escape;
-lodash.every = collections.every;
-lodash.find = collections.find;
-lodash.findIndex = arrays.findIndex;
-lodash.findKey = objects.findKey;
-lodash.findLast = collections.findLast;
-lodash.findLastIndex = arrays.findLastIndex;
-lodash.findLastKey = objects.findLastKey;
-lodash.has = objects.has;
-lodash.identity = utilities.identity;
-lodash.indexOf = arrays.indexOf;
-lodash.isArguments = objects.isArguments;
-lodash.isArray = isArray;
-lodash.isBoolean = objects.isBoolean;
-lodash.isDate = objects.isDate;
-lodash.isElement = objects.isElement;
-lodash.isEmpty = objects.isEmpty;
-lodash.isEqual = objects.isEqual;
-lodash.isFinite = objects.isFinite;
-lodash.isFunction = objects.isFunction;
-lodash.isNaN = objects.isNaN;
-lodash.isNull = objects.isNull;
-lodash.isNumber = objects.isNumber;
-lodash.isObject = objects.isObject;
-lodash.isPlainObject = objects.isPlainObject;
-lodash.isRegExp = objects.isRegExp;
-lodash.isString = objects.isString;
-lodash.isUndefined = objects.isUndefined;
-lodash.lastIndexOf = arrays.lastIndexOf;
-lodash.mixin = mixin;
-lodash.noConflict = utilities.noConflict;
-lodash.noop = utilities.noop;
-lodash.now = utilities.now;
-lodash.parseInt = utilities.parseInt;
-lodash.random = utilities.random;
-lodash.reduce = collections.reduce;
-lodash.reduceRight = collections.reduceRight;
-lodash.result = utilities.result;
-lodash.size = collections.size;
-lodash.some = collections.some;
-lodash.sortedIndex = arrays.sortedIndex;
-lodash.template = utilities.template;
-lodash.unescape = utilities.unescape;
-lodash.uniqueId = utilities.uniqueId;
-
-// add aliases
-lodash.all = collections.every;
-lodash.any = collections.some;
-lodash.detect = collections.find;
-lodash.findWhere = collections.find;
-lodash.foldl = collections.reduce;
-lodash.foldr = collections.reduceRight;
-lodash.include = collections.contains;
-lodash.inject = collections.reduce;
-
-mixin(function() {
-  var source = {}
-  forOwn(lodash, function(func, methodName) {
-    if (!lodash.prototype[methodName]) {
-      source[methodName] = func;
-    }
-  });
-  return source;
-}(), false);
-
-// add functions capable of returning wrapped and unwrapped values when chaining
-lodash.first = arrays.first;
-lodash.last = arrays.last;
-lodash.sample = collections.sample;
-
-// add aliases
-lodash.take = arrays.first;
-lodash.head = arrays.first;
-
-forOwn(lodash, function(func, methodName) {
-  var callbackable = methodName !== 'sample';
-  if (!lodash.prototype[methodName]) {
-    lodash.prototype[methodName]= function(n, guard) {
-      var chainAll = this.__chain__,
-          result = func(this.__wrapped__, n, guard);
-
-      return !chainAll && (n == null || (guard && !(callbackable && typeof n == 'function')))
-        ? result
-        : new lodashWrapper(result, chainAll);
-    };
-  }
-});
-
-/**
- * The semantic version number.
- *
- * @static
- * @memberOf _
- * @type string
- */
-lodash.VERSION = '2.4.1';
-
-// add "Chaining" functions to the wrapper
-lodash.prototype.chain = chaining.wrapperChain;
-lodash.prototype.toString = chaining.wrapperToString;
-lodash.prototype.value = chaining.wrapperValueOf;
-lodash.prototype.valueOf = chaining.wrapperValueOf;
-
-// add `Array` functions that return unwrapped values
-forEach(['join', 'pop', 'shift'], function(methodName) {
-  var func = arrayRef[methodName];
-  lodash.prototype[methodName] = function() {
-    var chainAll = this.__chain__,
-        result = func.apply(this.__wrapped__, arguments);
-
-    return chainAll
-      ? new lodashWrapper(result, chainAll)
-      : result;
-  };
-});
-
-// add `Array` functions that return the existing wrapped value
-forEach(['push', 'reverse', 'sort', 'unshift'], function(methodName) {
-  var func = arrayRef[methodName];
-  lodash.prototype[methodName] = function() {
-    func.apply(this.__wrapped__, arguments);
-    return this;
-  };
-});
-
-// add `Array` functions that return new wrapped values
-forEach(['concat', 'slice', 'splice'], function(methodName) {
-  var func = arrayRef[methodName];
-  lodash.prototype[methodName] = function() {
-    return new lodashWrapper(func.apply(this.__wrapped__, arguments), this.__chain__);
-  };
-});
-
-lodash.support = support;
-(lodash.templateSettings = utilities.templateSettings).imports._ = lodash;
-module.exports = lodash;
-
-},{"./arrays":22,"./chaining":45,"./collections":51,"./collections/forEach":59,"./functions":78,"./internals/lodashWrapper":125,"./objects":139,"./objects/forOwn":149,"./objects/isArray":155,"./support":179,"./utilities":180,"./utilities/mixin":184,"./utilities/templateSettings":193}],96:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** Used to pool arrays and objects used internally */
-var arrayPool = [];
-
-module.exports = arrayPool;
-
-},{}],97:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseCreate = require('./baseCreate'),
-    isObject = require('../objects/isObject'),
-    setBindData = require('./setBindData'),
-    slice = require('./slice');
-
-/**
- * Used for `Array` method references.
- *
- * Normally `Array.prototype` would suffice, however, using an array literal
- * avoids issues in Narwhal.
- */
-var arrayRef = [];
-
-/** Native method shortcuts */
-var push = arrayRef.push;
-
-/**
- * The base implementation of `_.bind` that creates the bound function and
- * sets its meta data.
- *
- * @private
- * @param {Array} bindData The bind data array.
- * @returns {Function} Returns the new bound function.
- */
-function baseBind(bindData) {
-  var func = bindData[0],
-      partialArgs = bindData[2],
-      thisArg = bindData[4];
-
-  function bound() {
-    // `Function#bind` spec
-    // http://es5.github.io/#x15.3.4.5
-    if (partialArgs) {
-      // avoid `arguments` object deoptimizations by using `slice` instead
-      // of `Array.prototype.slice.call` and not assigning `arguments` to a
-      // variable as a ternary expression
-      var args = slice(partialArgs);
-      push.apply(args, arguments);
-    }
-    // mimic the constructor's `return` behavior
-    // http://es5.github.io/#x13.2.2
-    if (this instanceof bound) {
-      // ensure `new bound` is an instance of `func`
-      var thisBinding = baseCreate(func.prototype),
-          result = func.apply(thisBinding, args || arguments);
-      return isObject(result) ? result : thisBinding;
-    }
-    return func.apply(thisArg, args || arguments);
-  }
-  setBindData(bound, bindData);
-  return bound;
-}
-
-module.exports = baseBind;
-
-},{"../objects/isObject":166,"./baseCreate":99,"./setBindData":134,"./slice":137}],98:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var assign = require('../objects/assign'),
-    forEach = require('../collections/forEach'),
-    forOwn = require('../objects/forOwn'),
-    getArray = require('./getArray'),
-    isArray = require('../objects/isArray'),
-    isObject = require('../objects/isObject'),
-    releaseArray = require('./releaseArray'),
-    slice = require('./slice');
-
-/** Used to match regexp flags from their coerced string values */
-var reFlags = /\w*$/;
-
-/** `Object#toString` result shortcuts */
-var argsClass = '[object Arguments]',
-    arrayClass = '[object Array]',
-    boolClass = '[object Boolean]',
-    dateClass = '[object Date]',
-    funcClass = '[object Function]',
-    numberClass = '[object Number]',
-    objectClass = '[object Object]',
-    regexpClass = '[object RegExp]',
-    stringClass = '[object String]';
-
-/** Used to identify object classifications that `_.clone` supports */
-var cloneableClasses = {};
-cloneableClasses[funcClass] = false;
-cloneableClasses[argsClass] = cloneableClasses[arrayClass] =
-cloneableClasses[boolClass] = cloneableClasses[dateClass] =
-cloneableClasses[numberClass] = cloneableClasses[objectClass] =
-cloneableClasses[regexpClass] = cloneableClasses[stringClass] = true;
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Used to resolve the internal [[Class]] of values */
-var toString = objectProto.toString;
-
-/** Native method shortcuts */
-var hasOwnProperty = objectProto.hasOwnProperty;
-
-/** Used to lookup a built-in constructor by [[Class]] */
-var ctorByClass = {};
-ctorByClass[arrayClass] = Array;
-ctorByClass[boolClass] = Boolean;
-ctorByClass[dateClass] = Date;
-ctorByClass[funcClass] = Function;
-ctorByClass[objectClass] = Object;
-ctorByClass[numberClass] = Number;
-ctorByClass[regexpClass] = RegExp;
-ctorByClass[stringClass] = String;
-
-/**
- * The base implementation of `_.clone` without argument juggling or support
- * for `thisArg` binding.
- *
- * @private
- * @param {*} value The value to clone.
- * @param {boolean} [isDeep=false] Specify a deep clone.
- * @param {Function} [callback] The function to customize cloning values.
- * @param {Array} [stackA=[]] Tracks traversed source objects.
- * @param {Array} [stackB=[]] Associates clones with source counterparts.
- * @returns {*} Returns the cloned value.
- */
-function baseClone(value, isDeep, callback, stackA, stackB) {
-  if (callback) {
-    var result = callback(value);
-    if (typeof result != 'undefined') {
-      return result;
-    }
-  }
-  // inspect [[Class]]
-  var isObj = isObject(value);
-  if (isObj) {
-    var className = toString.call(value);
-    if (!cloneableClasses[className]) {
-      return value;
-    }
-    var ctor = ctorByClass[className];
-    switch (className) {
-      case boolClass:
-      case dateClass:
-        return new ctor(+value);
-
-      case numberClass:
-      case stringClass:
-        return new ctor(value);
-
-      case regexpClass:
-        result = ctor(value.source, reFlags.exec(value));
-        result.lastIndex = value.lastIndex;
-        return result;
-    }
-  } else {
-    return value;
-  }
-  var isArr = isArray(value);
-  if (isDeep) {
-    // check for circular references and return corresponding clone
-    var initedStack = !stackA;
-    stackA || (stackA = getArray());
-    stackB || (stackB = getArray());
-
-    var length = stackA.length;
-    while (length--) {
-      if (stackA[length] == value) {
-        return stackB[length];
-      }
-    }
-    result = isArr ? ctor(value.length) : {};
-  }
-  else {
-    result = isArr ? slice(value) : assign({}, value);
-  }
-  // add array properties assigned by `RegExp#exec`
-  if (isArr) {
-    if (hasOwnProperty.call(value, 'index')) {
-      result.index = value.index;
-    }
-    if (hasOwnProperty.call(value, 'input')) {
-      result.input = value.input;
-    }
-  }
-  // exit for shallow clone
-  if (!isDeep) {
-    return result;
-  }
-  // add the source value to the stack of traversed objects
-  // and associate it with its clone
-  stackA.push(value);
-  stackB.push(result);
-
-  // recursively populate clone (susceptible to call stack limits)
-  (isArr ? forEach : forOwn)(value, function(objValue, key) {
-    result[key] = baseClone(objValue, isDeep, callback, stackA, stackB);
-  });
-
-  if (initedStack) {
-    releaseArray(stackA);
-    releaseArray(stackB);
-  }
-  return result;
-}
-
-module.exports = baseClone;
-
-},{"../collections/forEach":59,"../objects/assign":140,"../objects/forOwn":149,"../objects/isArray":155,"../objects/isObject":166,"./getArray":118,"./releaseArray":132,"./slice":137}],99:[function(require,module,exports){
-(function (global){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isNative = require('./isNative'),
-    isObject = require('../objects/isObject'),
-    noop = require('../utilities/noop');
-
-/* Native method shortcuts for methods with the same name as other `lodash` methods */
-var nativeCreate = isNative(nativeCreate = Object.create) && nativeCreate;
-
-/**
- * The base implementation of `_.create` without support for assigning
- * properties to the created object.
- *
- * @private
- * @param {Object} prototype The object to inherit from.
- * @returns {Object} Returns the new object.
- */
-function baseCreate(prototype, properties) {
-  return isObject(prototype) ? nativeCreate(prototype) : {};
-}
-// fallback for browsers without `Object.create`
-if (!nativeCreate) {
-  baseCreate = (function() {
-    function Object() {}
-    return function(prototype) {
-      if (isObject(prototype)) {
-        Object.prototype = prototype;
-        var result = new Object;
-        Object.prototype = null;
-      }
-      return result || global.Object();
-    };
-  }());
-}
-
-module.exports = baseCreate;
-
-}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
-},{"../objects/isObject":166,"../utilities/noop":186,"./isNative":122}],100:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var bind = require('../functions/bind'),
-    identity = require('../utilities/identity'),
-    setBindData = require('./setBindData'),
-    support = require('../support');
-
-/** Used to detected named functions */
-var reFuncName = /^\s*function[ \n\r\t]+\w/;
-
-/** Used to detect functions containing a `this` reference */
-var reThis = /\bthis\b/;
-
-/** Native method shortcuts */
-var fnToString = Function.prototype.toString;
-
-/**
- * The base implementation of `_.createCallback` without support for creating
- * "_.pluck" or "_.where" style callbacks.
- *
- * @private
- * @param {*} [func=identity] The value to convert to a callback.
- * @param {*} [thisArg] The `this` binding of the created callback.
- * @param {number} [argCount] The number of arguments the callback accepts.
- * @returns {Function} Returns a callback function.
- */
-function baseCreateCallback(func, thisArg, argCount) {
-  if (typeof func != 'function') {
-    return identity;
-  }
-  // exit early for no `thisArg` or already bound by `Function#bind`
-  if (typeof thisArg == 'undefined' || !('prototype' in func)) {
-    return func;
-  }
-  var bindData = func.__bindData__;
-  if (typeof bindData == 'undefined') {
-    if (support.funcNames) {
-      bindData = !func.name;
-    }
-    bindData = bindData || !support.funcDecomp;
-    if (!bindData) {
-      var source = fnToString.call(func);
-      if (!support.funcNames) {
-        bindData = !reFuncName.test(source);
-      }
-      if (!bindData) {
-        // checks if `func` references the `this` keyword and stores the result
-        bindData = reThis.test(source);
-        setBindData(func, bindData);
-      }
-    }
-  }
-  // exit early if there are no `this` references or `func` is bound
-  if (bindData === false || (bindData !== true && bindData[1] & 1)) {
-    return func;
-  }
-  switch (argCount) {
-    case 1: return function(value) {
-      return func.call(thisArg, value);
-    };
-    case 2: return function(a, b) {
-      return func.call(thisArg, a, b);
-    };
-    case 3: return function(value, index, collection) {
-      return func.call(thisArg, value, index, collection);
-    };
-    case 4: return function(accumulator, value, index, collection) {
-      return func.call(thisArg, accumulator, value, index, collection);
-    };
-  }
-  return bind(func, thisArg);
-}
-
-module.exports = baseCreateCallback;
-
-},{"../functions/bind":80,"../support":179,"../utilities/identity":183,"./setBindData":134}],101:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseCreate = require('./baseCreate'),
-    isObject = require('../objects/isObject'),
-    setBindData = require('./setBindData'),
-    slice = require('./slice');
-
-/**
- * Used for `Array` method references.
- *
- * Normally `Array.prototype` would suffice, however, using an array literal
- * avoids issues in Narwhal.
- */
-var arrayRef = [];
-
-/** Native method shortcuts */
-var push = arrayRef.push;
-
-/**
- * The base implementation of `createWrapper` that creates the wrapper and
- * sets its meta data.
- *
- * @private
- * @param {Array} bindData The bind data array.
- * @returns {Function} Returns the new function.
- */
-function baseCreateWrapper(bindData) {
-  var func = bindData[0],
-      bitmask = bindData[1],
-      partialArgs = bindData[2],
-      partialRightArgs = bindData[3],
-      thisArg = bindData[4],
-      arity = bindData[5];
-
-  var isBind = bitmask & 1,
-      isBindKey = bitmask & 2,
-      isCurry = bitmask & 4,
-      isCurryBound = bitmask & 8,
-      key = func;
-
-  function bound() {
-    var thisBinding = isBind ? thisArg : this;
-    if (partialArgs) {
-      var args = slice(partialArgs);
-      push.apply(args, arguments);
-    }
-    if (partialRightArgs || isCurry) {
-      args || (args = slice(arguments));
-      if (partialRightArgs) {
-        push.apply(args, partialRightArgs);
-      }
-      if (isCurry && args.length < arity) {
-        bitmask |= 16 & ~32;
-        return baseCreateWrapper([func, (isCurryBound ? bitmask : bitmask & ~3), args, null, thisArg, arity]);
-      }
-    }
-    args || (args = arguments);
-    if (isBindKey) {
-      func = thisBinding[key];
-    }
-    if (this instanceof bound) {
-      thisBinding = baseCreate(func.prototype);
-      var result = func.apply(thisBinding, args);
-      return isObject(result) ? result : thisBinding;
-    }
-    return func.apply(thisBinding, args);
-  }
-  setBindData(bound, bindData);
-  return bound;
-}
-
-module.exports = baseCreateWrapper;
-
-},{"../objects/isObject":166,"./baseCreate":99,"./setBindData":134,"./slice":137}],102:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseIndexOf = require('./baseIndexOf'),
-    cacheIndexOf = require('./cacheIndexOf'),
-    createCache = require('./createCache'),
-    largeArraySize = require('./largeArraySize'),
-    releaseObject = require('./releaseObject');
-
-/**
- * The base implementation of `_.difference` that accepts a single array
- * of values to exclude.
- *
- * @private
- * @param {Array} array The array to process.
- * @param {Array} [values] The array of values to exclude.
- * @returns {Array} Returns a new array of filtered values.
- */
-function baseDifference(array, values) {
-  var index = -1,
-      indexOf = baseIndexOf,
-      length = array ? array.length : 0,
-      isLarge = length >= largeArraySize,
-      result = [];
-
-  if (isLarge) {
-    var cache = createCache(values);
-    if (cache) {
-      indexOf = cacheIndexOf;
-      values = cache;
-    } else {
-      isLarge = false;
-    }
-  }
-  while (++index < length) {
-    var value = array[index];
-    if (indexOf(values, value) < 0) {
-      result.push(value);
-    }
-  }
-  if (isLarge) {
-    releaseObject(values);
-  }
-  return result;
-}
-
-module.exports = baseDifference;
-
-},{"./baseIndexOf":104,"./cacheIndexOf":109,"./createCache":114,"./largeArraySize":124,"./releaseObject":133}],103:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isArguments = require('../objects/isArguments'),
-    isArray = require('../objects/isArray');
-
-/**
- * The base implementation of `_.flatten` without support for callback
- * shorthands or `thisArg` binding.
- *
- * @private
- * @param {Array} array The array to flatten.
- * @param {boolean} [isShallow=false] A flag to restrict flattening to a single level.
- * @param {boolean} [isStrict=false] A flag to restrict flattening to arrays and `arguments` objects.
- * @param {number} [fromIndex=0] The index to start from.
- * @returns {Array} Returns a new flattened array.
- */
-function baseFlatten(array, isShallow, isStrict, fromIndex) {
-  var index = (fromIndex || 0) - 1,
-      length = array ? array.length : 0,
-      result = [];
-
-  while (++index < length) {
-    var value = array[index];
-
-    if (value && typeof value == 'object' && typeof value.length == 'number'
-        && (isArray(value) || isArguments(value))) {
-      // recursively flatten arrays (susceptible to call stack limits)
-      if (!isShallow) {
-        value = baseFlatten(value, isShallow, isStrict);
-      }
-      var valIndex = -1,
-          valLength = value.length,
-          resIndex = result.length;
-
-      result.length += valLength;
-      while (++valIndex < valLength) {
-        result[resIndex++] = value[valIndex];
-      }
-    } else if (!isStrict) {
-      result.push(value);
-    }
-  }
-  return result;
-}
-
-module.exports = baseFlatten;
-
-},{"../objects/isArguments":154,"../objects/isArray":155}],104:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * The base implementation of `_.indexOf` without support for binary searches
- * or `fromIndex` constraints.
- *
- * @private
- * @param {Array} array The array to search.
- * @param {*} value The value to search for.
- * @param {number} [fromIndex=0] The index to search from.
- * @returns {number} Returns the index of the matched value or `-1`.
- */
-function baseIndexOf(array, value, fromIndex) {
-  var index = (fromIndex || 0) - 1,
-      length = array ? array.length : 0;
-
-  while (++index < length) {
-    if (array[index] === value) {
-      return index;
-    }
-  }
-  return -1;
-}
-
-module.exports = baseIndexOf;
-
-},{}],105:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var forIn = require('../objects/forIn'),
-    getArray = require('./getArray'),
-    isFunction = require('../objects/isFunction'),
-    objectTypes = require('./objectTypes'),
-    releaseArray = require('./releaseArray');
-
-/** `Object#toString` result shortcuts */
-var argsClass = '[object Arguments]',
-    arrayClass = '[object Array]',
-    boolClass = '[object Boolean]',
-    dateClass = '[object Date]',
-    numberClass = '[object Number]',
-    objectClass = '[object Object]',
-    regexpClass = '[object RegExp]',
-    stringClass = '[object String]';
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Used to resolve the internal [[Class]] of values */
-var toString = objectProto.toString;
-
-/** Native method shortcuts */
-var hasOwnProperty = objectProto.hasOwnProperty;
-
-/**
- * The base implementation of `_.isEqual`, without support for `thisArg` binding,
- * that allows partial "_.where" style comparisons.
- *
- * @private
- * @param {*} a The value to compare.
- * @param {*} b The other value to compare.
- * @param {Function} [callback] The function to customize comparing values.
- * @param {Function} [isWhere=false] A flag to indicate performing partial comparisons.
- * @param {Array} [stackA=[]] Tracks traversed `a` objects.
- * @param {Array} [stackB=[]] Tracks traversed `b` objects.
- * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
- */
-function baseIsEqual(a, b, callback, isWhere, stackA, stackB) {
-  // used to indicate that when comparing objects, `a` has at least the properties of `b`
-  if (callback) {
-    var result = callback(a, b);
-    if (typeof result != 'undefined') {
-      return !!result;
-    }
-  }
-  // exit early for identical values
-  if (a === b) {
-    // treat `+0` vs. `-0` as not equal
-    return a !== 0 || (1 / a == 1 / b);
-  }
-  var type = typeof a,
-      otherType = typeof b;
-
-  // exit early for unlike primitive values
-  if (a === a &&
-      !(a && objectTypes[type]) &&
-      !(b && objectTypes[otherType])) {
-    return false;
-  }
-  // exit early for `null` and `undefined` avoiding ES3's Function#call behavior
-  // http://es5.github.io/#x15.3.4.4
-  if (a == null || b == null) {
-    return a === b;
-  }
-  // compare [[Class]] names
-  var className = toString.call(a),
-      otherClass = toString.call(b);
-
-  if (className == argsClass) {
-    className = objectClass;
-  }
-  if (otherClass == argsClass) {
-    otherClass = objectClass;
-  }
-  if (className != otherClass) {
-    return false;
-  }
-  switch (className) {
-    case boolClass:
-    case dateClass:
-      // coerce dates and booleans to numbers, dates to milliseconds and booleans
-      // to `1` or `0` treating invalid dates coerced to `NaN` as not equal
-      return +a == +b;
-
-    case numberClass:
-      // treat `NaN` vs. `NaN` as equal
-      return (a != +a)
-        ? b != +b
-        // but treat `+0` vs. `-0` as not equal
-        : (a == 0 ? (1 / a == 1 / b) : a == +b);
-
-    case regexpClass:
-    case stringClass:
-      // coerce regexes to strings (http://es5.github.io/#x15.10.6.4)
-      // treat string primitives and their corresponding object instances as equal
-      return a == String(b);
-  }
-  var isArr = className == arrayClass;
-  if (!isArr) {
-    // unwrap any `lodash` wrapped values
-    var aWrapped = hasOwnProperty.call(a, '__wrapped__'),
-        bWrapped = hasOwnProperty.call(b, '__wrapped__');
-
-    if (aWrapped || bWrapped) {
-      return baseIsEqual(aWrapped ? a.__wrapped__ : a, bWrapped ? b.__wrapped__ : b, callback, isWhere, stackA, stackB);
-    }
-    // exit for functions and DOM nodes
-    if (className != objectClass) {
-      return false;
-    }
-    // in older versions of Opera, `arguments` objects have `Array` constructors
-    var ctorA = a.constructor,
-        ctorB = b.constructor;
-
-    // non `Object` object instances with different constructors are not equal
-    if (ctorA != ctorB &&
-          !(isFunction(ctorA) && ctorA instanceof ctorA && isFunction(ctorB) && ctorB instanceof ctorB) &&
-          ('constructor' in a && 'constructor' in b)
-        ) {
-      return false;
-    }
-  }
-  // assume cyclic structures are equal
-  // the algorithm for detecting cyclic structures is adapted from ES 5.1
-  // section 15.12.3, abstract operation `JO` (http://es5.github.io/#x15.12.3)
-  var initedStack = !stackA;
-  stackA || (stackA = getArray());
-  stackB || (stackB = getArray());
-
-  var length = stackA.length;
-  while (length--) {
-    if (stackA[length] == a) {
-      return stackB[length] == b;
-    }
-  }
-  var size = 0;
-  result = true;
-
-  // add `a` and `b` to the stack of traversed objects
-  stackA.push(a);
-  stackB.push(b);
-
-  // recursively compare objects and arrays (susceptible to call stack limits)
-  if (isArr) {
-    // compare lengths to determine if a deep comparison is necessary
-    length = a.length;
-    size = b.length;
-    result = size == length;
-
-    if (result || isWhere) {
-      // deep compare the contents, ignoring non-numeric properties
-      while (size--) {
-        var index = length,
-            value = b[size];
-
-        if (isWhere) {
-          while (index--) {
-            if ((result = baseIsEqual(a[index], value, callback, isWhere, stackA, stackB))) {
-              break;
-            }
-          }
-        } else if (!(result = baseIsEqual(a[size], value, callback, isWhere, stackA, stackB))) {
-          break;
-        }
-      }
-    }
-  }
-  else {
-    // deep compare objects using `forIn`, instead of `forOwn`, to avoid `Object.keys`
-    // which, in this case, is more costly
-    forIn(b, function(value, key, b) {
-      if (hasOwnProperty.call(b, key)) {
-        // count the number of properties.
-        size++;
-        // deep compare each property value.
-        return (result = hasOwnProperty.call(a, key) && baseIsEqual(a[key], value, callback, isWhere, stackA, stackB));
-      }
-    });
-
-    if (result && !isWhere) {
-      // ensure both objects have the same number of properties
-      forIn(a, function(value, key, a) {
-        if (hasOwnProperty.call(a, key)) {
-          // `size` will be `-1` if `a` has more properties than `b`
-          return (result = --size > -1);
-        }
-      });
-    }
-  }
-  stackA.pop();
-  stackB.pop();
-
-  if (initedStack) {
-    releaseArray(stackA);
-    releaseArray(stackB);
-  }
-  return result;
-}
-
-module.exports = baseIsEqual;
-
-},{"../objects/forIn":147,"../objects/isFunction":162,"./getArray":118,"./objectTypes":128,"./releaseArray":132}],106:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var forEach = require('../collections/forEach'),
-    forOwn = require('../objects/forOwn'),
-    isArray = require('../objects/isArray'),
-    isPlainObject = require('../objects/isPlainObject');
-
-/**
- * The base implementation of `_.merge` without argument juggling or support
- * for `thisArg` binding.
- *
- * @private
- * @param {Object} object The destination object.
- * @param {Object} source The source object.
- * @param {Function} [callback] The function to customize merging properties.
- * @param {Array} [stackA=[]] Tracks traversed source objects.
- * @param {Array} [stackB=[]] Associates values with source counterparts.
- */
-function baseMerge(object, source, callback, stackA, stackB) {
-  (isArray(source) ? forEach : forOwn)(source, function(source, key) {
-    var found,
-        isArr,
-        result = source,
-        value = object[key];
-
-    if (source && ((isArr = isArray(source)) || isPlainObject(source))) {
-      // avoid merging previously merged cyclic sources
-      var stackLength = stackA.length;
-      while (stackLength--) {
-        if ((found = stackA[stackLength] == source)) {
-          value = stackB[stackLength];
-          break;
-        }
-      }
-      if (!found) {
-        var isShallow;
-        if (callback) {
-          result = callback(value, source);
-          if ((isShallow = typeof result != 'undefined')) {
-            value = result;
-          }
-        }
-        if (!isShallow) {
-          value = isArr
-            ? (isArray(value) ? value : [])
-            : (isPlainObject(value) ? value : {});
-        }
-        // add `source` and associated `value` to the stack of traversed objects
-        stackA.push(source);
-        stackB.push(value);
-
-        // recursively merge objects and arrays (susceptible to call stack limits)
-        if (!isShallow) {
-          baseMerge(value, source, callback, stackA, stackB);
-        }
-      }
-    }
-    else {
-      if (callback) {
-        result = callback(value, source);
-        if (typeof result == 'undefined') {
-          result = source;
-        }
-      }
-      if (typeof result != 'undefined') {
-        value = result;
-      }
-    }
-    object[key] = value;
-  });
-}
-
-module.exports = baseMerge;
-
-},{"../collections/forEach":59,"../objects/forOwn":149,"../objects/isArray":155,"../objects/isPlainObject":167}],107:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** Native method shortcuts */
-var floor = Math.floor;
-
-/* Native method shortcuts for methods with the same name as other `lodash` methods */
-var nativeRandom = Math.random;
-
-/**
- * The base implementation of `_.random` without argument juggling or support
- * for returning floating-point numbers.
- *
- * @private
- * @param {number} min The minimum possible value.
- * @param {number} max The maximum possible value.
- * @returns {number} Returns a random number.
- */
-function baseRandom(min, max) {
-  return min + floor(nativeRandom() * (max - min + 1));
-}
-
-module.exports = baseRandom;
-
-},{}],108:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseIndexOf = require('./baseIndexOf'),
-    cacheIndexOf = require('./cacheIndexOf'),
-    createCache = require('./createCache'),
-    getArray = require('./getArray'),
-    largeArraySize = require('./largeArraySize'),
-    releaseArray = require('./releaseArray'),
-    releaseObject = require('./releaseObject');
-
-/**
- * The base implementation of `_.uniq` without support for callback shorthands
- * or `thisArg` binding.
- *
- * @private
- * @param {Array} array The array to process.
- * @param {boolean} [isSorted=false] A flag to indicate that `array` is sorted.
- * @param {Function} [callback] The function called per iteration.
- * @returns {Array} Returns a duplicate-value-free array.
- */
-function baseUniq(array, isSorted, callback) {
-  var index = -1,
-      indexOf = baseIndexOf,
-      length = array ? array.length : 0,
-      result = [];
-
-  var isLarge = !isSorted && length >= largeArraySize,
-      seen = (callback || isLarge) ? getArray() : result;
-
-  if (isLarge) {
-    var cache = createCache(seen);
-    indexOf = cacheIndexOf;
-    seen = cache;
-  }
-  while (++index < length) {
-    var value = array[index],
-        computed = callback ? callback(value, index, array) : value;
-
-    if (isSorted
-          ? !index || seen[seen.length - 1] !== computed
-          : indexOf(seen, computed) < 0
-        ) {
-      if (callback || isLarge) {
-        seen.push(computed);
-      }
-      result.push(value);
-    }
-  }
-  if (isLarge) {
-    releaseArray(seen.array);
-    releaseObject(seen);
-  } else if (callback) {
-    releaseArray(seen);
-  }
-  return result;
-}
-
-module.exports = baseUniq;
-
-},{"./baseIndexOf":104,"./cacheIndexOf":109,"./createCache":114,"./getArray":118,"./largeArraySize":124,"./releaseArray":132,"./releaseObject":133}],109:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseIndexOf = require('./baseIndexOf'),
-    keyPrefix = require('./keyPrefix');
-
-/**
- * An implementation of `_.contains` for cache objects that mimics the return
- * signature of `_.indexOf` by returning `0` if the value is found, else `-1`.
- *
- * @private
- * @param {Object} cache The cache object to inspect.
- * @param {*} value The value to search for.
- * @returns {number} Returns `0` if `value` is found, else `-1`.
- */
-function cacheIndexOf(cache, value) {
-  var type = typeof value;
-  cache = cache.cache;
-
-  if (type == 'boolean' || value == null) {
-    return cache[value] ? 0 : -1;
-  }
-  if (type != 'number' && type != 'string') {
-    type = 'object';
-  }
-  var key = type == 'number' ? value : keyPrefix + value;
-  cache = (cache = cache[type]) && cache[key];
-
-  return type == 'object'
-    ? (cache && baseIndexOf(cache, value) > -1 ? 0 : -1)
-    : (cache ? 0 : -1);
-}
-
-module.exports = cacheIndexOf;
-
-},{"./baseIndexOf":104,"./keyPrefix":123}],110:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var keyPrefix = require('./keyPrefix');
-
-/**
- * Adds a given value to the corresponding cache object.
- *
- * @private
- * @param {*} value The value to add to the cache.
- */
-function cachePush(value) {
-  var cache = this.cache,
-      type = typeof value;
-
-  if (type == 'boolean' || value == null) {
-    cache[value] = true;
-  } else {
-    if (type != 'number' && type != 'string') {
-      type = 'object';
-    }
-    var key = type == 'number' ? value : keyPrefix + value,
-        typeCache = cache[type] || (cache[type] = {});
-
-    if (type == 'object') {
-      (typeCache[key] || (typeCache[key] = [])).push(value);
-    } else {
-      typeCache[key] = true;
-    }
-  }
-}
-
-module.exports = cachePush;
-
-},{"./keyPrefix":123}],111:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * Used by `_.max` and `_.min` as the default callback when a given
- * collection is a string value.
- *
- * @private
- * @param {string} value The character to inspect.
- * @returns {number} Returns the code unit of given character.
- */
-function charAtCallback(value) {
-  return value.charCodeAt(0);
-}
-
-module.exports = charAtCallback;
-
-},{}],112:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * Used by `sortBy` to compare transformed `collection` elements, stable sorting
- * them in ascending order.
- *
- * @private
- * @param {Object} a The object to compare to `b`.
- * @param {Object} b The object to compare to `a`.
- * @returns {number} Returns the sort order indicator of `1` or `-1`.
- */
-function compareAscending(a, b) {
-  var ac = a.criteria,
-      bc = b.criteria,
-      index = -1,
-      length = ac.length;
-
-  while (++index < length) {
-    var value = ac[index],
-        other = bc[index];
-
-    if (value !== other) {
-      if (value > other || typeof value == 'undefined') {
-        return 1;
-      }
-      if (value < other || typeof other == 'undefined') {
-        return -1;
-      }
-    }
-  }
-  // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications
-  // that causes it, under certain circumstances, to return the same value for
-  // `a` and `b`. See https://github.com/jashkenas/underscore/pull/1247
-  //
-  // This also ensures a stable sort in V8 and other engines.
-  // See http://code.google.com/p/v8/issues/detail?id=90
-  return a.index - b.index;
-}
-
-module.exports = compareAscending;
-
-},{}],113:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback'),
-    forOwn = require('../objects/forOwn'),
-    isArray = require('../objects/isArray');
-
-/**
- * Creates a function that aggregates a collection, creating an object composed
- * of keys generated from the results of running each element of the collection
- * through a callback. The given `setter` function sets the keys and values
- * of the composed object.
- *
- * @private
- * @param {Function} setter The setter function.
- * @returns {Function} Returns the new aggregator function.
- */
-function createAggregator(setter) {
-  return function(collection, callback, thisArg) {
-    var result = {};
-    callback = createCallback(callback, thisArg, 3);
-
-    var index = -1,
-        length = collection ? collection.length : 0;
-
-    if (typeof length == 'number') {
-      while (++index < length) {
-        var value = collection[index];
-        setter(result, value, callback(value, index, collection), collection);
-      }
-    } else {
-      forOwn(collection, function(value, key, collection) {
-        setter(result, value, callback(value, key, collection), collection);
-      });
-    }
-    return result;
-  };
-}
-
-module.exports = createAggregator;
-
-},{"../functions/createCallback":84,"../objects/forOwn":149,"../objects/isArray":155}],114:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var cachePush = require('./cachePush'),
-    getObject = require('./getObject'),
-    releaseObject = require('./releaseObject');
-
-/**
- * Creates a cache object to optimize linear searches of large arrays.
- *
- * @private
- * @param {Array} [array=[]] The array to search.
- * @returns {null|Object} Returns the cache object or `null` if caching should not be used.
- */
-function createCache(array) {
-  var index = -1,
-      length = array.length,
-      first = array[0],
-      mid = array[(length / 2) | 0],
-      last = array[length - 1];
-
-  if (first && typeof first == 'object' &&
-      mid && typeof mid == 'object' && last && typeof last == 'object') {
-    return false;
-  }
-  var cache = getObject();
-  cache['false'] = cache['null'] = cache['true'] = cache['undefined'] = false;
-
-  var result = getObject();
-  result.array = array;
-  result.cache = cache;
-  result.push = cachePush;
-
-  while (++index < length) {
-    result.push(array[index]);
-  }
-  return result;
-}
-
-module.exports = createCache;
-
-},{"./cachePush":110,"./getObject":119,"./releaseObject":133}],115:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseBind = require('./baseBind'),
-    baseCreateWrapper = require('./baseCreateWrapper'),
-    isFunction = require('../objects/isFunction'),
-    slice = require('./slice');
-
-/**
- * Used for `Array` method references.
- *
- * Normally `Array.prototype` would suffice, however, using an array literal
- * avoids issues in Narwhal.
- */
-var arrayRef = [];
-
-/** Native method shortcuts */
-var push = arrayRef.push,
-    unshift = arrayRef.unshift;
-
-/**
- * Creates a function that, when called, either curries or invokes `func`
- * with an optional `this` binding and partially applied arguments.
- *
- * @private
- * @param {Function|string} func The function or method name to reference.
- * @param {number} bitmask The bitmask of method flags to compose.
- *  The bitmask may be composed of the following flags:
- *  1 - `_.bind`
- *  2 - `_.bindKey`
- *  4 - `_.curry`
- *  8 - `_.curry` (bound)
- *  16 - `_.partial`
- *  32 - `_.partialRight`
- * @param {Array} [partialArgs] An array of arguments to prepend to those
- *  provided to the new function.
- * @param {Array} [partialRightArgs] An array of arguments to append to those
- *  provided to the new function.
- * @param {*} [thisArg] The `this` binding of `func`.
- * @param {number} [arity] The arity of `func`.
- * @returns {Function} Returns the new function.
- */
-function createWrapper(func, bitmask, partialArgs, partialRightArgs, thisArg, arity) {
-  var isBind = bitmask & 1,
-      isBindKey = bitmask & 2,
-      isCurry = bitmask & 4,
-      isCurryBound = bitmask & 8,
-      isPartial = bitmask & 16,
-      isPartialRight = bitmask & 32;
-
-  if (!isBindKey && !isFunction(func)) {
-    throw new TypeError;
-  }
-  if (isPartial && !partialArgs.length) {
-    bitmask &= ~16;
-    isPartial = partialArgs = false;
-  }
-  if (isPartialRight && !partialRightArgs.length) {
-    bitmask &= ~32;
-    isPartialRight = partialRightArgs = false;
-  }
-  var bindData = func && func.__bindData__;
-  if (bindData && bindData !== true) {
-    // clone `bindData`
-    bindData = slice(bindData);
-    if (bindData[2]) {
-      bindData[2] = slice(bindData[2]);
-    }
-    if (bindData[3]) {
-      bindData[3] = slice(bindData[3]);
-    }
-    // set `thisBinding` is not previously bound
-    if (isBind && !(bindData[1] & 1)) {
-      bindData[4] = thisArg;
-    }
-    // set if previously bound but not currently (subsequent curried functions)
-    if (!isBind && bindData[1] & 1) {
-      bitmask |= 8;
-    }
-    // set curried arity if not yet set
-    if (isCurry && !(bindData[1] & 4)) {
-      bindData[5] = arity;
-    }
-    // append partial left arguments
-    if (isPartial) {
-      push.apply(bindData[2] || (bindData[2] = []), partialArgs);
-    }
-    // append partial right arguments
-    if (isPartialRight) {
-      unshift.apply(bindData[3] || (bindData[3] = []), partialRightArgs);
-    }
-    // merge flags
-    bindData[1] |= bitmask;
-    return createWrapper.apply(null, bindData);
-  }
-  // fast path for `_.bind`
-  var creater = (bitmask == 1 || bitmask === 17) ? baseBind : baseCreateWrapper;
-  return creater([func, bitmask, partialArgs, partialRightArgs, thisArg, arity]);
-}
-
-module.exports = createWrapper;
-
-},{"../objects/isFunction":162,"./baseBind":97,"./baseCreateWrapper":101,"./slice":137}],116:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var htmlEscapes = require('./htmlEscapes');
-
-/**
- * Used by `escape` to convert characters to HTML entities.
- *
- * @private
- * @param {string} match The matched character to escape.
- * @returns {string} Returns the escaped character.
- */
-function escapeHtmlChar(match) {
-  return htmlEscapes[match];
-}
-
-module.exports = escapeHtmlChar;
-
-},{"./htmlEscapes":120}],117:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** Used to escape characters for inclusion in compiled string literals */
-var stringEscapes = {
-  '\\': '\\',
-  "'": "'",
-  '\n': 'n',
-  '\r': 'r',
-  '\t': 't',
-  '\u2028': 'u2028',
-  '\u2029': 'u2029'
-};
-
-/**
- * Used by `template` to escape characters for inclusion in compiled
- * string literals.
- *
- * @private
- * @param {string} match The matched character to escape.
- * @returns {string} Returns the escaped character.
- */
-function escapeStringChar(match) {
-  return '\\' + stringEscapes[match];
-}
-
-module.exports = escapeStringChar;
-
-},{}],118:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var arrayPool = require('./arrayPool');
-
-/**
- * Gets an array from the array pool or creates a new one if the pool is empty.
- *
- * @private
- * @returns {Array} The array from the pool.
- */
-function getArray() {
-  return arrayPool.pop() || [];
-}
-
-module.exports = getArray;
-
-},{"./arrayPool":96}],119:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var objectPool = require('./objectPool');
-
-/**
- * Gets an object from the object pool or creates a new one if the pool is empty.
- *
- * @private
- * @returns {Object} The object from the pool.
- */
-function getObject() {
-  return objectPool.pop() || {
-    'array': null,
-    'cache': null,
-    'criteria': null,
-    'false': false,
-    'index': 0,
-    'null': false,
-    'number': null,
-    'object': null,
-    'push': null,
-    'string': null,
-    'true': false,
-    'undefined': false,
-    'value': null
-  };
-}
-
-module.exports = getObject;
-
-},{"./objectPool":127}],120:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * Used to convert characters to HTML entities:
- *
- * Though the `>` character is escaped for symmetry, characters like `>` and `/`
- * don't require escaping in HTML and have no special meaning unless they're part
- * of a tag or an unquoted attribute value.
- * http://mathiasbynens.be/notes/ambiguous-ampersands (under "semi-related fun fact")
- */
-var htmlEscapes = {
-  '&': '&amp;',
-  '<': '&lt;',
-  '>': '&gt;',
-  '"': '&quot;',
-  "'": '&#39;'
-};
-
-module.exports = htmlEscapes;
-
-},{}],121:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var htmlEscapes = require('./htmlEscapes'),
-    invert = require('../objects/invert');
-
-/** Used to convert HTML entities to characters */
-var htmlUnescapes = invert(htmlEscapes);
-
-module.exports = htmlUnescapes;
-
-},{"../objects/invert":153,"./htmlEscapes":120}],122:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Used to resolve the internal [[Class]] of values */
-var toString = objectProto.toString;
-
-/** Used to detect if a method is native */
-var reNative = RegExp('^' +
-  String(toString)
-    .replace(/[.*+?^${}()|[\]\\]/g, '\\$&')
-    .replace(/toString| for [^\]]+/g, '.*?') + '$'
-);
-
-/**
- * Checks if `value` is a native function.
- *
- * @private
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if the `value` is a native function, else `false`.
- */
-function isNative(value) {
-  return typeof value == 'function' && reNative.test(value);
-}
-
-module.exports = isNative;
-
-},{}],123:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** Used to prefix keys to avoid issues with `__proto__` and properties on `Object.prototype` */
-var keyPrefix = +new Date + '';
-
-module.exports = keyPrefix;
-
-},{}],124:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** Used as the size when optimizations are enabled for large arrays */
-var largeArraySize = 75;
-
-module.exports = largeArraySize;
-
-},{}],125:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * A fast path for creating `lodash` wrapper objects.
- *
- * @private
- * @param {*} value The value to wrap in a `lodash` instance.
- * @param {boolean} chainAll A flag to enable chaining for all methods
- * @returns {Object} Returns a `lodash` instance.
- */
-function lodashWrapper(value, chainAll) {
-  this.__chain__ = !!chainAll;
-  this.__wrapped__ = value;
-}
-
-module.exports = lodashWrapper;
-
-},{}],126:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** Used as the max size of the `arrayPool` and `objectPool` */
-var maxPoolSize = 40;
-
-module.exports = maxPoolSize;
-
-},{}],127:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** Used to pool arrays and objects used internally */
-var objectPool = [];
-
-module.exports = objectPool;
-
-},{}],128:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** Used to determine if values are of the language type Object */
-var objectTypes = {
-  'boolean': false,
-  'function': true,
-  'object': true,
-  'number': false,
-  'string': false,
-  'undefined': false
-};
-
-module.exports = objectTypes;
-
-},{}],129:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var htmlUnescapes = require('./htmlUnescapes'),
-    keys = require('../objects/keys');
-
-/** Used to match HTML entities and HTML characters */
-var reEscapedHtml = RegExp('(' + keys(htmlUnescapes).join('|') + ')', 'g');
-
-module.exports = reEscapedHtml;
-
-},{"../objects/keys":171,"./htmlUnescapes":121}],130:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** Used to match "interpolate" template delimiters */
-var reInterpolate = /<%=([\s\S]+?)%>/g;
-
-module.exports = reInterpolate;
-
-},{}],131:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var htmlEscapes = require('./htmlEscapes'),
-    keys = require('../objects/keys');
-
-/** Used to match HTML entities and HTML characters */
-var reUnescapedHtml = RegExp('[' + keys(htmlEscapes).join('') + ']', 'g');
-
-module.exports = reUnescapedHtml;
-
-},{"../objects/keys":171,"./htmlEscapes":120}],132:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var arrayPool = require('./arrayPool'),
-    maxPoolSize = require('./maxPoolSize');
-
-/**
- * Releases the given array back to the array pool.
- *
- * @private
- * @param {Array} [array] The array to release.
- */
-function releaseArray(array) {
-  array.length = 0;
-  if (arrayPool.length < maxPoolSize) {
-    arrayPool.push(array);
-  }
-}
-
-module.exports = releaseArray;
-
-},{"./arrayPool":96,"./maxPoolSize":126}],133:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var maxPoolSize = require('./maxPoolSize'),
-    objectPool = require('./objectPool');
-
-/**
- * Releases the given object back to the object pool.
- *
- * @private
- * @param {Object} [object] The object to release.
- */
-function releaseObject(object) {
-  var cache = object.cache;
-  if (cache) {
-    releaseObject(cache);
-  }
-  object.array = object.cache = object.criteria = object.object = object.number = object.string = object.value = null;
-  if (objectPool.length < maxPoolSize) {
-    objectPool.push(object);
-  }
-}
-
-module.exports = releaseObject;
-
-},{"./maxPoolSize":126,"./objectPool":127}],134:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isNative = require('./isNative'),
-    noop = require('../utilities/noop');
-
-/** Used as the property descriptor for `__bindData__` */
-var descriptor = {
-  'configurable': false,
-  'enumerable': false,
-  'value': null,
-  'writable': false
-};
-
-/** Used to set meta data on functions */
-var defineProperty = (function() {
-  // IE 8 only accepts DOM elements
-  try {
-    var o = {},
-        func = isNative(func = Object.defineProperty) && func,
-        result = func(o, o, o) && func;
-  } catch(e) { }
-  return result;
-}());
-
-/**
- * Sets `this` binding data on a given function.
- *
- * @private
- * @param {Function} func The function to set data on.
- * @param {Array} value The data array to set.
- */
-var setBindData = !defineProperty ? noop : function(func, value) {
-  descriptor.value = value;
-  defineProperty(func, '__bindData__', descriptor);
-};
-
-module.exports = setBindData;
-
-},{"../utilities/noop":186,"./isNative":122}],135:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var forIn = require('../objects/forIn'),
-    isFunction = require('../objects/isFunction');
-
-/** `Object#toString` result shortcuts */
-var objectClass = '[object Object]';
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Used to resolve the internal [[Class]] of values */
-var toString = objectProto.toString;
-
-/** Native method shortcuts */
-var hasOwnProperty = objectProto.hasOwnProperty;
-
-/**
- * A fallback implementation of `isPlainObject` which checks if a given value
- * is an object created by the `Object` constructor, assuming objects created
- * by the `Object` constructor have no inherited enumerable properties and that
- * there are no `Object.prototype` extensions.
- *
- * @private
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.
- */
-function shimIsPlainObject(value) {
-  var ctor,
-      result;
-
-  // avoid non Object objects, `arguments` objects, and DOM elements
-  if (!(value && toString.call(value) == objectClass) ||
-      (ctor = value.constructor, isFunction(ctor) && !(ctor instanceof ctor))) {
-    return false;
-  }
-  // In most environments an object's own properties are iterated before
-  // its inherited properties. If the last iterated property is an object's
-  // own property then there are no inherited enumerable properties.
-  forIn(value, function(value, key) {
-    result = key;
-  });
-  return typeof result == 'undefined' || hasOwnProperty.call(value, result);
-}
-
-module.exports = shimIsPlainObject;
-
-},{"../objects/forIn":147,"../objects/isFunction":162}],136:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var objectTypes = require('./objectTypes');
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Native method shortcuts */
-var hasOwnProperty = objectProto.hasOwnProperty;
-
-/**
- * A fallback implementation of `Object.keys` which produces an array of the
- * given object's own enumerable property names.
- *
- * @private
- * @type Function
- * @param {Object} object The object to inspect.
- * @returns {Array} Returns an array of property names.
- */
-var shimKeys = function(object) {
-  var index, iterable = object, result = [];
-  if (!iterable) return result;
-  if (!(objectTypes[typeof object])) return result;
-    for (index in iterable) {
-      if (hasOwnProperty.call(iterable, index)) {
-        result.push(index);
-      }
-    }
-  return result
-};
-
-module.exports = shimKeys;
-
-},{"./objectTypes":128}],137:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * Slices the `collection` from the `start` index up to, but not including,
- * the `end` index.
- *
- * Note: This function is used instead of `Array#slice` to support node lists
- * in IE < 9 and to ensure dense arrays are returned.
- *
- * @private
- * @param {Array|Object|string} collection The collection to slice.
- * @param {number} start The start index.
- * @param {number} end The end index.
- * @returns {Array} Returns the new array.
- */
-function slice(array, start, end) {
-  start || (start = 0);
-  if (typeof end == 'undefined') {
-    end = array ? array.length : 0;
-  }
-  var index = -1,
-      length = end - start || 0,
-      result = Array(length < 0 ? 0 : length);
-
-  while (++index < length) {
-    result[index] = array[start + index];
-  }
-  return result;
-}
-
-module.exports = slice;
-
-},{}],138:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var htmlUnescapes = require('./htmlUnescapes');
-
-/**
- * Used by `unescape` to convert HTML entities to characters.
- *
- * @private
- * @param {string} match The matched character to unescape.
- * @returns {string} Returns the unescaped character.
- */
-function unescapeHtmlChar(match) {
-  return htmlUnescapes[match];
-}
-
-module.exports = unescapeHtmlChar;
-
-},{"./htmlUnescapes":121}],139:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-module.exports = {
-  'assign': require('./objects/assign'),
-  'clone': require('./objects/clone'),
-  'cloneDeep': require('./objects/cloneDeep'),
-  'create': require('./objects/create'),
-  'defaults': require('./objects/defaults'),
-  'extend': require('./objects/assign'),
-  'findKey': require('./objects/findKey'),
-  'findLastKey': require('./objects/findLastKey'),
-  'forIn': require('./objects/forIn'),
-  'forInRight': require('./objects/forInRight'),
-  'forOwn': require('./objects/forOwn'),
-  'forOwnRight': require('./objects/forOwnRight'),
-  'functions': require('./objects/functions'),
-  'has': require('./objects/has'),
-  'invert': require('./objects/invert'),
-  'isArguments': require('./objects/isArguments'),
-  'isArray': require('./objects/isArray'),
-  'isBoolean': require('./objects/isBoolean'),
-  'isDate': require('./objects/isDate'),
-  'isElement': require('./objects/isElement'),
-  'isEmpty': require('./objects/isEmpty'),
-  'isEqual': require('./objects/isEqual'),
-  'isFinite': require('./objects/isFinite'),
-  'isFunction': require('./objects/isFunction'),
-  'isNaN': require('./objects/isNaN'),
-  'isNull': require('./objects/isNull'),
-  'isNumber': require('./objects/isNumber'),
-  'isObject': require('./objects/isObject'),
-  'isPlainObject': require('./objects/isPlainObject'),
-  'isRegExp': require('./objects/isRegExp'),
-  'isString': require('./objects/isString'),
-  'isUndefined': require('./objects/isUndefined'),
-  'keys': require('./objects/keys'),
-  'mapValues': require('./objects/mapValues'),
-  'merge': require('./objects/merge'),
-  'methods': require('./objects/functions'),
-  'omit': require('./objects/omit'),
-  'pairs': require('./objects/pairs'),
-  'pick': require('./objects/pick'),
-  'transform': require('./objects/transform'),
-  'values': require('./objects/values')
-};
-
-},{"./objects/assign":140,"./objects/clone":141,"./objects/cloneDeep":142,"./objects/create":143,"./objects/defaults":144,"./objects/findKey":145,"./objects/findLastKey":146,"./objects/forIn":147,"./objects/forInRight":148,"./objects/forOwn":149,"./objects/forOwnRight":150,"./objects/functions":151,"./objects/has":152,"./objects/invert":153,"./objects/isArguments":154,"./objects/isArray":155,"./objects/isBoolean":156,"./objects/isDate":157,"./objects/isElement":158,"./objects/isEmpty":159,"./objects/isEqual":160,"./objects/isFinite":161,"./objects/isFunction":162,"./objects/isNaN":163,"./objects/isNull":164,"./objects/isNumber":165,"./objects/isObject":166,"./objects/isPlainObject":167,"./objects/isRegExp":168,"./objects/isString":169,"./objects/isUndefined":170,"./objects/keys":171,"./objects/mapValues":172,"./objects/merge":173,"./objects/omit":174,"./objects/pairs":175,"./objects/pick":176,"./objects/transform":177,"./objects/values":178}],140:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseCreateCallback = require('../internals/baseCreateCallback'),
-    keys = require('./keys'),
-    objectTypes = require('../internals/objectTypes');
-
-/**
- * Assigns own enumerable properties of source object(s) to the destination
- * object. Subsequent sources will overwrite property assignments of previous
- * sources. If a callback is provided it will be executed to produce the
- * assigned values. The callback is bound to `thisArg` and invoked with two
- * arguments; (objectValue, sourceValue).
- *
- * @static
- * @memberOf _
- * @type Function
- * @alias extend
- * @category Objects
- * @param {Object} object The destination object.
- * @param {...Object} [source] The source objects.
- * @param {Function} [callback] The function to customize assigning values.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Object} Returns the destination object.
- * @example
- *
- * _.assign({ 'name': 'fred' }, { 'employer': 'slate' });
- * // => { 'name': 'fred', 'employer': 'slate' }
- *
- * var defaults = _.partialRight(_.assign, function(a, b) {
- *   return typeof a == 'undefined' ? b : a;
- * });
- *
- * var object = { 'name': 'barney' };
- * defaults(object, { 'name': 'fred', 'employer': 'slate' });
- * // => { 'name': 'barney', 'employer': 'slate' }
- */
-var assign = function(object, source, guard) {
-  var index, iterable = object, result = iterable;
-  if (!iterable) return result;
-  var args = arguments,
-      argsIndex = 0,
-      argsLength = typeof guard == 'number' ? 2 : args.length;
-  if (argsLength > 3 && typeof args[argsLength - 2] == 'function') {
-    var callback = baseCreateCallback(args[--argsLength - 1], args[argsLength--], 2);
-  } else if (argsLength > 2 && typeof args[argsLength - 1] == 'function') {
-    callback = args[--argsLength];
-  }
-  while (++argsIndex < argsLength) {
-    iterable = args[argsIndex];
-    if (iterable && objectTypes[typeof iterable]) {
-    var ownIndex = -1,
-        ownProps = objectTypes[typeof iterable] && keys(iterable),
-        length = ownProps ? ownProps.length : 0;
-
-    while (++ownIndex < length) {
-      index = ownProps[ownIndex];
-      result[index] = callback ? callback(result[index], iterable[index]) : iterable[index];
-    }
-    }
-  }
-  return result
-};
-
-module.exports = assign;
-
-},{"../internals/baseCreateCallback":100,"../internals/objectTypes":128,"./keys":171}],141:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseClone = require('../internals/baseClone'),
-    baseCreateCallback = require('../internals/baseCreateCallback');
-
-/**
- * Creates a clone of `value`. If `isDeep` is `true` nested objects will also
- * be cloned, otherwise they will be assigned by reference. If a callback
- * is provided it will be executed to produce the cloned values. If the
- * callback returns `undefined` cloning will be handled by the method instead.
- * The callback is bound to `thisArg` and invoked with one argument; (value).
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {*} value The value to clone.
- * @param {boolean} [isDeep=false] Specify a deep clone.
- * @param {Function} [callback] The function to customize cloning values.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {*} Returns the cloned value.
- * @example
- *
- * var characters = [
- *   { 'name': 'barney', 'age': 36 },
- *   { 'name': 'fred',   'age': 40 }
- * ];
- *
- * var shallow = _.clone(characters);
- * shallow[0] === characters[0];
- * // => true
- *
- * var deep = _.clone(characters, true);
- * deep[0] === characters[0];
- * // => false
- *
- * _.mixin({
- *   'clone': _.partialRight(_.clone, function(value) {
- *     return _.isElement(value) ? value.cloneNode(false) : undefined;
- *   })
- * });
- *
- * var clone = _.clone(document.body);
- * clone.childNodes.length;
- * // => 0
- */
-function clone(value, isDeep, callback, thisArg) {
-  // allows working with "Collections" methods without using their `index`
-  // and `collection` arguments for `isDeep` and `callback`
-  if (typeof isDeep != 'boolean' && isDeep != null) {
-    thisArg = callback;
-    callback = isDeep;
-    isDeep = false;
-  }
-  return baseClone(value, isDeep, typeof callback == 'function' && baseCreateCallback(callback, thisArg, 1));
-}
-
-module.exports = clone;
-
-},{"../internals/baseClone":98,"../internals/baseCreateCallback":100}],142:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseClone = require('../internals/baseClone'),
-    baseCreateCallback = require('../internals/baseCreateCallback');
-
-/**
- * Creates a deep clone of `value`. If a callback is provided it will be
- * executed to produce the cloned values. If the callback returns `undefined`
- * cloning will be handled by the method instead. The callback is bound to
- * `thisArg` and invoked with one argument; (value).
- *
- * Note: This method is loosely based on the structured clone algorithm. Functions
- * and DOM nodes are **not** cloned. The enumerable properties of `arguments` objects and
- * objects created by constructors other than `Object` are cloned to plain `Object` objects.
- * See http://www.w3.org/TR/html5/infrastructure.html#internal-structured-cloning-algorithm.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {*} value The value to deep clone.
- * @param {Function} [callback] The function to customize cloning values.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {*} Returns the deep cloned value.
- * @example
- *
- * var characters = [
- *   { 'name': 'barney', 'age': 36 },
- *   { 'name': 'fred',   'age': 40 }
- * ];
- *
- * var deep = _.cloneDeep(characters);
- * deep[0] === characters[0];
- * // => false
- *
- * var view = {
- *   'label': 'docs',
- *   'node': element
- * };
- *
- * var clone = _.cloneDeep(view, function(value) {
- *   return _.isElement(value) ? value.cloneNode(true) : undefined;
- * });
- *
- * clone.node == view.node;
- * // => false
- */
-function cloneDeep(value, callback, thisArg) {
-  return baseClone(value, true, typeof callback == 'function' && baseCreateCallback(callback, thisArg, 1));
-}
-
-module.exports = cloneDeep;
-
-},{"../internals/baseClone":98,"../internals/baseCreateCallback":100}],143:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var assign = require('./assign'),
-    baseCreate = require('../internals/baseCreate');
-
-/**
- * Creates an object that inherits from the given `prototype` object. If a
- * `properties` object is provided its own enumerable properties are assigned
- * to the created object.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {Object} prototype The object to inherit from.
- * @param {Object} [properties] The properties to assign to the object.
- * @returns {Object} Returns the new object.
- * @example
- *
- * function Shape() {
- *   this.x = 0;
- *   this.y = 0;
- * }
- *
- * function Circle() {
- *   Shape.call(this);
- * }
- *
- * Circle.prototype = _.create(Shape.prototype, { 'constructor': Circle });
- *
- * var circle = new Circle;
- * circle instanceof Circle;
- * // => true
- *
- * circle instanceof Shape;
- * // => true
- */
-function create(prototype, properties) {
-  var result = baseCreate(prototype);
-  return properties ? assign(result, properties) : result;
-}
-
-module.exports = create;
-
-},{"../internals/baseCreate":99,"./assign":140}],144:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var keys = require('./keys'),
-    objectTypes = require('../internals/objectTypes');
-
-/**
- * Assigns own enumerable properties of source object(s) to the destination
- * object for all destination properties that resolve to `undefined`. Once a
- * property is set, additional defaults of the same property will be ignored.
- *
- * @static
- * @memberOf _
- * @type Function
- * @category Objects
- * @param {Object} object The destination object.
- * @param {...Object} [source] The source objects.
- * @param- {Object} [guard] Allows working with `_.reduce` without using its
- *  `key` and `object` arguments as sources.
- * @returns {Object} Returns the destination object.
- * @example
- *
- * var object = { 'name': 'barney' };
- * _.defaults(object, { 'name': 'fred', 'employer': 'slate' });
- * // => { 'name': 'barney', 'employer': 'slate' }
- */
-var defaults = function(object, source, guard) {
-  var index, iterable = object, result = iterable;
-  if (!iterable) return result;
-  var args = arguments,
-      argsIndex = 0,
-      argsLength = typeof guard == 'number' ? 2 : args.length;
-  while (++argsIndex < argsLength) {
-    iterable = args[argsIndex];
-    if (iterable && objectTypes[typeof iterable]) {
-    var ownIndex = -1,
-        ownProps = objectTypes[typeof iterable] && keys(iterable),
-        length = ownProps ? ownProps.length : 0;
-
-    while (++ownIndex < length) {
-      index = ownProps[ownIndex];
-      if (typeof result[index] == 'undefined') result[index] = iterable[index];
-    }
-    }
-  }
-  return result
-};
-
-module.exports = defaults;
-
-},{"../internals/objectTypes":128,"./keys":171}],145:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback'),
-    forOwn = require('./forOwn');
-
-/**
- * This method is like `_.findIndex` except that it returns the key of the
- * first element that passes the callback check, instead of the element itself.
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {Object} object The object to search.
- * @param {Function|Object|string} [callback=identity] The function called per
- *  iteration. If a property name or object is provided it will be used to
- *  create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {string|undefined} Returns the key of the found element, else `undefined`.
- * @example
- *
- * var characters = {
- *   'barney': {  'age': 36, 'blocked': false },
- *   'fred': {    'age': 40, 'blocked': true },
- *   'pebbles': { 'age': 1,  'blocked': false }
- * };
- *
- * _.findKey(characters, function(chr) {
- *   return chr.age < 40;
- * });
- * // => 'barney' (property order is not guaranteed across environments)
- *
- * // using "_.where" callback shorthand
- * _.findKey(characters, { 'age': 1 });
- * // => 'pebbles'
- *
- * // using "_.pluck" callback shorthand
- * _.findKey(characters, 'blocked');
- * // => 'fred'
- */
-function findKey(object, callback, thisArg) {
-  var result;
-  callback = createCallback(callback, thisArg, 3);
-  forOwn(object, function(value, key, object) {
-    if (callback(value, key, object)) {
-      result = key;
-      return false;
-    }
-  });
-  return result;
-}
-
-module.exports = findKey;
-
-},{"../functions/createCallback":84,"./forOwn":149}],146:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback'),
-    forOwnRight = require('./forOwnRight');
-
-/**
- * This method is like `_.findKey` except that it iterates over elements
- * of a `collection` in the opposite order.
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {Object} object The object to search.
- * @param {Function|Object|string} [callback=identity] The function called per
- *  iteration. If a property name or object is provided it will be used to
- *  create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {string|undefined} Returns the key of the found element, else `undefined`.
- * @example
- *
- * var characters = {
- *   'barney': {  'age': 36, 'blocked': true },
- *   'fred': {    'age': 40, 'blocked': false },
- *   'pebbles': { 'age': 1,  'blocked': true }
- * };
- *
- * _.findLastKey(characters, function(chr) {
- *   return chr.age < 40;
- * });
- * // => returns `pebbles`, assuming `_.findKey` returns `barney`
- *
- * // using "_.where" callback shorthand
- * _.findLastKey(characters, { 'age': 40 });
- * // => 'fred'
- *
- * // using "_.pluck" callback shorthand
- * _.findLastKey(characters, 'blocked');
- * // => 'pebbles'
- */
-function findLastKey(object, callback, thisArg) {
-  var result;
-  callback = createCallback(callback, thisArg, 3);
-  forOwnRight(object, function(value, key, object) {
-    if (callback(value, key, object)) {
-      result = key;
-      return false;
-    }
-  });
-  return result;
-}
-
-module.exports = findLastKey;
-
-},{"../functions/createCallback":84,"./forOwnRight":150}],147:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseCreateCallback = require('../internals/baseCreateCallback'),
-    objectTypes = require('../internals/objectTypes');
-
-/**
- * Iterates over own and inherited enumerable properties of an object,
- * executing the callback for each property. The callback is bound to `thisArg`
- * and invoked with three arguments; (value, key, object). Callbacks may exit
- * iteration early by explicitly returning `false`.
- *
- * @static
- * @memberOf _
- * @type Function
- * @category Objects
- * @param {Object} object The object to iterate over.
- * @param {Function} [callback=identity] The function called per iteration.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Object} Returns `object`.
- * @example
- *
- * function Shape() {
- *   this.x = 0;
- *   this.y = 0;
- * }
- *
- * Shape.prototype.move = function(x, y) {
- *   this.x += x;
- *   this.y += y;
- * };
- *
- * _.forIn(new Shape, function(value, key) {
- *   console.log(key);
- * });
- * // => logs 'x', 'y', and 'move' (property order is not guaranteed across environments)
- */
-var forIn = function(collection, callback, thisArg) {
-  var index, iterable = collection, result = iterable;
-  if (!iterable) return result;
-  if (!objectTypes[typeof iterable]) return result;
-  callback = callback && typeof thisArg == 'undefined' ? callback : baseCreateCallback(callback, thisArg, 3);
-    for (index in iterable) {
-      if (callback(iterable[index], index, collection) === false) return result;
-    }
-  return result
-};
-
-module.exports = forIn;
-
-},{"../internals/baseCreateCallback":100,"../internals/objectTypes":128}],148:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseCreateCallback = require('../internals/baseCreateCallback'),
-    forIn = require('./forIn');
-
-/**
- * This method is like `_.forIn` except that it iterates over elements
- * of a `collection` in the opposite order.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {Object} object The object to iterate over.
- * @param {Function} [callback=identity] The function called per iteration.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Object} Returns `object`.
- * @example
- *
- * function Shape() {
- *   this.x = 0;
- *   this.y = 0;
- * }
- *
- * Shape.prototype.move = function(x, y) {
- *   this.x += x;
- *   this.y += y;
- * };
- *
- * _.forInRight(new Shape, function(value, key) {
- *   console.log(key);
- * });
- * // => logs 'move', 'y', and 'x' assuming `_.forIn ` logs 'x', 'y', and 'move'
- */
-function forInRight(object, callback, thisArg) {
-  var pairs = [];
-
-  forIn(object, function(value, key) {
-    pairs.push(key, value);
-  });
-
-  var length = pairs.length;
-  callback = baseCreateCallback(callback, thisArg, 3);
-  while (length--) {
-    if (callback(pairs[length--], pairs[length], object) === false) {
-      break;
-    }
-  }
-  return object;
-}
-
-module.exports = forInRight;
-
-},{"../internals/baseCreateCallback":100,"./forIn":147}],149:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseCreateCallback = require('../internals/baseCreateCallback'),
-    keys = require('./keys'),
-    objectTypes = require('../internals/objectTypes');
-
-/**
- * Iterates over own enumerable properties of an object, executing the callback
- * for each property. The callback is bound to `thisArg` and invoked with three
- * arguments; (value, key, object). Callbacks may exit iteration early by
- * explicitly returning `false`.
- *
- * @static
- * @memberOf _
- * @type Function
- * @category Objects
- * @param {Object} object The object to iterate over.
- * @param {Function} [callback=identity] The function called per iteration.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Object} Returns `object`.
- * @example
- *
- * _.forOwn({ '0': 'zero', '1': 'one', 'length': 2 }, function(num, key) {
- *   console.log(key);
- * });
- * // => logs '0', '1', and 'length' (property order is not guaranteed across environments)
- */
-var forOwn = function(collection, callback, thisArg) {
-  var index, iterable = collection, result = iterable;
-  if (!iterable) return result;
-  if (!objectTypes[typeof iterable]) return result;
-  callback = callback && typeof thisArg == 'undefined' ? callback : baseCreateCallback(callback, thisArg, 3);
-    var ownIndex = -1,
-        ownProps = objectTypes[typeof iterable] && keys(iterable),
-        length = ownProps ? ownProps.length : 0;
-
-    while (++ownIndex < length) {
-      index = ownProps[ownIndex];
-      if (callback(iterable[index], index, collection) === false) return result;
-    }
-  return result
-};
-
-module.exports = forOwn;
-
-},{"../internals/baseCreateCallback":100,"../internals/objectTypes":128,"./keys":171}],150:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseCreateCallback = require('../internals/baseCreateCallback'),
-    keys = require('./keys');
-
-/**
- * This method is like `_.forOwn` except that it iterates over elements
- * of a `collection` in the opposite order.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {Object} object The object to iterate over.
- * @param {Function} [callback=identity] The function called per iteration.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Object} Returns `object`.
- * @example
- *
- * _.forOwnRight({ '0': 'zero', '1': 'one', 'length': 2 }, function(num, key) {
- *   console.log(key);
- * });
- * // => logs 'length', '1', and '0' assuming `_.forOwn` logs '0', '1', and 'length'
- */
-function forOwnRight(object, callback, thisArg) {
-  var props = keys(object),
-      length = props.length;
-
-  callback = baseCreateCallback(callback, thisArg, 3);
-  while (length--) {
-    var key = props[length];
-    if (callback(object[key], key, object) === false) {
-      break;
-    }
-  }
-  return object;
-}
-
-module.exports = forOwnRight;
-
-},{"../internals/baseCreateCallback":100,"./keys":171}],151:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var forIn = require('./forIn'),
-    isFunction = require('./isFunction');
-
-/**
- * Creates a sorted array of property names of all enumerable properties,
- * own and inherited, of `object` that have function values.
- *
- * @static
- * @memberOf _
- * @alias methods
- * @category Objects
- * @param {Object} object The object to inspect.
- * @returns {Array} Returns an array of property names that have function values.
- * @example
- *
- * _.functions(_);
- * // => ['all', 'any', 'bind', 'bindAll', 'clone', 'compact', 'compose', ...]
- */
-function functions(object) {
-  var result = [];
-  forIn(object, function(value, key) {
-    if (isFunction(value)) {
-      result.push(key);
-    }
-  });
-  return result.sort();
-}
-
-module.exports = functions;
-
-},{"./forIn":147,"./isFunction":162}],152:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Native method shortcuts */
-var hasOwnProperty = objectProto.hasOwnProperty;
-
-/**
- * Checks if the specified property name exists as a direct property of `object`,
- * instead of an inherited property.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {Object} object The object to inspect.
- * @param {string} key The name of the property to check.
- * @returns {boolean} Returns `true` if key is a direct property, else `false`.
- * @example
- *
- * _.has({ 'a': 1, 'b': 2, 'c': 3 }, 'b');
- * // => true
- */
-function has(object, key) {
-  return object ? hasOwnProperty.call(object, key) : false;
-}
-
-module.exports = has;
-
-},{}],153:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var keys = require('./keys');
-
-/**
- * Creates an object composed of the inverted keys and values of the given object.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {Object} object The object to invert.
- * @returns {Object} Returns the created inverted object.
- * @example
- *
- * _.invert({ 'first': 'fred', 'second': 'barney' });
- * // => { 'fred': 'first', 'barney': 'second' }
- */
-function invert(object) {
-  var index = -1,
-      props = keys(object),
-      length = props.length,
-      result = {};
-
-  while (++index < length) {
-    var key = props[index];
-    result[object[key]] = key;
-  }
-  return result;
-}
-
-module.exports = invert;
-
-},{"./keys":171}],154:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** `Object#toString` result shortcuts */
-var argsClass = '[object Arguments]';
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Used to resolve the internal [[Class]] of values */
-var toString = objectProto.toString;
-
-/**
- * Checks if `value` is an `arguments` object.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if the `value` is an `arguments` object, else `false`.
- * @example
- *
- * (function() { return _.isArguments(arguments); })(1, 2, 3);
- * // => true
- *
- * _.isArguments([1, 2, 3]);
- * // => false
- */
-function isArguments(value) {
-  return value && typeof value == 'object' && typeof value.length == 'number' &&
-    toString.call(value) == argsClass || false;
-}
-
-module.exports = isArguments;
-
-},{}],155:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isNative = require('../internals/isNative');
-
-/** `Object#toString` result shortcuts */
-var arrayClass = '[object Array]';
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Used to resolve the internal [[Class]] of values */
-var toString = objectProto.toString;
-
-/* Native method shortcuts for methods with the same name as other `lodash` methods */
-var nativeIsArray = isNative(nativeIsArray = Array.isArray) && nativeIsArray;
-
-/**
- * Checks if `value` is an array.
- *
- * @static
- * @memberOf _
- * @type Function
- * @category Objects
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if the `value` is an array, else `false`.
- * @example
- *
- * (function() { return _.isArray(arguments); })();
- * // => false
- *
- * _.isArray([1, 2, 3]);
- * // => true
- */
-var isArray = nativeIsArray || function(value) {
-  return value && typeof value == 'object' && typeof value.length == 'number' &&
-    toString.call(value) == arrayClass || false;
-};
-
-module.exports = isArray;
-
-},{"../internals/isNative":122}],156:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** `Object#toString` result shortcuts */
-var boolClass = '[object Boolean]';
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Used to resolve the internal [[Class]] of values */
-var toString = objectProto.toString;
-
-/**
- * Checks if `value` is a boolean value.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if the `value` is a boolean value, else `false`.
- * @example
- *
- * _.isBoolean(null);
- * // => false
- */
-function isBoolean(value) {
-  return value === true || value === false ||
-    value && typeof value == 'object' && toString.call(value) == boolClass || false;
-}
-
-module.exports = isBoolean;
-
-},{}],157:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** `Object#toString` result shortcuts */
-var dateClass = '[object Date]';
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Used to resolve the internal [[Class]] of values */
-var toString = objectProto.toString;
-
-/**
- * Checks if `value` is a date.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if the `value` is a date, else `false`.
- * @example
- *
- * _.isDate(new Date);
- * // => true
- */
-function isDate(value) {
-  return value && typeof value == 'object' && toString.call(value) == dateClass || false;
-}
-
-module.exports = isDate;
-
-},{}],158:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * Checks if `value` is a DOM element.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if the `value` is a DOM element, else `false`.
- * @example
- *
- * _.isElement(document.body);
- * // => true
- */
-function isElement(value) {
-  return value && value.nodeType === 1 || false;
-}
-
-module.exports = isElement;
-
-},{}],159:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var forOwn = require('./forOwn'),
-    isFunction = require('./isFunction');
-
-/** `Object#toString` result shortcuts */
-var argsClass = '[object Arguments]',
-    arrayClass = '[object Array]',
-    objectClass = '[object Object]',
-    stringClass = '[object String]';
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Used to resolve the internal [[Class]] of values */
-var toString = objectProto.toString;
-
-/**
- * Checks if `value` is empty. Arrays, strings, or `arguments` objects with a
- * length of `0` and objects with no own enumerable properties are considered
- * "empty".
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {Array|Object|string} value The value to inspect.
- * @returns {boolean} Returns `true` if the `value` is empty, else `false`.
- * @example
- *
- * _.isEmpty([1, 2, 3]);
- * // => false
- *
- * _.isEmpty({});
- * // => true
- *
- * _.isEmpty('');
- * // => true
- */
-function isEmpty(value) {
-  var result = true;
-  if (!value) {
-    return result;
-  }
-  var className = toString.call(value),
-      length = value.length;
-
-  if ((className == arrayClass || className == stringClass || className == argsClass ) ||
-      (className == objectClass && typeof length == 'number' && isFunction(value.splice))) {
-    return !length;
-  }
-  forOwn(value, function() {
-    return (result = false);
-  });
-  return result;
-}
-
-module.exports = isEmpty;
-
-},{"./forOwn":149,"./isFunction":162}],160:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseCreateCallback = require('../internals/baseCreateCallback'),
-    baseIsEqual = require('../internals/baseIsEqual');
-
-/**
- * Performs a deep comparison between two values to determine if they are
- * equivalent to each other. If a callback is provided it will be executed
- * to compare values. If the callback returns `undefined` comparisons will
- * be handled by the method instead. The callback is bound to `thisArg` and
- * invoked with two arguments; (a, b).
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {*} a The value to compare.
- * @param {*} b The other value to compare.
- * @param {Function} [callback] The function to customize comparing values.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
- * @example
- *
- * var object = { 'name': 'fred' };
- * var copy = { 'name': 'fred' };
- *
- * object == copy;
- * // => false
- *
- * _.isEqual(object, copy);
- * // => true
- *
- * var words = ['hello', 'goodbye'];
- * var otherWords = ['hi', 'goodbye'];
- *
- * _.isEqual(words, otherWords, function(a, b) {
- *   var reGreet = /^(?:hello|hi)$/i,
- *       aGreet = _.isString(a) && reGreet.test(a),
- *       bGreet = _.isString(b) && reGreet.test(b);
- *
- *   return (aGreet || bGreet) ? (aGreet == bGreet) : undefined;
- * });
- * // => true
- */
-function isEqual(a, b, callback, thisArg) {
-  return baseIsEqual(a, b, typeof callback == 'function' && baseCreateCallback(callback, thisArg, 2));
-}
-
-module.exports = isEqual;
-
-},{"../internals/baseCreateCallback":100,"../internals/baseIsEqual":105}],161:[function(require,module,exports){
-(function (global){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/* Native method shortcuts for methods with the same name as other `lodash` methods */
-var nativeIsFinite = global.isFinite,
-    nativeIsNaN = global.isNaN;
-
-/**
- * Checks if `value` is, or can be coerced to, a finite number.
- *
- * Note: This is not the same as native `isFinite` which will return true for
- * booleans and empty strings. See http://es5.github.io/#x15.1.2.5.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if the `value` is finite, else `false`.
- * @example
- *
- * _.isFinite(-101);
- * // => true
- *
- * _.isFinite('10');
- * // => true
- *
- * _.isFinite(true);
- * // => false
- *
- * _.isFinite('');
- * // => false
- *
- * _.isFinite(Infinity);
- * // => false
- */
-function isFinite(value) {
-  return nativeIsFinite(value) && !nativeIsNaN(parseFloat(value));
-}
-
-module.exports = isFinite;
-
-}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
-},{}],162:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * Checks if `value` is a function.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if the `value` is a function, else `false`.
- * @example
- *
- * _.isFunction(_);
- * // => true
- */
-function isFunction(value) {
-  return typeof value == 'function';
-}
-
-module.exports = isFunction;
-
-},{}],163:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isNumber = require('./isNumber');
-
-/**
- * Checks if `value` is `NaN`.
- *
- * Note: This is not the same as native `isNaN` which will return `true` for
- * `undefined` and other non-numeric values. See http://es5.github.io/#x15.1.2.4.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if the `value` is `NaN`, else `false`.
- * @example
- *
- * _.isNaN(NaN);
- * // => true
- *
- * _.isNaN(new Number(NaN));
- * // => true
- *
- * isNaN(undefined);
- * // => true
- *
- * _.isNaN(undefined);
- * // => false
- */
-function isNaN(value) {
-  // `NaN` as a primitive is the only value that is not equal to itself
-  // (perform the [[Class]] check first to avoid errors with some host objects in IE)
-  return isNumber(value) && value != +value;
-}
-
-module.exports = isNaN;
-
-},{"./isNumber":165}],164:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * Checks if `value` is `null`.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if the `value` is `null`, else `false`.
- * @example
- *
- * _.isNull(null);
- * // => true
- *
- * _.isNull(undefined);
- * // => false
- */
-function isNull(value) {
-  return value === null;
-}
-
-module.exports = isNull;
-
-},{}],165:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** `Object#toString` result shortcuts */
-var numberClass = '[object Number]';
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Used to resolve the internal [[Class]] of values */
-var toString = objectProto.toString;
-
-/**
- * Checks if `value` is a number.
- *
- * Note: `NaN` is considered a number. See http://es5.github.io/#x8.5.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if the `value` is a number, else `false`.
- * @example
- *
- * _.isNumber(8.4 * 5);
- * // => true
- */
-function isNumber(value) {
-  return typeof value == 'number' ||
-    value && typeof value == 'object' && toString.call(value) == numberClass || false;
-}
-
-module.exports = isNumber;
-
-},{}],166:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var objectTypes = require('../internals/objectTypes');
-
-/**
- * Checks if `value` is the language type of Object.
- * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if the `value` is an object, else `false`.
- * @example
- *
- * _.isObject({});
- * // => true
- *
- * _.isObject([1, 2, 3]);
- * // => true
- *
- * _.isObject(1);
- * // => false
- */
-function isObject(value) {
-  // check if the value is the ECMAScript language type of Object
-  // http://es5.github.io/#x8
-  // and avoid a V8 bug
-  // http://code.google.com/p/v8/issues/detail?id=2291
-  return !!(value && objectTypes[typeof value]);
-}
-
-module.exports = isObject;
-
-},{"../internals/objectTypes":128}],167:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isNative = require('../internals/isNative'),
-    shimIsPlainObject = require('../internals/shimIsPlainObject');
-
-/** `Object#toString` result shortcuts */
-var objectClass = '[object Object]';
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Used to resolve the internal [[Class]] of values */
-var toString = objectProto.toString;
-
-/** Native method shortcuts */
-var getPrototypeOf = isNative(getPrototypeOf = Object.getPrototypeOf) && getPrototypeOf;
-
-/**
- * Checks if `value` is an object created by the `Object` constructor.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.
- * @example
- *
- * function Shape() {
- *   this.x = 0;
- *   this.y = 0;
- * }
- *
- * _.isPlainObject(new Shape);
- * // => false
- *
- * _.isPlainObject([1, 2, 3]);
- * // => false
- *
- * _.isPlainObject({ 'x': 0, 'y': 0 });
- * // => true
- */
-var isPlainObject = !getPrototypeOf ? shimIsPlainObject : function(value) {
-  if (!(value && toString.call(value) == objectClass)) {
-    return false;
-  }
-  var valueOf = value.valueOf,
-      objProto = isNative(valueOf) && (objProto = getPrototypeOf(valueOf)) && getPrototypeOf(objProto);
-
-  return objProto
-    ? (value == objProto || getPrototypeOf(value) == objProto)
-    : shimIsPlainObject(value);
-};
-
-module.exports = isPlainObject;
-
-},{"../internals/isNative":122,"../internals/shimIsPlainObject":135}],168:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** `Object#toString` result shortcuts */
-var regexpClass = '[object RegExp]';
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Used to resolve the internal [[Class]] of values */
-var toString = objectProto.toString;
-
-/**
- * Checks if `value` is a regular expression.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if the `value` is a regular expression, else `false`.
- * @example
- *
- * _.isRegExp(/fred/);
- * // => true
- */
-function isRegExp(value) {
-  return value && typeof value == 'object' && toString.call(value) == regexpClass || false;
-}
-
-module.exports = isRegExp;
-
-},{}],169:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** `Object#toString` result shortcuts */
-var stringClass = '[object String]';
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Used to resolve the internal [[Class]] of values */
-var toString = objectProto.toString;
-
-/**
- * Checks if `value` is a string.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if the `value` is a string, else `false`.
- * @example
- *
- * _.isString('fred');
- * // => true
- */
-function isString(value) {
-  return typeof value == 'string' ||
-    value && typeof value == 'object' && toString.call(value) == stringClass || false;
-}
-
-module.exports = isString;
-
-},{}],170:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * Checks if `value` is `undefined`.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if the `value` is `undefined`, else `false`.
- * @example
- *
- * _.isUndefined(void 0);
- * // => true
- */
-function isUndefined(value) {
-  return typeof value == 'undefined';
-}
-
-module.exports = isUndefined;
-
-},{}],171:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isNative = require('../internals/isNative'),
-    isObject = require('./isObject'),
-    shimKeys = require('../internals/shimKeys');
-
-/* Native method shortcuts for methods with the same name as other `lodash` methods */
-var nativeKeys = isNative(nativeKeys = Object.keys) && nativeKeys;
-
-/**
- * Creates an array composed of the own enumerable property names of an object.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {Object} object The object to inspect.
- * @returns {Array} Returns an array of property names.
- * @example
- *
- * _.keys({ 'one': 1, 'two': 2, 'three': 3 });
- * // => ['one', 'two', 'three'] (property order is not guaranteed across environments)
- */
-var keys = !nativeKeys ? shimKeys : function(object) {
-  if (!isObject(object)) {
-    return [];
-  }
-  return nativeKeys(object);
-};
-
-module.exports = keys;
-
-},{"../internals/isNative":122,"../internals/shimKeys":136,"./isObject":166}],172:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback'),
-    forOwn = require('./forOwn');
-
-/**
- * Creates an object with the same keys as `object` and values generated by
- * running each own enumerable property of `object` through the callback.
- * The callback is bound to `thisArg` and invoked with three arguments;
- * (value, key, object).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {Object} object The object to iterate over.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Array} Returns a new object with values of the results of each `callback` execution.
- * @example
- *
- * _.mapValues({ 'a': 1, 'b': 2, 'c': 3} , function(num) { return num * 3; });
- * // => { 'a': 3, 'b': 6, 'c': 9 }
- *
- * var characters = {
- *   'fred': { 'name': 'fred', 'age': 40 },
- *   'pebbles': { 'name': 'pebbles', 'age': 1 }
- * };
- *
- * // using "_.pluck" callback shorthand
- * _.mapValues(characters, 'age');
- * // => { 'fred': 40, 'pebbles': 1 }
- */
-function mapValues(object, callback, thisArg) {
-  var result = {};
-  callback = createCallback(callback, thisArg, 3);
-
-  forOwn(object, function(value, key, object) {
-    result[key] = callback(value, key, object);
-  });
-  return result;
-}
-
-module.exports = mapValues;
-
-},{"../functions/createCallback":84,"./forOwn":149}],173:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseCreateCallback = require('../internals/baseCreateCallback'),
-    baseMerge = require('../internals/baseMerge'),
-    getArray = require('../internals/getArray'),
-    isObject = require('./isObject'),
-    releaseArray = require('../internals/releaseArray'),
-    slice = require('../internals/slice');
-
-/**
- * Recursively merges own enumerable properties of the source object(s), that
- * don't resolve to `undefined` into the destination object. Subsequent sources
- * will overwrite property assignments of previous sources. If a callback is
- * provided it will be executed to produce the merged values of the destination
- * and source properties. If the callback returns `undefined` merging will
- * be handled by the method instead. The callback is bound to `thisArg` and
- * invoked with two arguments; (objectValue, sourceValue).
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {Object} object The destination object.
- * @param {...Object} [source] The source objects.
- * @param {Function} [callback] The function to customize merging properties.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Object} Returns the destination object.
- * @example
- *
- * var names = {
- *   'characters': [
- *     { 'name': 'barney' },
- *     { 'name': 'fred' }
- *   ]
- * };
- *
- * var ages = {
- *   'characters': [
- *     { 'age': 36 },
- *     { 'age': 40 }
- *   ]
- * };
- *
- * _.merge(names, ages);
- * // => { 'characters': [{ 'name': 'barney', 'age': 36 }, { 'name': 'fred', 'age': 40 }] }
- *
- * var food = {
- *   'fruits': ['apple'],
- *   'vegetables': ['beet']
- * };
- *
- * var otherFood = {
- *   'fruits': ['banana'],
- *   'vegetables': ['carrot']
- * };
- *
- * _.merge(food, otherFood, function(a, b) {
- *   return _.isArray(a) ? a.concat(b) : undefined;
- * });
- * // => { 'fruits': ['apple', 'banana'], 'vegetables': ['beet', 'carrot] }
- */
-function merge(object) {
-  var args = arguments,
-      length = 2;
-
-  if (!isObject(object)) {
-    return object;
-  }
-  // allows working with `_.reduce` and `_.reduceRight` without using
-  // their `index` and `collection` arguments
-  if (typeof args[2] != 'number') {
-    length = args.length;
-  }
-  if (length > 3 && typeof args[length - 2] == 'function') {
-    var callback = baseCreateCallback(args[--length - 1], args[length--], 2);
-  } else if (length > 2 && typeof args[length - 1] == 'function') {
-    callback = args[--length];
-  }
-  var sources = slice(arguments, 1, length),
-      index = -1,
-      stackA = getArray(),
-      stackB = getArray();
-
-  while (++index < length) {
-    baseMerge(object, sources[index], callback, stackA, stackB);
-  }
-  releaseArray(stackA);
-  releaseArray(stackB);
-  return object;
-}
-
-module.exports = merge;
-
-},{"../internals/baseCreateCallback":100,"../internals/baseMerge":106,"../internals/getArray":118,"../internals/releaseArray":132,"../internals/slice":137,"./isObject":166}],174:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseDifference = require('../internals/baseDifference'),
-    baseFlatten = require('../internals/baseFlatten'),
-    createCallback = require('../functions/createCallback'),
-    forIn = require('./forIn');
-
-/**
- * Creates a shallow clone of `object` excluding the specified properties.
- * Property names may be specified as individual arguments or as arrays of
- * property names. If a callback is provided it will be executed for each
- * property of `object` omitting the properties the callback returns truey
- * for. The callback is bound to `thisArg` and invoked with three arguments;
- * (value, key, object).
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {Object} object The source object.
- * @param {Function|...string|string[]} [callback] The properties to omit or the
- *  function called per iteration.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Object} Returns an object without the omitted properties.
- * @example
- *
- * _.omit({ 'name': 'fred', 'age': 40 }, 'age');
- * // => { 'name': 'fred' }
- *
- * _.omit({ 'name': 'fred', 'age': 40 }, function(value) {
- *   return typeof value == 'number';
- * });
- * // => { 'name': 'fred' }
- */
-function omit(object, callback, thisArg) {
-  var result = {};
-  if (typeof callback != 'function') {
-    var props = [];
-    forIn(object, function(value, key) {
-      props.push(key);
-    });
-    props = baseDifference(props, baseFlatten(arguments, true, false, 1));
-
-    var index = -1,
-        length = props.length;
-
-    while (++index < length) {
-      var key = props[index];
-      result[key] = object[key];
-    }
-  } else {
-    callback = createCallback(callback, thisArg, 3);
-    forIn(object, function(value, key, object) {
-      if (!callback(value, key, object)) {
-        result[key] = value;
-      }
-    });
-  }
-  return result;
-}
-
-module.exports = omit;
-
-},{"../functions/createCallback":84,"../internals/baseDifference":102,"../internals/baseFlatten":103,"./forIn":147}],175:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var keys = require('./keys');
-
-/**
- * Creates a two dimensional array of an object's key-value pairs,
- * i.e. `[[key1, value1], [key2, value2]]`.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {Object} object The object to inspect.
- * @returns {Array} Returns new array of key-value pairs.
- * @example
- *
- * _.pairs({ 'barney': 36, 'fred': 40 });
- * // => [['barney', 36], ['fred', 40]] (property order is not guaranteed across environments)
- */
-function pairs(object) {
-  var index = -1,
-      props = keys(object),
-      length = props.length,
-      result = Array(length);
-
-  while (++index < length) {
-    var key = props[index];
-    result[index] = [key, object[key]];
-  }
-  return result;
-}
-
-module.exports = pairs;
-
-},{"./keys":171}],176:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseFlatten = require('../internals/baseFlatten'),
-    createCallback = require('../functions/createCallback'),
-    forIn = require('./forIn'),
-    isObject = require('./isObject');
-
-/**
- * Creates a shallow clone of `object` composed of the specified properties.
- * Property names may be specified as individual arguments or as arrays of
- * property names. If a callback is provided it will be executed for each
- * property of `object` picking the properties the callback returns truey
- * for. The callback is bound to `thisArg` and invoked with three arguments;
- * (value, key, object).
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {Object} object The source object.
- * @param {Function|...string|string[]} [callback] The function called per
- *  iteration or property names to pick, specified as individual property
- *  names or arrays of property names.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Object} Returns an object composed of the picked properties.
- * @example
- *
- * _.pick({ 'name': 'fred', '_userid': 'fred1' }, 'name');
- * // => { 'name': 'fred' }
- *
- * _.pick({ 'name': 'fred', '_userid': 'fred1' }, function(value, key) {
- *   return key.charAt(0) != '_';
- * });
- * // => { 'name': 'fred' }
- */
-function pick(object, callback, thisArg) {
-  var result = {};
-  if (typeof callback != 'function') {
-    var index = -1,
-        props = baseFlatten(arguments, true, false, 1),
-        length = isObject(object) ? props.length : 0;
-
-    while (++index < length) {
-      var key = props[index];
-      if (key in object) {
-        result[key] = object[key];
-      }
-    }
-  } else {
-    callback = createCallback(callback, thisArg, 3);
-    forIn(object, function(value, key, object) {
-      if (callback(value, key, object)) {
-        result[key] = value;
-      }
-    });
-  }
-  return result;
-}
-
-module.exports = pick;
-
-},{"../functions/createCallback":84,"../internals/baseFlatten":103,"./forIn":147,"./isObject":166}],177:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseCreate = require('../internals/baseCreate'),
-    createCallback = require('../functions/createCallback'),
-    forEach = require('../collections/forEach'),
-    forOwn = require('./forOwn'),
-    isArray = require('./isArray');
-
-/**
- * An alternative to `_.reduce` this method transforms `object` to a new
- * `accumulator` object which is the result of running each of its own
- * enumerable properties through a callback, with each callback execution
- * potentially mutating the `accumulator` object. The callback is bound to
- * `thisArg` and invoked with four arguments; (accumulator, value, key, object).
- * Callbacks may exit iteration early by explicitly returning `false`.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {Array|Object} object The object to iterate over.
- * @param {Function} [callback=identity] The function called per iteration.
- * @param {*} [accumulator] The custom accumulator value.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {*} Returns the accumulated value.
- * @example
- *
- * var squares = _.transform([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], function(result, num) {
- *   num *= num;
- *   if (num % 2) {
- *     return result.push(num) < 3;
- *   }
- * });
- * // => [1, 9, 25]
- *
- * var mapped = _.transform({ 'a': 1, 'b': 2, 'c': 3 }, function(result, num, key) {
- *   result[key] = num * 3;
- * });
- * // => { 'a': 3, 'b': 6, 'c': 9 }
- */
-function transform(object, callback, accumulator, thisArg) {
-  var isArr = isArray(object);
-  if (accumulator == null) {
-    if (isArr) {
-      accumulator = [];
-    } else {
-      var ctor = object && object.constructor,
-          proto = ctor && ctor.prototype;
-
-      accumulator = baseCreate(proto);
-    }
-  }
-  if (callback) {
-    callback = createCallback(callback, thisArg, 4);
-    (isArr ? forEach : forOwn)(object, function(value, index, object) {
-      return callback(accumulator, value, index, object);
-    });
-  }
-  return accumulator;
-}
-
-module.exports = transform;
-
-},{"../collections/forEach":59,"../functions/createCallback":84,"../internals/baseCreate":99,"./forOwn":149,"./isArray":155}],178:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var keys = require('./keys');
-
-/**
- * Creates an array composed of the own enumerable property values of `object`.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {Object} object The object to inspect.
- * @returns {Array} Returns an array of property values.
- * @example
- *
- * _.values({ 'one': 1, 'two': 2, 'three': 3 });
- * // => [1, 2, 3] (property order is not guaranteed across environments)
- */
-function values(object) {
-  var index = -1,
-      props = keys(object),
-      length = props.length,
-      result = Array(length);
-
-  while (++index < length) {
-    result[index] = object[props[index]];
-  }
-  return result;
-}
-
-module.exports = values;
-
-},{"./keys":171}],179:[function(require,module,exports){
-(function (global){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isNative = require('./internals/isNative');
-
-/** Used to detect functions containing a `this` reference */
-var reThis = /\bthis\b/;
-
-/**
- * An object used to flag environments features.
- *
- * @static
- * @memberOf _
- * @type Object
- */
-var support = {};
-
-/**
- * Detect if functions can be decompiled by `Function#toString`
- * (all but PS3 and older Opera mobile browsers & avoided in Windows 8 apps).
- *
- * @memberOf _.support
- * @type boolean
- */
-support.funcDecomp = !isNative(global.WinRTError) && reThis.test(function() { return this; });
-
-/**
- * Detect if `Function#name` is supported (all but IE).
- *
- * @memberOf _.support
- * @type boolean
- */
-support.funcNames = typeof Function.name == 'string';
-
-module.exports = support;
-
-}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
-},{"./internals/isNative":122}],180:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-module.exports = {
-  'constant': require('./utilities/constant'),
-  'createCallback': require('./functions/createCallback'),
-  'escape': require('./utilities/escape'),
-  'identity': require('./utilities/identity'),
-  'mixin': require('./utilities/mixin'),
-  'noConflict': require('./utilities/noConflict'),
-  'noop': require('./utilities/noop'),
-  'now': require('./utilities/now'),
-  'parseInt': require('./utilities/parseInt'),
-  'property': require('./utilities/property'),
-  'random': require('./utilities/random'),
-  'result': require('./utilities/result'),
-  'template': require('./utilities/template'),
-  'templateSettings': require('./utilities/templateSettings'),
-  'times': require('./utilities/times'),
-  'unescape': require('./utilities/unescape'),
-  'uniqueId': require('./utilities/uniqueId')
-};
-
-},{"./functions/createCallback":84,"./utilities/constant":181,"./utilities/escape":182,"./utilities/identity":183,"./utilities/mixin":184,"./utilities/noConflict":185,"./utilities/noop":186,"./utilities/now":187,"./utilities/parseInt":188,"./utilities/property":189,"./utilities/random":190,"./utilities/result":191,"./utilities/template":192,"./utilities/templateSettings":193,"./utilities/times":194,"./utilities/unescape":195,"./utilities/uniqueId":196}],181:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * Creates a function that returns `value`.
- *
- * @static
- * @memberOf _
- * @category Utilities
- * @param {*} value The value to return from the new function.
- * @returns {Function} Returns the new function.
- * @example
- *
- * var object = { 'name': 'fred' };
- * var getter = _.constant(object);
- * getter() === object;
- * // => true
- */
-function constant(value) {
-  return function() {
-    return value;
-  };
-}
-
-module.exports = constant;
-
-},{}],182:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var escapeHtmlChar = require('../internals/escapeHtmlChar'),
-    keys = require('../objects/keys'),
-    reUnescapedHtml = require('../internals/reUnescapedHtml');
-
-/**
- * Converts the characters `&`, `<`, `>`, `"`, and `'` in `string` to their
- * corresponding HTML entities.
- *
- * @static
- * @memberOf _
- * @category Utilities
- * @param {string} string The string to escape.
- * @returns {string} Returns the escaped string.
- * @example
- *
- * _.escape('Fred, Wilma, & Pebbles');
- * // => 'Fred, Wilma, &amp; Pebbles'
- */
-function escape(string) {
-  return string == null ? '' : String(string).replace(reUnescapedHtml, escapeHtmlChar);
-}
-
-module.exports = escape;
-
-},{"../internals/escapeHtmlChar":116,"../internals/reUnescapedHtml":131,"../objects/keys":171}],183:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * This method returns the first argument provided to it.
- *
- * @static
- * @memberOf _
- * @category Utilities
- * @param {*} value Any value.
- * @returns {*} Returns `value`.
- * @example
- *
- * var object = { 'name': 'fred' };
- * _.identity(object) === object;
- * // => true
- */
-function identity(value) {
-  return value;
-}
-
-module.exports = identity;
-
-},{}],184:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var forEach = require('../collections/forEach'),
-    functions = require('../objects/functions'),
-    isFunction = require('../objects/isFunction'),
-    isObject = require('../objects/isObject');
-
-/**
- * Used for `Array` method references.
- *
- * Normally `Array.prototype` would suffice, however, using an array literal
- * avoids issues in Narwhal.
- */
-var arrayRef = [];
-
-/** Native method shortcuts */
-var push = arrayRef.push;
-
-/**
- * Adds function properties of a source object to the destination object.
- * If `object` is a function methods will be added to its prototype as well.
- *
- * @static
- * @memberOf _
- * @category Utilities
- * @param {Function|Object} [object=lodash] object The destination object.
- * @param {Object} source The object of functions to add.
- * @param {Object} [options] The options object.
- * @param {boolean} [options.chain=true] Specify whether the functions added are chainable.
- * @example
- *
- * function capitalize(string) {
- *   return string.charAt(0).toUpperCase() + string.slice(1).toLowerCase();
- * }
- *
- * _.mixin({ 'capitalize': capitalize });
- * _.capitalize('fred');
- * // => 'Fred'
- *
- * _('fred').capitalize().value();
- * // => 'Fred'
- *
- * _.mixin({ 'capitalize': capitalize }, { 'chain': false });
- * _('fred').capitalize();
- * // => 'Fred'
- */
-function mixin(object, source, options) {
-  var chain = true,
-      methodNames = source && functions(source);
-
-  if (options === false) {
-    chain = false;
-  } else if (isObject(options) && 'chain' in options) {
-    chain = options.chain;
-  }
-  var ctor = object,
-      isFunc = isFunction(ctor);
-
-  forEach(methodNames, function(methodName) {
-    var func = object[methodName] = source[methodName];
-    if (isFunc) {
-      ctor.prototype[methodName] = function() {
-        var chainAll = this.__chain__,
-            value = this.__wrapped__,
-            args = [value];
-
-        push.apply(args, arguments);
-        var result = func.apply(object, args);
-        if (chain || chainAll) {
-          if (value === result && isObject(result)) {
-            return this;
-          }
-          result = new ctor(result);
-          result.__chain__ = chainAll;
-        }
-        return result;
-      };
-    }
-  });
-}
-
-module.exports = mixin;
-
-},{"../collections/forEach":59,"../objects/functions":151,"../objects/isFunction":162,"../objects/isObject":166}],185:[function(require,module,exports){
-(function (global){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** Used to restore the original `_` reference in `noConflict` */
-var oldDash = global._;
-
-/**
- * Reverts the '_' variable to its previous value and returns a reference to
- * the `lodash` function.
- *
- * @static
- * @memberOf _
- * @category Utilities
- * @returns {Function} Returns the `lodash` function.
- * @example
- *
- * var lodash = _.noConflict();
- */
-function noConflict() {
-  global._ = oldDash;
-  return this;
-}
-
-module.exports = noConflict;
-
-}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
-},{}],186:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * A no-operation function.
- *
- * @static
- * @memberOf _
- * @category Utilities
- * @example
- *
- * var object = { 'name': 'fred' };
- * _.noop(object) === undefined;
- * // => true
- */
-function noop() {
-  // no operation performed
-}
-
-module.exports = noop;
-
-},{}],187:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isNative = require('../internals/isNative');
-
-/**
- * Gets the number of milliseconds that have elapsed since the Unix epoch
- * (1 January 1970 00:00:00 UTC).
- *
- * @static
- * @memberOf _
- * @category Utilities
- * @example
- *
- * var stamp = _.now();
- * _.defer(function() { console.log(_.now() - stamp); });
- * // => logs the number of milliseconds it took for the deferred function to be called
- */
-var now = isNative(now = Date.now) && now || function() {
-  return new Date().getTime();
-};
-
-module.exports = now;
-
-},{"../internals/isNative":122}],188:[function(require,module,exports){
-(function (global){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isString = require('../objects/isString');
-
-/** Used to detect and test whitespace */
-var whitespace = (
-  // whitespace
-  ' \t\x0B\f\xA0\ufeff' +
-
-  // line terminators
-  '\n\r\u2028\u2029' +
-
-  // unicode category "Zs" space separators
-  '\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000'
-);
-
-/** Used to match leading whitespace and zeros to be removed */
-var reLeadingSpacesAndZeros = RegExp('^[' + whitespace + ']*0+(?=.$)');
-
-/* Native method shortcuts for methods with the same name as other `lodash` methods */
-var nativeParseInt = global.parseInt;
-
-/**
- * Converts the given value into an integer of the specified radix.
- * If `radix` is `undefined` or `0` a `radix` of `10` is used unless the
- * `value` is a hexadecimal, in which case a `radix` of `16` is used.
- *
- * Note: This method avoids differences in native ES3 and ES5 `parseInt`
- * implementations. See http://es5.github.io/#E.
- *
- * @static
- * @memberOf _
- * @category Utilities
- * @param {string} value The value to parse.
- * @param {number} [radix] The radix used to interpret the value to parse.
- * @returns {number} Returns the new integer value.
- * @example
- *
- * _.parseInt('08');
- * // => 8
- */
-var parseInt = nativeParseInt(whitespace + '08') == 8 ? nativeParseInt : function(value, radix) {
-  // Firefox < 21 and Opera < 15 follow the ES3 specified implementation of `parseInt`
-  return nativeParseInt(isString(value) ? value.replace(reLeadingSpacesAndZeros, '') : value, radix || 0);
-};
-
-module.exports = parseInt;
-
-}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
-},{"../objects/isString":169}],189:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * Creates a "_.pluck" style function, which returns the `key` value of a
- * given object.
- *
- * @static
- * @memberOf _
- * @category Utilities
- * @param {string} key The name of the property to retrieve.
- * @returns {Function} Returns the new function.
- * @example
- *
- * var characters = [
- *   { 'name': 'fred',   'age': 40 },
- *   { 'name': 'barney', 'age': 36 }
- * ];
- *
- * var getName = _.property('name');
- *
- * _.map(characters, getName);
- * // => ['barney', 'fred']
- *
- * _.sortBy(characters, getName);
- * // => [{ 'name': 'barney', 'age': 36 }, { 'name': 'fred',   'age': 40 }]
- */
-function property(key) {
-  return function(object) {
-    return object[key];
-  };
-}
-
-module.exports = property;
-
-},{}],190:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseRandom = require('../internals/baseRandom');
-
-/* Native method shortcuts for methods with the same name as other `lodash` methods */
-var nativeMin = Math.min,
-    nativeRandom = Math.random;
-
-/**
- * Produces a random number between `min` and `max` (inclusive). If only one
- * argument is provided a number between `0` and the given number will be
- * returned. If `floating` is truey or either `min` or `max` are floats a
- * floating-point number will be returned instead of an integer.
- *
- * @static
- * @memberOf _
- * @category Utilities
- * @param {number} [min=0] The minimum possible value.
- * @param {number} [max=1] The maximum possible value.
- * @param {boolean} [floating=false] Specify returning a floating-point number.
- * @returns {number} Returns a random number.
- * @example
- *
- * _.random(0, 5);
- * // => an integer between 0 and 5
- *
- * _.random(5);
- * // => also an integer between 0 and 5
- *
- * _.random(5, true);
- * // => a floating-point number between 0 and 5
- *
- * _.random(1.2, 5.2);
- * // => a floating-point number between 1.2 and 5.2
- */
-function random(min, max, floating) {
-  var noMin = min == null,
-      noMax = max == null;
-
-  if (floating == null) {
-    if (typeof min == 'boolean' && noMax) {
-      floating = min;
-      min = 1;
-    }
-    else if (!noMax && typeof max == 'boolean') {
-      floating = max;
-      noMax = true;
-    }
-  }
-  if (noMin && noMax) {
-    max = 1;
-  }
-  min = +min || 0;
-  if (noMax) {
-    max = min;
-    min = 0;
-  } else {
-    max = +max || 0;
-  }
-  if (floating || min % 1 || max % 1) {
-    var rand = nativeRandom();
-    return nativeMin(min + (rand * (max - min + parseFloat('1e-' + ((rand +'').length - 1)))), max);
-  }
-  return baseRandom(min, max);
-}
-
-module.exports = random;
-
-},{"../internals/baseRandom":107}],191:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isFunction = require('../objects/isFunction');
-
-/**
- * Resolves the value of property `key` on `object`. If `key` is a function
- * it will be invoked with the `this` binding of `object` and its result returned,
- * else the property value is returned. If `object` is falsey then `undefined`
- * is returned.
- *
- * @static
- * @memberOf _
- * @category Utilities
- * @param {Object} object The object to inspect.
- * @param {string} key The name of the property to resolve.
- * @returns {*} Returns the resolved value.
- * @example
- *
- * var object = {
- *   'cheese': 'crumpets',
- *   'stuff': function() {
- *     return 'nonsense';
- *   }
- * };
- *
- * _.result(object, 'cheese');
- * // => 'crumpets'
- *
- * _.result(object, 'stuff');
- * // => 'nonsense'
- */
-function result(object, key) {
-  if (object) {
-    var value = object[key];
-    return isFunction(value) ? object[key]() : value;
-  }
-}
-
-module.exports = result;
-
-},{"../objects/isFunction":162}],192:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var defaults = require('../objects/defaults'),
-    escape = require('./escape'),
-    escapeStringChar = require('../internals/escapeStringChar'),
-    keys = require('../objects/keys'),
-    reInterpolate = require('../internals/reInterpolate'),
-    templateSettings = require('./templateSettings'),
-    values = require('../objects/values');
-
-/** Used to match empty string literals in compiled template source */
-var reEmptyStringLeading = /\b__p \+= '';/g,
-    reEmptyStringMiddle = /\b(__p \+=) '' \+/g,
-    reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g;
-
-/**
- * Used to match ES6 template delimiters
- * http://people.mozilla.org/~jorendorff/es6-draft.html#sec-literals-string-literals
- */
-var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g;
-
-/** Used to ensure capturing order of template delimiters */
-var reNoMatch = /($^)/;
-
-/** Used to match unescaped characters in compiled string literals */
-var reUnescapedString = /['\n\r\t\u2028\u2029\\]/g;
-
-/**
- * A micro-templating method that handles arbitrary delimiters, preserves
- * whitespace, and correctly escapes quotes within interpolated code.
- *
- * Note: In the development build, `_.template` utilizes sourceURLs for easier
- * debugging. See http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl
- *
- * For more information on precompiling templates see:
- * http://lodash.com/custom-builds
- *
- * For more information on Chrome extension sandboxes see:
- * http://developer.chrome.com/stable/extensions/sandboxingEval.html
- *
- * @static
- * @memberOf _
- * @category Utilities
- * @param {string} text The template text.
- * @param {Object} data The data object used to populate the text.
- * @param {Object} [options] The options object.
- * @param {RegExp} [options.escape] The "escape" delimiter.
- * @param {RegExp} [options.evaluate] The "evaluate" delimiter.
- * @param {Object} [options.imports] An object to import into the template as local variables.
- * @param {RegExp} [options.interpolate] The "interpolate" delimiter.
- * @param {string} [sourceURL] The sourceURL of the template's compiled source.
- * @param {string} [variable] The data object variable name.
- * @returns {Function|string} Returns a compiled function when no `data` object
- *  is given, else it returns the interpolated text.
- * @example
- *
- * // using the "interpolate" delimiter to create a compiled template
- * var compiled = _.template('hello <%= name %>');
- * compiled({ 'name': 'fred' });
- * // => 'hello fred'
- *
- * // using the "escape" delimiter to escape HTML in data property values
- * _.template('<b><%- value %></b>', { 'value': '<script>' });
- * // => '<b>&lt;script&gt;</b>'
- *
- * // using the "evaluate" delimiter to generate HTML
- * var list = '<% _.forEach(people, function(name) { %><li><%- name %></li><% }); %>';
- * _.template(list, { 'people': ['fred', 'barney'] });
- * // => '<li>fred</li><li>barney</li>'
- *
- * // using the ES6 delimiter as an alternative to the default "interpolate" delimiter
- * _.template('hello ${ name }', { 'name': 'pebbles' });
- * // => 'hello pebbles'
- *
- * // using the internal `print` function in "evaluate" delimiters
- * _.template('<% print("hello " + name); %>!', { 'name': 'barney' });
- * // => 'hello barney!'
- *
- * // using a custom template delimiters
- * _.templateSettings = {
- *   'interpolate': /{{([\s\S]+?)}}/g
- * };
- *
- * _.template('hello {{ name }}!', { 'name': 'mustache' });
- * // => 'hello mustache!'
- *
- * // using the `imports` option to import jQuery
- * var list = '<% jq.each(people, function(name) { %><li><%- name %></li><% }); %>';
- * _.template(list, { 'people': ['fred', 'barney'] }, { 'imports': { 'jq': jQuery } });
- * // => '<li>fred</li><li>barney</li>'
- *
- * // using the `sourceURL` option to specify a custom sourceURL for the template
- * var compiled = _.template('hello <%= name %>', null, { 'sourceURL': '/basic/greeting.jst' });
- * compiled(data);
- * // => find the source of "greeting.jst" under the Sources tab or Resources panel of the web inspector
- *
- * // using the `variable` option to ensure a with-statement isn't used in the compiled template
- * var compiled = _.template('hi <%= data.name %>!', null, { 'variable': 'data' });
- * compiled.source;
- * // => function(data) {
- *   var __t, __p = '', __e = _.escape;
- *   __p += 'hi ' + ((__t = ( data.name )) == null ? '' : __t) + '!';
- *   return __p;
- * }
- *
- * // using the `source` property to inline compiled templates for meaningful
- * // line numbers in error messages and a stack trace
- * fs.writeFileSync(path.join(cwd, 'jst.js'), '\
- *   var JST = {\
- *     "main": ' + _.template(mainText).source + '\
- *   };\
- * ');
- */
-function template(text, data, options) {
-  // based on John Resig's `tmpl` implementation
-  // http://ejohn.org/blog/javascript-micro-templating/
-  // and Laura Doktorova's doT.js
-  // https://github.com/olado/doT
-  var settings = templateSettings.imports._.templateSettings || templateSettings;
-  text = String(text || '');
-
-  // avoid missing dependencies when `iteratorTemplate` is not defined
-  options = defaults({}, options, settings);
-
-  var imports = defaults({}, options.imports, settings.imports),
-      importsKeys = keys(imports),
-      importsValues = values(imports);
-
-  var isEvaluating,
-      index = 0,
-      interpolate = options.interpolate || reNoMatch,
-      source = "__p += '";
-
-  // compile the regexp to match each delimiter
-  var reDelimiters = RegExp(
-    (options.escape || reNoMatch).source + '|' +
-    interpolate.source + '|' +
-    (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +
-    (options.evaluate || reNoMatch).source + '|$'
-  , 'g');
-
-  text.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {
-    interpolateValue || (interpolateValue = esTemplateValue);
-
-    // escape characters that cannot be included in string literals
-    source += text.slice(index, offset).replace(reUnescapedString, escapeStringChar);
-
-    // replace delimiters with snippets
-    if (escapeValue) {
-      source += "' +\n__e(" + escapeValue + ") +\n'";
-    }
-    if (evaluateValue) {
-      isEvaluating = true;
-      source += "';\n" + evaluateValue + ";\n__p += '";
-    }
-    if (interpolateValue) {
-      source += "' +\n((__t = (" + interpolateValue + ")) == null ? '' : __t) +\n'";
-    }
-    index = offset + match.length;
-
-    // the JS engine embedded in Adobe products requires returning the `match`
-    // string in order to produce the correct `offset` value
-    return match;
-  });
-
-  source += "';\n";
-
-  // if `variable` is not specified, wrap a with-statement around the generated
-  // code to add the data object to the top of the scope chain
-  var variable = options.variable,
-      hasVariable = variable;
-
-  if (!hasVariable) {
-    variable = 'obj';
-    source = 'with (' + variable + ') {\n' + source + '\n}\n';
-  }
-  // cleanup code by stripping empty strings
-  source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)
-    .replace(reEmptyStringMiddle, '$1')
-    .replace(reEmptyStringTrailing, '$1;');
-
-  // frame code as the function body
-  source = 'function(' + variable + ') {\n' +
-    (hasVariable ? '' : variable + ' || (' + variable + ' = {});\n') +
-    "var __t, __p = '', __e = _.escape" +
-    (isEvaluating
-      ? ', __j = Array.prototype.join;\n' +
-        "function print() { __p += __j.call(arguments, '') }\n"
-      : ';\n'
-    ) +
-    source +
-    'return __p\n}';
-
-  try {
-    var result = Function(importsKeys, 'return ' + source ).apply(undefined, importsValues);
-  } catch(e) {
-    e.source = source;
-    throw e;
-  }
-  if (data) {
-    return result(data);
-  }
-  // provide the compiled function's source by its `toString` method, in
-  // supported environments, or the `source` property as a convenience for
-  // inlining compiled templates during the build process
-  result.source = source;
-  return result;
-}
-
-module.exports = template;
-
-},{"../internals/escapeStringChar":117,"../internals/reInterpolate":130,"../objects/defaults":144,"../objects/keys":171,"../objects/values":178,"./escape":182,"./templateSettings":193}],193:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var escape = require('./escape'),
-    reInterpolate = require('../internals/reInterpolate');
-
-/**
- * By default, the template delimiters used by Lo-Dash are similar to those in
- * embedded Ruby (ERB). Change the following template settings to use alternative
- * delimiters.
- *
- * @static
- * @memberOf _
- * @type Object
- */
-var templateSettings = {
-
-  /**
-   * Used to detect `data` property values to be HTML-escaped.
-   *
-   * @memberOf _.templateSettings
-   * @type RegExp
-   */
-  'escape': /<%-([\s\S]+?)%>/g,
-
-  /**
-   * Used to detect code to be evaluated.
-   *
-   * @memberOf _.templateSettings
-   * @type RegExp
-   */
-  'evaluate': /<%([\s\S]+?)%>/g,
-
-  /**
-   * Used to detect `data` property values to inject.
-   *
-   * @memberOf _.templateSettings
-   * @type RegExp
-   */
-  'interpolate': reInterpolate,
-
-  /**
-   * Used to reference the data object in the template text.
-   *
-   * @memberOf _.templateSettings
-   * @type string
-   */
-  'variable': '',
-
-  /**
-   * Used to import variables into the compiled template.
-   *
-   * @memberOf _.templateSettings
-   * @type Object
-   */
-  'imports': {
-
-    /**
-     * A reference to the `lodash` function.
-     *
-     * @memberOf _.templateSettings.imports
-     * @type Function
-     */
-    '_': { 'escape': escape }
-  }
-};
-
-module.exports = templateSettings;
-
-},{"../internals/reInterpolate":130,"./escape":182}],194:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseCreateCallback = require('../internals/baseCreateCallback');
-
-/**
- * Executes the callback `n` times, returning an array of the results
- * of each callback execution. The callback is bound to `thisArg` and invoked
- * with one argument; (index).
- *
- * @static
- * @memberOf _
- * @category Utilities
- * @param {number} n The number of times to execute the callback.
- * @param {Function} callback The function called per iteration.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Array} Returns an array of the results of each `callback` execution.
- * @example
- *
- * var diceRolls = _.times(3, _.partial(_.random, 1, 6));
- * // => [3, 6, 4]
- *
- * _.times(3, function(n) { mage.castSpell(n); });
- * // => calls `mage.castSpell(n)` three times, passing `n` of `0`, `1`, and `2` respectively
- *
- * _.times(3, function(n) { this.cast(n); }, mage);
- * // => also calls `mage.castSpell(n)` three times
- */
-function times(n, callback, thisArg) {
-  n = (n = +n) > -1 ? n : 0;
-  var index = -1,
-      result = Array(n);
-
-  callback = baseCreateCallback(callback, thisArg, 1);
-  while (++index < n) {
-    result[index] = callback(index);
-  }
-  return result;
-}
-
-module.exports = times;
-
-},{"../internals/baseCreateCallback":100}],195:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var keys = require('../objects/keys'),
-    reEscapedHtml = require('../internals/reEscapedHtml'),
-    unescapeHtmlChar = require('../internals/unescapeHtmlChar');
-
-/**
- * The inverse of `_.escape` this method converts the HTML entities
- * `&amp;`, `&lt;`, `&gt;`, `&quot;`, and `&#39;` in `string` to their
- * corresponding characters.
- *
- * @static
- * @memberOf _
- * @category Utilities
- * @param {string} string The string to unescape.
- * @returns {string} Returns the unescaped string.
- * @example
- *
- * _.unescape('Fred, Barney &amp; Pebbles');
- * // => 'Fred, Barney & Pebbles'
- */
-function unescape(string) {
-  return string == null ? '' : String(string).replace(reEscapedHtml, unescapeHtmlChar);
-}
-
-module.exports = unescape;
-
-},{"../internals/reEscapedHtml":129,"../internals/unescapeHtmlChar":138,"../objects/keys":171}],196:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** Used to generate unique IDs */
-var idCounter = 0;
-
-/**
- * Generates a unique ID. If `prefix` is provided the ID will be appended to it.
- *
- * @static
- * @memberOf _
- * @category Utilities
- * @param {string} [prefix] The value to prefix the ID with.
- * @returns {string} Returns the unique ID.
- * @example
- *
- * _.uniqueId('contact_');
- * // => 'contact_104'
- *
- * _.uniqueId();
- * // => '105'
- */
-function uniqueId(prefix) {
-  var id = ++idCounter;
-  return String(prefix == null ? '' : prefix) + id;
-}
-
-module.exports = uniqueId;
-
-},{}]},{},[1])(1)
-});
\ No newline at end of file
diff --git a/bin/node_modules/plist/dist/plist-parse.js b/bin/node_modules/plist/dist/plist-parse.js
deleted file mode 100644
index 7325ed1..0000000
--- a/bin/node_modules/plist/dist/plist-parse.js
+++ /dev/null
@@ -1,3628 +0,0 @@
-!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.plist=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
-(function (Buffer){
-
-/**
- * Module dependencies.
- */
-
-var deprecate = require('util-deprecate');
-var DOMParser = require('xmldom').DOMParser;
-
-/**
- * Module exports.
- */
-
-exports.parse = parse;
-exports.parseString = deprecate(parseString, '`parseString()` is deprecated. ' +
-  'It\'s not actually async. Use `parse()` instead.');
-exports.parseStringSync = deprecate(parseStringSync, '`parseStringSync()` is ' +
-  'deprecated. Use `parse()` instead.');
-
-/**
- * We ignore raw text (usually whitespace), <!-- xml comments -->,
- * and raw CDATA nodes.
- *
- * @param {Element} node
- * @returns {Boolean}
- * @api private
- */
-
-function shouldIgnoreNode (node) {
-  return node.nodeType === 3 // text
-    || node.nodeType === 8   // comment
-    || node.nodeType === 4;  // cdata
-}
-
-
-/**
- * Parses a Plist XML string. Returns an Object.
- *
- * @param {String} xml - the XML String to decode
- * @returns {Mixed} the decoded value from the Plist XML
- * @api public
- */
-
-function parse (xml) {
-  var doc = new DOMParser().parseFromString(xml);
-  if (doc.documentElement.nodeName !== 'plist') {
-    throw new Error('malformed document. First element should be <plist>');
-  }
-  var plist = parsePlistXML(doc.documentElement);
-
-  // the root <plist> node gets interpreted as an Array,
-  // so pull out the inner data first
-  if (plist.length == 1) plist = plist[0];
-
-  return plist;
-}
-
-/**
- * Parses a Plist XML string. Returns an Object. Takes a `callback` function.
- *
- * @param {String} xml - the XML String to decode
- * @param {Function} callback - callback function
- * @returns {Mixed} the decoded value from the Plist XML
- * @api public
- * @deprecated not actually async. use parse() instead
- */
-
-function parseString (xml, callback) {
-  var doc, error, plist;
-  try {
-    doc = new DOMParser().parseFromString(xml);
-    plist = parsePlistXML(doc.documentElement);
-  } catch(e) {
-    error = e;
-  }
-  callback(error, plist);
-}
-
-/**
- * Parses a Plist XML string. Returns an Object.
- *
- * @param {String} xml - the XML String to decode
- * @param {Function} callback - callback function
- * @returns {Mixed} the decoded value from the Plist XML
- * @api public
- * @deprecated use parse() instead
- */
-
-function parseStringSync (xml) {
-  var doc = new DOMParser().parseFromString(xml);
-  var plist;
-  if (doc.documentElement.nodeName !== 'plist') {
-    throw new Error('malformed document. First element should be <plist>');
-  }
-  plist = parsePlistXML(doc.documentElement);
-
-  // if the plist is an array with 1 element, pull it out of the array
-  if (plist.length == 1) {
-    plist = plist[0];
-  }
-  return plist;
-}
-
-/**
- * Convert an XML based plist document into a JSON representation.
- *
- * @param {Object} xml_node - current XML node in the plist
- * @returns {Mixed} built up JSON object
- * @api private
- */
-
-function parsePlistXML (node) {
-  var i, new_obj, key, val, new_arr, res, d;
-
-  if (!node)
-    return null;
-
-  if (node.nodeName === 'plist') {
-    new_arr = [];
-    for (i=0; i < node.childNodes.length; i++) {
-      // ignore comment nodes (text)
-      if (!shouldIgnoreNode(node.childNodes[i])) {
-        new_arr.push( parsePlistXML(node.childNodes[i]));
-      }
-    }
-    return new_arr;
-
-  } else if (node.nodeName === 'dict') {
-    new_obj = {};
-    key = null;
-    for (i=0; i < node.childNodes.length; i++) {
-      // ignore comment nodes (text)
-      if (!shouldIgnoreNode(node.childNodes[i])) {
-        if (key === null) {
-          key = parsePlistXML(node.childNodes[i]);
-        } else {
-          new_obj[key] = parsePlistXML(node.childNodes[i]);
-          key = null;
-        }
-      }
-    }
-    return new_obj;
-
-  } else if (node.nodeName === 'array') {
-    new_arr = [];
-    for (i=0; i < node.childNodes.length; i++) {
-      // ignore comment nodes (text)
-      if (!shouldIgnoreNode(node.childNodes[i])) {
-        res = parsePlistXML(node.childNodes[i]);
-        if (null != res) new_arr.push(res);
-      }
-    }
-    return new_arr;
-
-  } else if (node.nodeName === '#text') {
-    // TODO: what should we do with text types? (CDATA sections)
-
-  } else if (node.nodeName === 'key') {
-    return node.childNodes[0].nodeValue;
-
-  } else if (node.nodeName === 'string') {
-    res = '';
-    for (d=0; d < node.childNodes.length; d++) {
-      res += node.childNodes[d].nodeValue;
-    }
-    return res;
-
-  } else if (node.nodeName === 'integer') {
-    // parse as base 10 integer
-    return parseInt(node.childNodes[0].nodeValue, 10);
-
-  } else if (node.nodeName === 'real') {
-    res = '';
-    for (d=0; d < node.childNodes.length; d++) {
-      if (node.childNodes[d].nodeType === 3) {
-        res += node.childNodes[d].nodeValue;
-      }
-    }
-    return parseFloat(res);
-
-  } else if (node.nodeName === 'data') {
-    res = '';
-    for (d=0; d < node.childNodes.length; d++) {
-      if (node.childNodes[d].nodeType === 3) {
-        res += node.childNodes[d].nodeValue.replace(/\s+/g, '');
-      }
-    }
-
-    // decode base64 data to a Buffer instance
-    return new Buffer(res, 'base64');
-
-  } else if (node.nodeName === 'date') {
-    return new Date(node.childNodes[0].nodeValue);
-
-  } else if (node.nodeName === 'true') {
-    return true;
-
-  } else if (node.nodeName === 'false') {
-    return false;
-  }
-}
-
-}).call(this,require("buffer").Buffer)
-},{"buffer":3,"util-deprecate":5,"xmldom":6}],2:[function(require,module,exports){
-var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
-
-;(function (exports) {
-	'use strict';
-
-  var Arr = (typeof Uint8Array !== 'undefined')
-    ? Uint8Array
-    : Array
-
-	var ZERO   = '0'.charCodeAt(0)
-	var PLUS   = '+'.charCodeAt(0)
-	var SLASH  = '/'.charCodeAt(0)
-	var NUMBER = '0'.charCodeAt(0)
-	var LOWER  = 'a'.charCodeAt(0)
-	var UPPER  = 'A'.charCodeAt(0)
-
-	function decode (elt) {
-		var code = elt.charCodeAt(0)
-		if (code === PLUS)
-			return 62 // '+'
-		if (code === SLASH)
-			return 63 // '/'
-		if (code < NUMBER)
-			return -1 //no match
-		if (code < NUMBER + 10)
-			return code - NUMBER + 26 + 26
-		if (code < UPPER + 26)
-			return code - UPPER
-		if (code < LOWER + 26)
-			return code - LOWER + 26
-	}
-
-	function b64ToByteArray (b64) {
-		var i, j, l, tmp, placeHolders, arr
-
-		if (b64.length % 4 > 0) {
-			throw new Error('Invalid string. Length must be a multiple of 4')
-		}
-
-		// the number of equal signs (place holders)
-		// if there are two placeholders, than the two characters before it
-		// represent one byte
-		// if there is only one, then the three characters before it represent 2 bytes
-		// this is just a cheap hack to not do indexOf twice
-		var len = b64.length
-		placeHolders = '=' === b64.charAt(len - 2) ? 2 : '=' === b64.charAt(len - 1) ? 1 : 0
-
-		// base64 is 4/3 + up to two characters of the original data
-		arr = new Arr(b64.length * 3 / 4 - placeHolders)
-
-		// if there are placeholders, only get up to the last complete 4 chars
-		l = placeHolders > 0 ? b64.length - 4 : b64.length
-
-		var L = 0
-
-		function push (v) {
-			arr[L++] = v
-		}
-
-		for (i = 0, j = 0; i < l; i += 4, j += 3) {
-			tmp = (decode(b64.charAt(i)) << 18) | (decode(b64.charAt(i + 1)) << 12) | (decode(b64.charAt(i + 2)) << 6) | decode(b64.charAt(i + 3))
-			push((tmp & 0xFF0000) >> 16)
-			push((tmp & 0xFF00) >> 8)
-			push(tmp & 0xFF)
-		}
-
-		if (placeHolders === 2) {
-			tmp = (decode(b64.charAt(i)) << 2) | (decode(b64.charAt(i + 1)) >> 4)
-			push(tmp & 0xFF)
-		} else if (placeHolders === 1) {
-			tmp = (decode(b64.charAt(i)) << 10) | (decode(b64.charAt(i + 1)) << 4) | (decode(b64.charAt(i + 2)) >> 2)
-			push((tmp >> 8) & 0xFF)
-			push(tmp & 0xFF)
-		}
-
-		return arr
-	}
-
-	function uint8ToBase64 (uint8) {
-		var i,
-			extraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes
-			output = "",
-			temp, length
-
-		function encode (num) {
-			return lookup.charAt(num)
-		}
-
-		function tripletToBase64 (num) {
-			return encode(num >> 18 & 0x3F) + encode(num >> 12 & 0x3F) + encode(num >> 6 & 0x3F) + encode(num & 0x3F)
-		}
-
-		// go through the array every three bytes, we'll deal with trailing stuff later
-		for (i = 0, length = uint8.length - extraBytes; i < length; i += 3) {
-			temp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
-			output += tripletToBase64(temp)
-		}
-
-		// pad the end with zeros, but make sure to not forget the extra bytes
-		switch (extraBytes) {
-			case 1:
-				temp = uint8[uint8.length - 1]
-				output += encode(temp >> 2)
-				output += encode((temp << 4) & 0x3F)
-				output += '=='
-				break
-			case 2:
-				temp = (uint8[uint8.length - 2] << 8) + (uint8[uint8.length - 1])
-				output += encode(temp >> 10)
-				output += encode((temp >> 4) & 0x3F)
-				output += encode((temp << 2) & 0x3F)
-				output += '='
-				break
-		}
-
-		return output
-	}
-
-	module.exports.toByteArray = b64ToByteArray
-	module.exports.fromByteArray = uint8ToBase64
-}())
-
-},{}],3:[function(require,module,exports){
-/*!
- * The buffer module from node.js, for the browser.
- *
- * @author   Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
- * @license  MIT
- */
-
-var base64 = require('base64-js')
-var ieee754 = require('ieee754')
-
-exports.Buffer = Buffer
-exports.SlowBuffer = Buffer
-exports.INSPECT_MAX_BYTES = 50
-Buffer.poolSize = 8192
-
-/**
- * If `TYPED_ARRAY_SUPPORT`:
- *   === true    Use Uint8Array implementation (fastest)
- *   === false   Use Object implementation (most compatible, even IE6)
- *
- * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
- * Opera 11.6+, iOS 4.2+.
- *
- * Note:
- *
- * - Implementation must support adding new properties to `Uint8Array` instances.
- *   Firefox 4-29 lacked support, fixed in Firefox 30+.
- *   See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.
- *
- *  - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.
- *
- *  - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of
- *    incorrect length in some situations.
- *
- * We detect these buggy browsers and set `TYPED_ARRAY_SUPPORT` to `false` so they will
- * get the Object implementation, which is slower but will work correctly.
- */
-var TYPED_ARRAY_SUPPORT = (function () {
-  try {
-    var buf = new ArrayBuffer(0)
-    var arr = new Uint8Array(buf)
-    arr.foo = function () { return 42 }
-    return 42 === arr.foo() && // typed array instances can be augmented
-        typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`
-        new Uint8Array(1).subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`
-  } catch (e) {
-    return false
-  }
-})()
-
-/**
- * Class: Buffer
- * =============
- *
- * The Buffer constructor returns instances of `Uint8Array` that are augmented
- * with function properties for all the node `Buffer` API functions. We use
- * `Uint8Array` so that square bracket notation works as expected -- it returns
- * a single octet.
- *
- * By augmenting the instances, we can avoid modifying the `Uint8Array`
- * prototype.
- */
-function Buffer (subject, encoding, noZero) {
-  if (!(this instanceof Buffer))
-    return new Buffer(subject, encoding, noZero)
-
-  var type = typeof subject
-
-  // Find the length
-  var length
-  if (type === 'number')
-    length = subject > 0 ? subject >>> 0 : 0
-  else if (type === 'string') {
-    if (encoding === 'base64')
-      subject = base64clean(subject)
-    length = Buffer.byteLength(subject, encoding)
-  } else if (type === 'object' && subject !== null) { // assume object is array-like
-    if (subject.type === 'Buffer' && isArray(subject.data))
-      subject = subject.data
-    length = +subject.length > 0 ? Math.floor(+subject.length) : 0
-  } else
-    throw new Error('First argument needs to be a number, array or string.')
-
-  var buf
-  if (TYPED_ARRAY_SUPPORT) {
-    // Preferred: Return an augmented `Uint8Array` instance for best performance
-    buf = Buffer._augment(new Uint8Array(length))
-  } else {
-    // Fallback: Return THIS instance of Buffer (created by `new`)
-    buf = this
-    buf.length = length
-    buf._isBuffer = true
-  }
-
-  var i
-  if (TYPED_ARRAY_SUPPORT && typeof subject.byteLength === 'number') {
-    // Speed optimization -- use set if we're copying from a typed array
-    buf._set(subject)
-  } else if (isArrayish(subject)) {
-    // Treat array-ish objects as a byte array
-    if (Buffer.isBuffer(subject)) {
-      for (i = 0; i < length; i++)
-        buf[i] = subject.readUInt8(i)
-    } else {
-      for (i = 0; i < length; i++)
-        buf[i] = ((subject[i] % 256) + 256) % 256
-    }
-  } else if (type === 'string') {
-    buf.write(subject, 0, encoding)
-  } else if (type === 'number' && !TYPED_ARRAY_SUPPORT && !noZero) {
-    for (i = 0; i < length; i++) {
-      buf[i] = 0
-    }
-  }
-
-  return buf
-}
-
-// STATIC METHODS
-// ==============
-
-Buffer.isEncoding = function (encoding) {
-  switch (String(encoding).toLowerCase()) {
-    case 'hex':
-    case 'utf8':
-    case 'utf-8':
-    case 'ascii':
-    case 'binary':
-    case 'base64':
-    case 'raw':
-    case 'ucs2':
-    case 'ucs-2':
-    case 'utf16le':
-    case 'utf-16le':
-      return true
-    default:
-      return false
-  }
-}
-
-Buffer.isBuffer = function (b) {
-  return !!(b != null && b._isBuffer)
-}
-
-Buffer.byteLength = function (str, encoding) {
-  var ret
-  str = str.toString()
-  switch (encoding || 'utf8') {
-    case 'hex':
-      ret = str.length / 2
-      break
-    case 'utf8':
-    case 'utf-8':
-      ret = utf8ToBytes(str).length
-      break
-    case 'ascii':
-    case 'binary':
-    case 'raw':
-      ret = str.length
-      break
-    case 'base64':
-      ret = base64ToBytes(str).length
-      break
-    case 'ucs2':
-    case 'ucs-2':
-    case 'utf16le':
-    case 'utf-16le':
-      ret = str.length * 2
-      break
-    default:
-      throw new Error('Unknown encoding')
-  }
-  return ret
-}
-
-Buffer.concat = function (list, totalLength) {
-  assert(isArray(list), 'Usage: Buffer.concat(list[, length])')
-
-  if (list.length === 0) {
-    return new Buffer(0)
-  } else if (list.length === 1) {
-    return list[0]
-  }
-
-  var i
-  if (totalLength === undefined) {
-    totalLength = 0
-    for (i = 0; i < list.length; i++) {
-      totalLength += list[i].length
-    }
-  }
-
-  var buf = new Buffer(totalLength)
-  var pos = 0
-  for (i = 0; i < list.length; i++) {
-    var item = list[i]
-    item.copy(buf, pos)
-    pos += item.length
-  }
-  return buf
-}
-
-Buffer.compare = function (a, b) {
-  assert(Buffer.isBuffer(a) && Buffer.isBuffer(b), 'Arguments must be Buffers')
-  var x = a.length
-  var y = b.length
-  for (var i = 0, len = Math.min(x, y); i < len && a[i] === b[i]; i++) {}
-  if (i !== len) {
-    x = a[i]
-    y = b[i]
-  }
-  if (x < y) {
-    return -1
-  }
-  if (y < x) {
-    return 1
-  }
-  return 0
-}
-
-// BUFFER INSTANCE METHODS
-// =======================
-
-function hexWrite (buf, string, offset, length) {
-  offset = Number(offset) || 0
-  var remaining = buf.length - offset
-  if (!length) {
-    length = remaining
-  } else {
-    length = Number(length)
-    if (length > remaining) {
-      length = remaining
-    }
-  }
-
-  // must be an even number of digits
-  var strLen = string.length
-  assert(strLen % 2 === 0, 'Invalid hex string')
-
-  if (length > strLen / 2) {
-    length = strLen / 2
-  }
-  for (var i = 0; i < length; i++) {
-    var byte = parseInt(string.substr(i * 2, 2), 16)
-    assert(!isNaN(byte), 'Invalid hex string')
-    buf[offset + i] = byte
-  }
-  return i
-}
-
-function utf8Write (buf, string, offset, length) {
-  var charsWritten = blitBuffer(utf8ToBytes(string), buf, offset, length)
-  return charsWritten
-}
-
-function asciiWrite (buf, string, offset, length) {
-  var charsWritten = blitBuffer(asciiToBytes(string), buf, offset, length)
-  return charsWritten
-}
-
-function binaryWrite (buf, string, offset, length) {
-  return asciiWrite(buf, string, offset, length)
-}
-
-function base64Write (buf, string, offset, length) {
-  var charsWritten = blitBuffer(base64ToBytes(string), buf, offset, length)
-  return charsWritten
-}
-
-function utf16leWrite (buf, string, offset, length) {
-  var charsWritten = blitBuffer(utf16leToBytes(string), buf, offset, length)
-  return charsWritten
-}
-
-Buffer.prototype.write = function (string, offset, length, encoding) {
-  // Support both (string, offset, length, encoding)
-  // and the legacy (string, encoding, offset, length)
-  if (isFinite(offset)) {
-    if (!isFinite(length)) {
-      encoding = length
-      length = undefined
-    }
-  } else {  // legacy
-    var swap = encoding
-    encoding = offset
-    offset = length
-    length = swap
-  }
-
-  offset = Number(offset) || 0
-  var remaining = this.length - offset
-  if (!length) {
-    length = remaining
-  } else {
-    length = Number(length)
-    if (length > remaining) {
-      length = remaining
-    }
-  }
-  encoding = String(encoding || 'utf8').toLowerCase()
-
-  var ret
-  switch (encoding) {
-    case 'hex':
-      ret = hexWrite(this, string, offset, length)
-      break
-    case 'utf8':
-    case 'utf-8':
-      ret = utf8Write(this, string, offset, length)
-      break
-    case 'ascii':
-      ret = asciiWrite(this, string, offset, length)
-      break
-    case 'binary':
-      ret = binaryWrite(this, string, offset, length)
-      break
-    case 'base64':
-      ret = base64Write(this, string, offset, length)
-      break
-    case 'ucs2':
-    case 'ucs-2':
-    case 'utf16le':
-    case 'utf-16le':
-      ret = utf16leWrite(this, string, offset, length)
-      break
-    default:
-      throw new Error('Unknown encoding')
-  }
-  return ret
-}
-
-Buffer.prototype.toString = function (encoding, start, end) {
-  var self = this
-
-  encoding = String(encoding || 'utf8').toLowerCase()
-  start = Number(start) || 0
-  end = (end === undefined) ? self.length : Number(end)
-
-  // Fastpath empty strings
-  if (end === start)
-    return ''
-
-  var ret
-  switch (encoding) {
-    case 'hex':
-      ret = hexSlice(self, start, end)
-      break
-    case 'utf8':
-    case 'utf-8':
-      ret = utf8Slice(self, start, end)
-      break
-    case 'ascii':
-      ret = asciiSlice(self, start, end)
-      break
-    case 'binary':
-      ret = binarySlice(self, start, end)
-      break
-    case 'base64':
-      ret = base64Slice(self, start, end)
-      break
-    case 'ucs2':
-    case 'ucs-2':
-    case 'utf16le':
-    case 'utf-16le':
-      ret = utf16leSlice(self, start, end)
-      break
-    default:
-      throw new Error('Unknown encoding')
-  }
-  return ret
-}
-
-Buffer.prototype.toJSON = function () {
-  return {
-    type: 'Buffer',
-    data: Array.prototype.slice.call(this._arr || this, 0)
-  }
-}
-
-Buffer.prototype.equals = function (b) {
-  assert(Buffer.isBuffer(b), 'Argument must be a Buffer')
-  return Buffer.compare(this, b) === 0
-}
-
-Buffer.prototype.compare = function (b) {
-  assert(Buffer.isBuffer(b), 'Argument must be a Buffer')
-  return Buffer.compare(this, b)
-}
-
-// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
-Buffer.prototype.copy = function (target, target_start, start, end) {
-  var source = this
-
-  if (!start) start = 0
-  if (!end && end !== 0) end = this.length
-  if (!target_start) target_start = 0
-
-  // Copy 0 bytes; we're done
-  if (end === start) return
-  if (target.length === 0 || source.length === 0) return
-
-  // Fatal error conditions
-  assert(end >= start, 'sourceEnd < sourceStart')
-  assert(target_start >= 0 && target_start < target.length,
-      'targetStart out of bounds')
-  assert(start >= 0 && start < source.length, 'sourceStart out of bounds')
-  assert(end >= 0 && end <= source.length, 'sourceEnd out of bounds')
-
-  // Are we oob?
-  if (end > this.length)
-    end = this.length
-  if (target.length - target_start < end - start)
-    end = target.length - target_start + start
-
-  var len = end - start
-
-  if (len < 100 || !TYPED_ARRAY_SUPPORT) {
-    for (var i = 0; i < len; i++) {
-      target[i + target_start] = this[i + start]
-    }
-  } else {
-    target._set(this.subarray(start, start + len), target_start)
-  }
-}
-
-function base64Slice (buf, start, end) {
-  if (start === 0 && end === buf.length) {
-    return base64.fromByteArray(buf)
-  } else {
-    return base64.fromByteArray(buf.slice(start, end))
-  }
-}
-
-function utf8Slice (buf, start, end) {
-  var res = ''
-  var tmp = ''
-  end = Math.min(buf.length, end)
-
-  for (var i = start; i < end; i++) {
-    if (buf[i] <= 0x7F) {
-      res += decodeUtf8Char(tmp) + String.fromCharCode(buf[i])
-      tmp = ''
-    } else {
-      tmp += '%' + buf[i].toString(16)
-    }
-  }
-
-  return res + decodeUtf8Char(tmp)
-}
-
-function asciiSlice (buf, start, end) {
-  var ret = ''
-  end = Math.min(buf.length, end)
-
-  for (var i = start; i < end; i++) {
-    ret += String.fromCharCode(buf[i])
-  }
-  return ret
-}
-
-function binarySlice (buf, start, end) {
-  return asciiSlice(buf, start, end)
-}
-
-function hexSlice (buf, start, end) {
-  var len = buf.length
-
-  if (!start || start < 0) start = 0
-  if (!end || end < 0 || end > len) end = len
-
-  var out = ''
-  for (var i = start; i < end; i++) {
-    out += toHex(buf[i])
-  }
-  return out
-}
-
-function utf16leSlice (buf, start, end) {
-  var bytes = buf.slice(start, end)
-  var res = ''
-  for (var i = 0; i < bytes.length; i += 2) {
-    res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)
-  }
-  return res
-}
-
-Buffer.prototype.slice = function (start, end) {
-  var len = this.length
-  start = ~~start
-  end = end === undefined ? len : ~~end
-
-  if (start < 0) {
-    start += len;
-    if (start < 0)
-      start = 0
-  } else if (start > len) {
-    start = len
-  }
-
-  if (end < 0) {
-    end += len
-    if (end < 0)
-      end = 0
-  } else if (end > len) {
-    end = len
-  }
-
-  if (end < start)
-    end = start
-
-  if (TYPED_ARRAY_SUPPORT) {
-    return Buffer._augment(this.subarray(start, end))
-  } else {
-    var sliceLen = end - start
-    var newBuf = new Buffer(sliceLen, undefined, true)
-    for (var i = 0; i < sliceLen; i++) {
-      newBuf[i] = this[i + start]
-    }
-    return newBuf
-  }
-}
-
-// `get` will be removed in Node 0.13+
-Buffer.prototype.get = function (offset) {
-  console.log('.get() is deprecated. Access using array indexes instead.')
-  return this.readUInt8(offset)
-}
-
-// `set` will be removed in Node 0.13+
-Buffer.prototype.set = function (v, offset) {
-  console.log('.set() is deprecated. Access using array indexes instead.')
-  return this.writeUInt8(v, offset)
-}
-
-Buffer.prototype.readUInt8 = function (offset, noAssert) {
-  if (!noAssert) {
-    assert(offset !== undefined && offset !== null, 'missing offset')
-    assert(offset < this.length, 'Trying to read beyond buffer length')
-  }
-
-  if (offset >= this.length)
-    return
-
-  return this[offset]
-}
-
-function readUInt16 (buf, offset, littleEndian, noAssert) {
-  if (!noAssert) {
-    assert(typeof littleEndian === 'boolean', 'missing or invalid endian')
-    assert(offset !== undefined && offset !== null, 'missing offset')
-    assert(offset + 1 < buf.length, 'Trying to read beyond buffer length')
-  }
-
-  var len = buf.length
-  if (offset >= len)
-    return
-
-  var val
-  if (littleEndian) {
-    val = buf[offset]
-    if (offset + 1 < len)
-      val |= buf[offset + 1] << 8
-  } else {
-    val = buf[offset] << 8
-    if (offset + 1 < len)
-      val |= buf[offset + 1]
-  }
-  return val
-}
-
-Buffer.prototype.readUInt16LE = function (offset, noAssert) {
-  return readUInt16(this, offset, true, noAssert)
-}
-
-Buffer.prototype.readUInt16BE = function (offset, noAssert) {
-  return readUInt16(this, offset, false, noAssert)
-}
-
-function readUInt32 (buf, offset, littleEndian, noAssert) {
-  if (!noAssert) {
-    assert(typeof littleEndian === 'boolean', 'missing or invalid endian')
-    assert(offset !== undefined && offset !== null, 'missing offset')
-    assert(offset + 3 < buf.length, 'Trying to read beyond buffer length')
-  }
-
-  var len = buf.length
-  if (offset >= len)
-    return
-
-  var val
-  if (littleEndian) {
-    if (offset + 2 < len)
-      val = buf[offset + 2] << 16
-    if (offset + 1 < len)
-      val |= buf[offset + 1] << 8
-    val |= buf[offset]
-    if (offset + 3 < len)
-      val = val + (buf[offset + 3] << 24 >>> 0)
-  } else {
-    if (offset + 1 < len)
-      val = buf[offset + 1] << 16
-    if (offset + 2 < len)
-      val |= buf[offset + 2] << 8
-    if (offset + 3 < len)
-      val |= buf[offset + 3]
-    val = val + (buf[offset] << 24 >>> 0)
-  }
-  return val
-}
-
-Buffer.prototype.readUInt32LE = function (offset, noAssert) {
-  return readUInt32(this, offset, true, noAssert)
-}
-
-Buffer.prototype.readUInt32BE = function (offset, noAssert) {
-  return readUInt32(this, offset, false, noAssert)
-}
-
-Buffer.prototype.readInt8 = function (offset, noAssert) {
-  if (!noAssert) {
-    assert(offset !== undefined && offset !== null,
-        'missing offset')
-    assert(offset < this.length, 'Trying to read beyond buffer length')
-  }
-
-  if (offset >= this.length)
-    return
-
-  var neg = this[offset] & 0x80
-  if (neg)
-    return (0xff - this[offset] + 1) * -1
-  else
-    return this[offset]
-}
-
-function readInt16 (buf, offset, littleEndian, noAssert) {
-  if (!noAssert) {
-    assert(typeof littleEndian === 'boolean', 'missing or invalid endian')
-    assert(offset !== undefined && offset !== null, 'missing offset')
-    assert(offset + 1 < buf.length, 'Trying to read beyond buffer length')
-  }
-
-  var len = buf.length
-  if (offset >= len)
-    return
-
-  var val = readUInt16(buf, offset, littleEndian, true)
-  var neg = val & 0x8000
-  if (neg)
-    return (0xffff - val + 1) * -1
-  else
-    return val
-}
-
-Buffer.prototype.readInt16LE = function (offset, noAssert) {
-  return readInt16(this, offset, true, noAssert)
-}
-
-Buffer.prototype.readInt16BE = function (offset, noAssert) {
-  return readInt16(this, offset, false, noAssert)
-}
-
-function readInt32 (buf, offset, littleEndian, noAssert) {
-  if (!noAssert) {
-    assert(typeof littleEndian === 'boolean', 'missing or invalid endian')
-    assert(offset !== undefined && offset !== null, 'missing offset')
-    assert(offset + 3 < buf.length, 'Trying to read beyond buffer length')
-  }
-
-  var len = buf.length
-  if (offset >= len)
-    return
-
-  var val = readUInt32(buf, offset, littleEndian, true)
-  var neg = val & 0x80000000
-  if (neg)
-    return (0xffffffff - val + 1) * -1
-  else
-    return val
-}
-
-Buffer.prototype.readInt32LE = function (offset, noAssert) {
-  return readInt32(this, offset, true, noAssert)
-}
-
-Buffer.prototype.readInt32BE = function (offset, noAssert) {
-  return readInt32(this, offset, false, noAssert)
-}
-
-function readFloat (buf, offset, littleEndian, noAssert) {
-  if (!noAssert) {
-    assert(typeof littleEndian === 'boolean', 'missing or invalid endian')
-    assert(offset + 3 < buf.length, 'Trying to read beyond buffer length')
-  }
-
-  return ieee754.read(buf, offset, littleEndian, 23, 4)
-}
-
-Buffer.prototype.readFloatLE = function (offset, noAssert) {
-  return readFloat(this, offset, true, noAssert)
-}
-
-Buffer.prototype.readFloatBE = function (offset, noAssert) {
-  return readFloat(this, offset, false, noAssert)
-}
-
-function readDouble (buf, offset, littleEndian, noAssert) {
-  if (!noAssert) {
-    assert(typeof littleEndian === 'boolean', 'missing or invalid endian')
-    assert(offset + 7 < buf.length, 'Trying to read beyond buffer length')
-  }
-
-  return ieee754.read(buf, offset, littleEndian, 52, 8)
-}
-
-Buffer.prototype.readDoubleLE = function (offset, noAssert) {
-  return readDouble(this, offset, true, noAssert)
-}
-
-Buffer.prototype.readDoubleBE = function (offset, noAssert) {
-  return readDouble(this, offset, false, noAssert)
-}
-
-Buffer.prototype.writeUInt8 = function (value, offset, noAssert) {
-  if (!noAssert) {
-    assert(value !== undefined && value !== null, 'missing value')
-    assert(offset !== undefined && offset !== null, 'missing offset')
-    assert(offset < this.length, 'trying to write beyond buffer length')
-    verifuint(value, 0xff)
-  }
-
-  if (offset >= this.length) return
-
-  this[offset] = value
-  return offset + 1
-}
-
-function writeUInt16 (buf, value, offset, littleEndian, noAssert) {
-  if (!noAssert) {
-    assert(value !== undefined && value !== null, 'missing value')
-    assert(typeof littleEndian === 'boolean', 'missing or invalid endian')
-    assert(offset !== undefined && offset !== null, 'missing offset')
-    assert(offset + 1 < buf.length, 'trying to write beyond buffer length')
-    verifuint(value, 0xffff)
-  }
-
-  var len = buf.length
-  if (offset >= len)
-    return
-
-  for (var i = 0, j = Math.min(len - offset, 2); i < j; i++) {
-    buf[offset + i] =
-        (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>
-            (littleEndian ? i : 1 - i) * 8
-  }
-  return offset + 2
-}
-
-Buffer.prototype.writeUInt16LE = function (value, offset, noAssert) {
-  return writeUInt16(this, value, offset, true, noAssert)
-}
-
-Buffer.prototype.writeUInt16BE = function (value, offset, noAssert) {
-  return writeUInt16(this, value, offset, false, noAssert)
-}
-
-function writeUInt32 (buf, value, offset, littleEndian, noAssert) {
-  if (!noAssert) {
-    assert(value !== undefined && value !== null, 'missing value')
-    assert(typeof littleEndian === 'boolean', 'missing or invalid endian')
-    assert(offset !== undefined && offset !== null, 'missing offset')
-    assert(offset + 3 < buf.length, 'trying to write beyond buffer length')
-    verifuint(value, 0xffffffff)
-  }
-
-  var len = buf.length
-  if (offset >= len)
-    return
-
-  for (var i = 0, j = Math.min(len - offset, 4); i < j; i++) {
-    buf[offset + i] =
-        (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff
-  }
-  return offset + 4
-}
-
-Buffer.prototype.writeUInt32LE = function (value, offset, noAssert) {
-  return writeUInt32(this, value, offset, true, noAssert)
-}
-
-Buffer.prototype.writeUInt32BE = function (value, offset, noAssert) {
-  return writeUInt32(this, value, offset, false, noAssert)
-}
-
-Buffer.prototype.writeInt8 = function (value, offset, noAssert) {
-  if (!noAssert) {
-    assert(value !== undefined && value !== null, 'missing value')
-    assert(offset !== undefined && offset !== null, 'missing offset')
-    assert(offset < this.length, 'Trying to write beyond buffer length')
-    verifsint(value, 0x7f, -0x80)
-  }
-
-  if (offset >= this.length)
-    return
-
-  if (value >= 0)
-    this.writeUInt8(value, offset, noAssert)
-  else
-    this.writeUInt8(0xff + value + 1, offset, noAssert)
-  return offset + 1
-}
-
-function writeInt16 (buf, value, offset, littleEndian, noAssert) {
-  if (!noAssert) {
-    assert(value !== undefined && value !== null, 'missing value')
-    assert(typeof littleEndian === 'boolean', 'missing or invalid endian')
-    assert(offset !== undefined && offset !== null, 'missing offset')
-    assert(offset + 1 < buf.length, 'Trying to write beyond buffer length')
-    verifsint(value, 0x7fff, -0x8000)
-  }
-
-  var len = buf.length
-  if (offset >= len)
-    return
-
-  if (value >= 0)
-    writeUInt16(buf, value, offset, littleEndian, noAssert)
-  else
-    writeUInt16(buf, 0xffff + value + 1, offset, littleEndian, noAssert)
-  return offset + 2
-}
-
-Buffer.prototype.writeInt16LE = function (value, offset, noAssert) {
-  return writeInt16(this, value, offset, true, noAssert)
-}
-
-Buffer.prototype.writeInt16BE = function (value, offset, noAssert) {
-  return writeInt16(this, value, offset, false, noAssert)
-}
-
-function writeInt32 (buf, value, offset, littleEndian, noAssert) {
-  if (!noAssert) {
-    assert(value !== undefined && value !== null, 'missing value')
-    assert(typeof littleEndian === 'boolean', 'missing or invalid endian')
-    assert(offset !== undefined && offset !== null, 'missing offset')
-    assert(offset + 3 < buf.length, 'Trying to write beyond buffer length')
-    verifsint(value, 0x7fffffff, -0x80000000)
-  }
-
-  var len = buf.length
-  if (offset >= len)
-    return
-
-  if (value >= 0)
-    writeUInt32(buf, value, offset, littleEndian, noAssert)
-  else
-    writeUInt32(buf, 0xffffffff + value + 1, offset, littleEndian, noAssert)
-  return offset + 4
-}
-
-Buffer.prototype.writeInt32LE = function (value, offset, noAssert) {
-  return writeInt32(this, value, offset, true, noAssert)
-}
-
-Buffer.prototype.writeInt32BE = function (value, offset, noAssert) {
-  return writeInt32(this, value, offset, false, noAssert)
-}
-
-function writeFloat (buf, value, offset, littleEndian, noAssert) {
-  if (!noAssert) {
-    assert(value !== undefined && value !== null, 'missing value')
-    assert(typeof littleEndian === 'boolean', 'missing or invalid endian')
-    assert(offset !== undefined && offset !== null, 'missing offset')
-    assert(offset + 3 < buf.length, 'Trying to write beyond buffer length')
-    verifIEEE754(value, 3.4028234663852886e+38, -3.4028234663852886e+38)
-  }
-
-  var len = buf.length
-  if (offset >= len)
-    return
-
-  ieee754.write(buf, value, offset, littleEndian, 23, 4)
-  return offset + 4
-}
-
-Buffer.prototype.writeFloatLE = function (value, offset, noAssert) {
-  return writeFloat(this, value, offset, true, noAssert)
-}
-
-Buffer.prototype.writeFloatBE = function (value, offset, noAssert) {
-  return writeFloat(this, value, offset, false, noAssert)
-}
-
-function writeDouble (buf, value, offset, littleEndian, noAssert) {
-  if (!noAssert) {
-    assert(value !== undefined && value !== null, 'missing value')
-    assert(typeof littleEndian === 'boolean', 'missing or invalid endian')
-    assert(offset !== undefined && offset !== null, 'missing offset')
-    assert(offset + 7 < buf.length,
-        'Trying to write beyond buffer length')
-    verifIEEE754(value, 1.7976931348623157E+308, -1.7976931348623157E+308)
-  }
-
-  var len = buf.length
-  if (offset >= len)
-    return
-
-  ieee754.write(buf, value, offset, littleEndian, 52, 8)
-  return offset + 8
-}
-
-Buffer.prototype.writeDoubleLE = function (value, offset, noAssert) {
-  return writeDouble(this, value, offset, true, noAssert)
-}
-
-Buffer.prototype.writeDoubleBE = function (value, offset, noAssert) {
-  return writeDouble(this, value, offset, false, noAssert)
-}
-
-// fill(value, start=0, end=buffer.length)
-Buffer.prototype.fill = function (value, start, end) {
-  if (!value) value = 0
-  if (!start) start = 0
-  if (!end) end = this.length
-
-  assert(end >= start, 'end < start')
-
-  // Fill 0 bytes; we're done
-  if (end === start) return
-  if (this.length === 0) return
-
-  assert(start >= 0 && start < this.length, 'start out of bounds')
-  assert(end >= 0 && end <= this.length, 'end out of bounds')
-
-  var i
-  if (typeof value === 'number') {
-    for (i = start; i < end; i++) {
-      this[i] = value
-    }
-  } else {
-    var bytes = utf8ToBytes(value.toString())
-    var len = bytes.length
-    for (i = start; i < end; i++) {
-      this[i] = bytes[i % len]
-    }
-  }
-
-  return this
-}
-
-Buffer.prototype.inspect = function () {
-  var out = []
-  var len = this.length
-  for (var i = 0; i < len; i++) {
-    out[i] = toHex(this[i])
-    if (i === exports.INSPECT_MAX_BYTES) {
-      out[i + 1] = '...'
-      break
-    }
-  }
-  return '<Buffer ' + out.join(' ') + '>'
-}
-
-/**
- * Creates a new `ArrayBuffer` with the *copied* memory of the buffer instance.
- * Added in Node 0.12. Only available in browsers that support ArrayBuffer.
- */
-Buffer.prototype.toArrayBuffer = function () {
-  if (typeof Uint8Array !== 'undefined') {
-    if (TYPED_ARRAY_SUPPORT) {
-      return (new Buffer(this)).buffer
-    } else {
-      var buf = new Uint8Array(this.length)
-      for (var i = 0, len = buf.length; i < len; i += 1) {
-        buf[i] = this[i]
-      }
-      return buf.buffer
-    }
-  } else {
-    throw new Error('Buffer.toArrayBuffer not supported in this browser')
-  }
-}
-
-// HELPER FUNCTIONS
-// ================
-
-var BP = Buffer.prototype
-
-/**
- * Augment a Uint8Array *instance* (not the Uint8Array class!) with Buffer methods
- */
-Buffer._augment = function (arr) {
-  arr._isBuffer = true
-
-  // save reference to original Uint8Array get/set methods before overwriting
-  arr._get = arr.get
-  arr._set = arr.set
-
-  // deprecated, will be removed in node 0.13+
-  arr.get = BP.get
-  arr.set = BP.set
-
-  arr.write = BP.write
-  arr.toString = BP.toString
-  arr.toLocaleString = BP.toString
-  arr.toJSON = BP.toJSON
-  arr.equals = BP.equals
-  arr.compare = BP.compare
-  arr.copy = BP.copy
-  arr.slice = BP.slice
-  arr.readUInt8 = BP.readUInt8
-  arr.readUInt16LE = BP.readUInt16LE
-  arr.readUInt16BE = BP.readUInt16BE
-  arr.readUInt32LE = BP.readUInt32LE
-  arr.readUInt32BE = BP.readUInt32BE
-  arr.readInt8 = BP.readInt8
-  arr.readInt16LE = BP.readInt16LE
-  arr.readInt16BE = BP.readInt16BE
-  arr.readInt32LE = BP.readInt32LE
-  arr.readInt32BE = BP.readInt32BE
-  arr.readFloatLE = BP.readFloatLE
-  arr.readFloatBE = BP.readFloatBE
-  arr.readDoubleLE = BP.readDoubleLE
-  arr.readDoubleBE = BP.readDoubleBE
-  arr.writeUInt8 = BP.writeUInt8
-  arr.writeUInt16LE = BP.writeUInt16LE
-  arr.writeUInt16BE = BP.writeUInt16BE
-  arr.writeUInt32LE = BP.writeUInt32LE
-  arr.writeUInt32BE = BP.writeUInt32BE
-  arr.writeInt8 = BP.writeInt8
-  arr.writeInt16LE = BP.writeInt16LE
-  arr.writeInt16BE = BP.writeInt16BE
-  arr.writeInt32LE = BP.writeInt32LE
-  arr.writeInt32BE = BP.writeInt32BE
-  arr.writeFloatLE = BP.writeFloatLE
-  arr.writeFloatBE = BP.writeFloatBE
-  arr.writeDoubleLE = BP.writeDoubleLE
-  arr.writeDoubleBE = BP.writeDoubleBE
-  arr.fill = BP.fill
-  arr.inspect = BP.inspect
-  arr.toArrayBuffer = BP.toArrayBuffer
-
-  return arr
-}
-
-var INVALID_BASE64_RE = /[^+\/0-9A-z]/g
-
-function base64clean (str) {
-  // Node strips out invalid characters like \n and \t from the string, base64-js does not
-  str = stringtrim(str).replace(INVALID_BASE64_RE, '')
-  // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
-  while (str.length % 4 !== 0) {
-    str = str + '='
-  }
-  return str
-}
-
-function stringtrim (str) {
-  if (str.trim) return str.trim()
-  return str.replace(/^\s+|\s+$/g, '')
-}
-
-function isArray (subject) {
-  return (Array.isArray || function (subject) {
-    return Object.prototype.toString.call(subject) === '[object Array]'
-  })(subject)
-}
-
-function isArrayish (subject) {
-  return isArray(subject) || Buffer.isBuffer(subject) ||
-      subject && typeof subject === 'object' &&
-      typeof subject.length === 'number'
-}
-
-function toHex (n) {
-  if (n < 16) return '0' + n.toString(16)
-  return n.toString(16)
-}
-
-function utf8ToBytes (str) {
-  var byteArray = []
-  for (var i = 0; i < str.length; i++) {
-    var b = str.charCodeAt(i)
-    if (b <= 0x7F) {
-      byteArray.push(b)
-    } else {
-      var start = i
-      if (b >= 0xD800 && b <= 0xDFFF) i++
-      var h = encodeURIComponent(str.slice(start, i+1)).substr(1).split('%')
-      for (var j = 0; j < h.length; j++) {
-        byteArray.push(parseInt(h[j], 16))
-      }
-    }
-  }
-  return byteArray
-}
-
-function asciiToBytes (str) {
-  var byteArray = []
-  for (var i = 0; i < str.length; i++) {
-    // Node's code seems to be doing this and not & 0x7F..
-    byteArray.push(str.charCodeAt(i) & 0xFF)
-  }
-  return byteArray
-}
-
-function utf16leToBytes (str) {
-  var c, hi, lo
-  var byteArray = []
-  for (var i = 0; i < str.length; i++) {
-    c = str.charCodeAt(i)
-    hi = c >> 8
-    lo = c % 256
-    byteArray.push(lo)
-    byteArray.push(hi)
-  }
-
-  return byteArray
-}
-
-function base64ToBytes (str) {
-  return base64.toByteArray(str)
-}
-
-function blitBuffer (src, dst, offset, length) {
-  for (var i = 0; i < length; i++) {
-    if ((i + offset >= dst.length) || (i >= src.length))
-      break
-    dst[i + offset] = src[i]
-  }
-  return i
-}
-
-function decodeUtf8Char (str) {
-  try {
-    return decodeURIComponent(str)
-  } catch (err) {
-    return String.fromCharCode(0xFFFD) // UTF 8 invalid char
-  }
-}
-
-/*
- * We have to make sure that the value is a valid integer. This means that it
- * is non-negative. It has no fractional component and that it does not
- * exceed the maximum allowed value.
- */
-function verifuint (value, max) {
-  assert(typeof value === 'number', 'cannot write a non-number as a number')
-  assert(value >= 0, 'specified a negative value for writing an unsigned value')
-  assert(value <= max, 'value is larger than maximum value for type')
-  assert(Math.floor(value) === value, 'value has a fractional component')
-}
-
-function verifsint (value, max, min) {
-  assert(typeof value === 'number', 'cannot write a non-number as a number')
-  assert(value <= max, 'value larger than maximum allowed value')
-  assert(value >= min, 'value smaller than minimum allowed value')
-  assert(Math.floor(value) === value, 'value has a fractional component')
-}
-
-function verifIEEE754 (value, max, min) {
-  assert(typeof value === 'number', 'cannot write a non-number as a number')
-  assert(value <= max, 'value larger than maximum allowed value')
-  assert(value >= min, 'value smaller than minimum allowed value')
-}
-
-function assert (test, message) {
-  if (!test) throw new Error(message || 'Failed assertion')
-}
-
-},{"base64-js":2,"ieee754":4}],4:[function(require,module,exports){
-exports.read = function(buffer, offset, isLE, mLen, nBytes) {
-  var e, m,
-      eLen = nBytes * 8 - mLen - 1,
-      eMax = (1 << eLen) - 1,
-      eBias = eMax >> 1,
-      nBits = -7,
-      i = isLE ? (nBytes - 1) : 0,
-      d = isLE ? -1 : 1,
-      s = buffer[offset + i];
-
-  i += d;
-
-  e = s & ((1 << (-nBits)) - 1);
-  s >>= (-nBits);
-  nBits += eLen;
-  for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8);
-
-  m = e & ((1 << (-nBits)) - 1);
-  e >>= (-nBits);
-  nBits += mLen;
-  for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8);
-
-  if (e === 0) {
-    e = 1 - eBias;
-  } else if (e === eMax) {
-    return m ? NaN : ((s ? -1 : 1) * Infinity);
-  } else {
-    m = m + Math.pow(2, mLen);
-    e = e - eBias;
-  }
-  return (s ? -1 : 1) * m * Math.pow(2, e - mLen);
-};
-
-exports.write = function(buffer, value, offset, isLE, mLen, nBytes) {
-  var e, m, c,
-      eLen = nBytes * 8 - mLen - 1,
-      eMax = (1 << eLen) - 1,
-      eBias = eMax >> 1,
-      rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0),
-      i = isLE ? 0 : (nBytes - 1),
-      d = isLE ? 1 : -1,
-      s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0;
-
-  value = Math.abs(value);
-
-  if (isNaN(value) || value === Infinity) {
-    m = isNaN(value) ? 1 : 0;
-    e = eMax;
-  } else {
-    e = Math.floor(Math.log(value) / Math.LN2);
-    if (value * (c = Math.pow(2, -e)) < 1) {
-      e--;
-      c *= 2;
-    }
-    if (e + eBias >= 1) {
-      value += rt / c;
-    } else {
-      value += rt * Math.pow(2, 1 - eBias);
-    }
-    if (value * c >= 2) {
-      e++;
-      c /= 2;
-    }
-
-    if (e + eBias >= eMax) {
-      m = 0;
-      e = eMax;
-    } else if (e + eBias >= 1) {
-      m = (value * c - 1) * Math.pow(2, mLen);
-      e = e + eBias;
-    } else {
-      m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen);
-      e = 0;
-    }
-  }
-
-  for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8);
-
-  e = (e << mLen) | m;
-  eLen += mLen;
-  for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8);
-
-  buffer[offset + i - d] |= s * 128;
-};
-
-},{}],5:[function(require,module,exports){
-(function (global){
-
-/**
- * Module exports.
- */
-
-module.exports = deprecate;
-
-/**
- * Mark that a method should not be used.
- * Returns a modified function which warns once by default.
- * If --no-deprecation is set, then it is a no-op.
- *
- * @param {Function} fn - the function to deprecate
- * @param {String} msg - the string to print to the console when `fn` is invoked
- * @returns {Function} a new "deprecated" version of `fn`
- * @api public
- */
-
-function deprecate (fn, msg) {
-  if (config('noDeprecation')) {
-    return fn;
-  }
-
-  var warned = false;
-  function deprecated() {
-    if (!warned) {
-      if (config('throwDeprecation')) {
-        throw new Error(msg);
-      } else if (config('traceDeprecation')) {
-        console.trace(msg);
-      } else {
-        console.error(msg);
-      }
-      warned = true;
-    }
-    return fn.apply(this, arguments);
-  }
-
-  return deprecated;
-}
-
-/**
- * Checks `localStorage` for boolean values for the given `name`.
- *
- * @param {String} name
- * @returns {Boolean}
- * @api private
- */
-
-function config (name) {
-  if (!global.localStorage) return false;
-  var val = global.localStorage[name];
-  if (null == val) return false;
-  return String(val).toLowerCase() === 'true';
-}
-
-}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
-},{}],6:[function(require,module,exports){
-function DOMParser(options){
-	this.options = options ||{locator:{}};
-	
-}
-DOMParser.prototype.parseFromString = function(source,mimeType){	
-	var options = this.options;
-	var sax =  new XMLReader();
-	var domBuilder = options.domBuilder || new DOMHandler();//contentHandler and LexicalHandler
-	var errorHandler = options.errorHandler;
-	var locator = options.locator;
-	var defaultNSMap = options.xmlns||{};
-	var entityMap = {'lt':'<','gt':'>','amp':'&','quot':'"','apos':"'"}
-	if(locator){
-		domBuilder.setDocumentLocator(locator)
-	}
-	
-	sax.errorHandler = buildErrorHandler(errorHandler,domBuilder,locator);
-	sax.domBuilder = options.domBuilder || domBuilder;
-	if(/\/x?html?$/.test(mimeType)){
-		entityMap.nbsp = '\xa0';
-		entityMap.copy = '\xa9';
-		defaultNSMap['']= 'http://www.w3.org/1999/xhtml';
-	}
-	if(source){
-		sax.parse(source,defaultNSMap,entityMap);
-	}else{
-		sax.errorHandler.error("invalid document source");
-	}
-	return domBuilder.document;
-}
-function buildErrorHandler(errorImpl,domBuilder,locator){
-	if(!errorImpl){
-		if(domBuilder instanceof DOMHandler){
-			return domBuilder;
-		}
-		errorImpl = domBuilder ;
-	}
-	var errorHandler = {}
-	var isCallback = errorImpl instanceof Function;
-	locator = locator||{}
-	function build(key){
-		var fn = errorImpl[key];
-		if(!fn){
-			if(isCallback){
-				fn = errorImpl.length == 2?function(msg){errorImpl(key,msg)}:errorImpl;
-			}else{
-				var i=arguments.length;
-				while(--i){
-					if(fn = errorImpl[arguments[i]]){
-						break;
-					}
-				}
-			}
-		}
-		errorHandler[key] = fn && function(msg){
-			fn(msg+_locator(locator));
-		}||function(){};
-	}
-	build('warning','warn');
-	build('error','warn','warning');
-	build('fatalError','warn','warning','error');
-	return errorHandler;
-}
-/**
- * +ContentHandler+ErrorHandler
- * +LexicalHandler+EntityResolver2
- * -DeclHandler-DTDHandler 
- * 
- * DefaultHandler:EntityResolver, DTDHandler, ContentHandler, ErrorHandler
- * DefaultHandler2:DefaultHandler,LexicalHandler, DeclHandler, EntityResolver2
- * @link http://www.saxproject.org/apidoc/org/xml/sax/helpers/DefaultHandler.html
- */
-function DOMHandler() {
-    this.cdata = false;
-}
-function position(locator,node){
-	node.lineNumber = locator.lineNumber;
-	node.columnNumber = locator.columnNumber;
-}
-/**
- * @see org.xml.sax.ContentHandler#startDocument
- * @link http://www.saxproject.org/apidoc/org/xml/sax/ContentHandler.html
- */ 
-DOMHandler.prototype = {
-	startDocument : function() {
-    	this.document = new DOMImplementation().createDocument(null, null, null);
-    	if (this.locator) {
-        	this.document.documentURI = this.locator.systemId;
-    	}
-	},
-	startElement:function(namespaceURI, localName, qName, attrs) {
-		var doc = this.document;
-	    var el = doc.createElementNS(namespaceURI, qName||localName);
-	    var len = attrs.length;
-	    appendElement(this, el);
-	    this.currentElement = el;
-	    
-		this.locator && position(this.locator,el)
-	    for (var i = 0 ; i < len; i++) {
-	        var namespaceURI = attrs.getURI(i);
-	        var value = attrs.getValue(i);
-	        var qName = attrs.getQName(i);
-			var attr = doc.createAttributeNS(namespaceURI, qName);
-			if( attr.getOffset){
-				position(attr.getOffset(1),attr)
-			}
-			attr.value = attr.nodeValue = value;
-			el.setAttributeNode(attr)
-	    }
-	},
-	endElement:function(namespaceURI, localName, qName) {
-		var current = this.currentElement
-	    var tagName = current.tagName;
-	    this.currentElement = current.parentNode;
-	},
-	startPrefixMapping:function(prefix, uri) {
-	},
-	endPrefixMapping:function(prefix) {
-	},
-	processingInstruction:function(target, data) {
-	    var ins = this.document.createProcessingInstruction(target, data);
-	    this.locator && position(this.locator,ins)
-	    appendElement(this, ins);
-	},
-	ignorableWhitespace:function(ch, start, length) {
-	},
-	characters:function(chars, start, length) {
-		chars = _toString.apply(this,arguments)
-		//console.log(chars)
-		if(this.currentElement && chars){
-			if (this.cdata) {
-				var charNode = this.document.createCDATASection(chars);
-				this.currentElement.appendChild(charNode);
-			} else {
-				var charNode = this.document.createTextNode(chars);
-				this.currentElement.appendChild(charNode);
-			}
-			this.locator && position(this.locator,charNode)
-		}
-	},
-	skippedEntity:function(name) {
-	},
-	endDocument:function() {
-		this.document.normalize();
-	},
-	setDocumentLocator:function (locator) {
-	    if(this.locator = locator){// && !('lineNumber' in locator)){
-	    	locator.lineNumber = 0;
-	    }
-	},
-	//LexicalHandler
-	comment:function(chars, start, length) {
-		chars = _toString.apply(this,arguments)
-	    var comm = this.document.createComment(chars);
-	    this.locator && position(this.locator,comm)
-	    appendElement(this, comm);
-	},
-	
-	startCDATA:function() {
-	    //used in characters() methods
-	    this.cdata = true;
-	},
-	endCDATA:function() {
-	    this.cdata = false;
-	},
-	
-	startDTD:function(name, publicId, systemId) {
-		var impl = this.document.implementation;
-	    if (impl && impl.createDocumentType) {
-	        var dt = impl.createDocumentType(name, publicId, systemId);
-	        this.locator && position(this.locator,dt)
-	        appendElement(this, dt);
-	    }
-	},
-	/**
-	 * @see org.xml.sax.ErrorHandler
-	 * @link http://www.saxproject.org/apidoc/org/xml/sax/ErrorHandler.html
-	 */
-	warning:function(error) {
-		console.warn(error,_locator(this.locator));
-	},
-	error:function(error) {
-		console.error(error,_locator(this.locator));
-	},
-	fatalError:function(error) {
-		console.error(error,_locator(this.locator));
-	    throw error;
-	}
-}
-function _locator(l){
-	if(l){
-		return '\n@'+(l.systemId ||'')+'#[line:'+l.lineNumber+',col:'+l.columnNumber+']'
-	}
-}
-function _toString(chars,start,length){
-	if(typeof chars == 'string'){
-		return chars.substr(start,length)
-	}else{//java sax connect width xmldom on rhino(what about: "? && !(chars instanceof String)")
-		if(chars.length >= start+length || start){
-			return new java.lang.String(chars,start,length)+'';
-		}
-		return chars;
-	}
-}
-
-/*
- * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/LexicalHandler.html
- * used method of org.xml.sax.ext.LexicalHandler:
- *  #comment(chars, start, length)
- *  #startCDATA()
- *  #endCDATA()
- *  #startDTD(name, publicId, systemId)
- *
- *
- * IGNORED method of org.xml.sax.ext.LexicalHandler:
- *  #endDTD()
- *  #startEntity(name)
- *  #endEntity(name)
- *
- *
- * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/DeclHandler.html
- * IGNORED method of org.xml.sax.ext.DeclHandler
- * 	#attributeDecl(eName, aName, type, mode, value)
- *  #elementDecl(name, model)
- *  #externalEntityDecl(name, publicId, systemId)
- *  #internalEntityDecl(name, value)
- * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/EntityResolver2.html
- * IGNORED method of org.xml.sax.EntityResolver2
- *  #resolveEntity(String name,String publicId,String baseURI,String systemId)
- *  #resolveEntity(publicId, systemId)
- *  #getExternalSubset(name, baseURI)
- * @link http://www.saxproject.org/apidoc/org/xml/sax/DTDHandler.html
- * IGNORED method of org.xml.sax.DTDHandler
- *  #notationDecl(name, publicId, systemId) {};
- *  #unparsedEntityDecl(name, publicId, systemId, notationName) {};
- */
-"endDTD,startEntity,endEntity,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,resolveEntity,getExternalSubset,notationDecl,unparsedEntityDecl".replace(/\w+/g,function(key){
-	DOMHandler.prototype[key] = function(){return null}
-})
-
-/* Private static helpers treated below as private instance methods, so don't need to add these to the public API; we might use a Relator to also get rid of non-standard public properties */
-function appendElement (hander,node) {
-    if (!hander.currentElement) {
-        hander.document.appendChild(node);
-    } else {
-        hander.currentElement.appendChild(node);
-    }
-}//appendChild and setAttributeNS are preformance key
-
-if(typeof require == 'function'){
-	var XMLReader = require('./sax').XMLReader;
-	var DOMImplementation = exports.DOMImplementation = require('./dom').DOMImplementation;
-	exports.XMLSerializer = require('./dom').XMLSerializer ;
-	exports.DOMParser = DOMParser;
-}
-
-},{"./dom":7,"./sax":8}],7:[function(require,module,exports){
-/*
- * DOM Level 2
- * Object DOMException
- * @see http://www.w3.org/TR/REC-DOM-Level-1/ecma-script-language-binding.html
- * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html
- */
-
-function copy(src,dest){
-	for(var p in src){
-		dest[p] = src[p];
-	}
-}
-/**
-^\w+\.prototype\.([_\w]+)\s*=\s*((?:.*\{\s*?[\r\n][\s\S]*?^})|\S.*?(?=[;\r\n]));?
-^\w+\.prototype\.([_\w]+)\s*=\s*(\S.*?(?=[;\r\n]));?
- */
-function _extends(Class,Super){
-	var pt = Class.prototype;
-	if(Object.create){
-		var ppt = Object.create(Super.prototype)
-		pt.__proto__ = ppt;
-	}
-	if(!(pt instanceof Super)){
-		function t(){};
-		t.prototype = Super.prototype;
-		t = new t();
-		copy(pt,t);
-		Class.prototype = pt = t;
-	}
-	if(pt.constructor != Class){
-		if(typeof Class != 'function'){
-			console.error("unknow Class:"+Class)
-		}
-		pt.constructor = Class
-	}
-}
-var htmlns = 'http://www.w3.org/1999/xhtml' ;
-// Node Types
-var NodeType = {}
-var ELEMENT_NODE                = NodeType.ELEMENT_NODE                = 1;
-var ATTRIBUTE_NODE              = NodeType.ATTRIBUTE_NODE              = 2;
-var TEXT_NODE                   = NodeType.TEXT_NODE                   = 3;
-var CDATA_SECTION_NODE          = NodeType.CDATA_SECTION_NODE          = 4;
-var ENTITY_REFERENCE_NODE       = NodeType.ENTITY_REFERENCE_NODE       = 5;
-var ENTITY_NODE                 = NodeType.ENTITY_NODE                 = 6;
-var PROCESSING_INSTRUCTION_NODE = NodeType.PROCESSING_INSTRUCTION_NODE = 7;
-var COMMENT_NODE                = NodeType.COMMENT_NODE                = 8;
-var DOCUMENT_NODE               = NodeType.DOCUMENT_NODE               = 9;
-var DOCUMENT_TYPE_NODE          = NodeType.DOCUMENT_TYPE_NODE          = 10;
-var DOCUMENT_FRAGMENT_NODE      = NodeType.DOCUMENT_FRAGMENT_NODE      = 11;
-var NOTATION_NODE               = NodeType.NOTATION_NODE               = 12;
-
-// ExceptionCode
-var ExceptionCode = {}
-var ExceptionMessage = {};
-var INDEX_SIZE_ERR              = ExceptionCode.INDEX_SIZE_ERR              = ((ExceptionMessage[1]="Index size error"),1);
-var DOMSTRING_SIZE_ERR          = ExceptionCode.DOMSTRING_SIZE_ERR          = ((ExceptionMessage[2]="DOMString size error"),2);
-var HIERARCHY_REQUEST_ERR       = ExceptionCode.HIERARCHY_REQUEST_ERR       = ((ExceptionMessage[3]="Hierarchy request error"),3);
-var WRONG_DOCUMENT_ERR          = ExceptionCode.WRONG_DOCUMENT_ERR          = ((ExceptionMessage[4]="Wrong document"),4);
-var INVALID_CHARACTER_ERR       = ExceptionCode.INVALID_CHARACTER_ERR       = ((ExceptionMessage[5]="Invalid character"),5);
-var NO_DATA_ALLOWED_ERR         = ExceptionCode.NO_DATA_ALLOWED_ERR         = ((ExceptionMessage[6]="No data allowed"),6);
-var NO_MODIFICATION_ALLOWED_ERR = ExceptionCode.NO_MODIFICATION_ALLOWED_ERR = ((ExceptionMessage[7]="No modification allowed"),7);
-var NOT_FOUND_ERR               = ExceptionCode.NOT_FOUND_ERR               = ((ExceptionMessage[8]="Not found"),8);
-var NOT_SUPPORTED_ERR           = ExceptionCode.NOT_SUPPORTED_ERR           = ((ExceptionMessage[9]="Not supported"),9);
-var INUSE_ATTRIBUTE_ERR         = ExceptionCode.INUSE_ATTRIBUTE_ERR         = ((ExceptionMessage[10]="Attribute in use"),10);
-//level2
-var INVALID_STATE_ERR        	= ExceptionCode.INVALID_STATE_ERR        	= ((ExceptionMessage[11]="Invalid state"),11);
-var SYNTAX_ERR               	= ExceptionCode.SYNTAX_ERR               	= ((ExceptionMessage[12]="Syntax error"),12);
-var INVALID_MODIFICATION_ERR 	= ExceptionCode.INVALID_MODIFICATION_ERR 	= ((ExceptionMessage[13]="Invalid modification"),13);
-var NAMESPACE_ERR            	= ExceptionCode.NAMESPACE_ERR           	= ((ExceptionMessage[14]="Invalid namespace"),14);
-var INVALID_ACCESS_ERR       	= ExceptionCode.INVALID_ACCESS_ERR      	= ((ExceptionMessage[15]="Invalid access"),15);
-
-
-function DOMException(code, message) {
-	if(message instanceof Error){
-		var error = message;
-	}else{
-		error = this;
-		Error.call(this, ExceptionMessage[code]);
-		this.message = ExceptionMessage[code];
-		if(Error.captureStackTrace) Error.captureStackTrace(this, DOMException);
-	}
-	error.code = code;
-	if(message) this.message = this.message + ": " + message;
-	return error;
-};
-DOMException.prototype = Error.prototype;
-copy(ExceptionCode,DOMException)
-/**
- * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-536297177
- * The NodeList interface provides the abstraction of an ordered collection of nodes, without defining or constraining how this collection is implemented. NodeList objects in the DOM are live.
- * The items in the NodeList are accessible via an integral index, starting from 0.
- */
-function NodeList() {
-};
-NodeList.prototype = {
-	/**
-	 * The number of nodes in the list. The range of valid child node indices is 0 to length-1 inclusive.
-	 * @standard level1
-	 */
-	length:0, 
-	/**
-	 * Returns the indexth item in the collection. If index is greater than or equal to the number of nodes in the list, this returns null.
-	 * @standard level1
-	 * @param index  unsigned long 
-	 *   Index into the collection.
-	 * @return Node
-	 * 	The node at the indexth position in the NodeList, or null if that is not a valid index. 
-	 */
-	item: function(index) {
-		return this[index] || null;
-	}
-};
-function LiveNodeList(node,refresh){
-	this._node = node;
-	this._refresh = refresh
-	_updateLiveList(this);
-}
-function _updateLiveList(list){
-	var inc = list._node._inc || list._node.ownerDocument._inc;
-	if(list._inc != inc){
-		var ls = list._refresh(list._node);
-		//console.log(ls.length)
-		__set__(list,'length',ls.length);
-		copy(ls,list);
-		list._inc = inc;
-	}
-}
-LiveNodeList.prototype.item = function(i){
-	_updateLiveList(this);
-	return this[i];
-}
-
-_extends(LiveNodeList,NodeList);
-/**
- * 
- * Objects implementing the NamedNodeMap interface are used to represent collections of nodes that can be accessed by name. Note that NamedNodeMap does not inherit from NodeList; NamedNodeMaps are not maintained in any particular order. Objects contained in an object implementing NamedNodeMap may also be accessed by an ordinal index, but this is simply to allow convenient enumeration of the contents of a NamedNodeMap, and does not imply that the DOM specifies an order to these Nodes.
- * NamedNodeMap objects in the DOM are live.
- * used for attributes or DocumentType entities 
- */
-function NamedNodeMap() {
-};
-
-function _findNodeIndex(list,node){
-	var i = list.length;
-	while(i--){
-		if(list[i] === node){return i}
-	}
-}
-
-function _addNamedNode(el,list,newAttr,oldAttr){
-	if(oldAttr){
-		list[_findNodeIndex(list,oldAttr)] = newAttr;
-	}else{
-		list[list.length++] = newAttr;
-	}
-	if(el){
-		newAttr.ownerElement = el;
-		var doc = el.ownerDocument;
-		if(doc){
-			oldAttr && _onRemoveAttribute(doc,el,oldAttr);
-			_onAddAttribute(doc,el,newAttr);
-		}
-	}
-}
-function _removeNamedNode(el,list,attr){
-	var i = _findNodeIndex(list,attr);
-	if(i>=0){
-		var lastIndex = list.length-1
-		while(i<lastIndex){
-			list[i] = list[++i]
-		}
-		list.length = lastIndex;
-		if(el){
-			var doc = el.ownerDocument;
-			if(doc){
-				_onRemoveAttribute(doc,el,attr);
-				attr.ownerElement = null;
-			}
-		}
-	}else{
-		throw DOMException(NOT_FOUND_ERR,new Error())
-	}
-}
-NamedNodeMap.prototype = {
-	length:0,
-	item:NodeList.prototype.item,
-	getNamedItem: function(key) {
-//		if(key.indexOf(':')>0 || key == 'xmlns'){
-//			return null;
-//		}
-		var i = this.length;
-		while(i--){
-			var attr = this[i];
-			if(attr.nodeName == key){
-				return attr;
-			}
-		}
-	},
-	setNamedItem: function(attr) {
-		var el = attr.ownerElement;
-		if(el && el!=this._ownerElement){
-			throw new DOMException(INUSE_ATTRIBUTE_ERR);
-		}
-		var oldAttr = this.getNamedItem(attr.nodeName);
-		_addNamedNode(this._ownerElement,this,attr,oldAttr);
-		return oldAttr;
-	},
-	/* returns Node */
-	setNamedItemNS: function(attr) {// raises: WRONG_DOCUMENT_ERR,NO_MODIFICATION_ALLOWED_ERR,INUSE_ATTRIBUTE_ERR
-		var el = attr.ownerElement, oldAttr;
-		if(el && el!=this._ownerElement){
-			throw new DOMException(INUSE_ATTRIBUTE_ERR);
-		}
-		oldAttr = this.getNamedItemNS(attr.namespaceURI,attr.localName);
-		_addNamedNode(this._ownerElement,this,attr,oldAttr);
-		return oldAttr;
-	},
-
-	/* returns Node */
-	removeNamedItem: function(key) {
-		var attr = this.getNamedItem(key);
-		_removeNamedNode(this._ownerElement,this,attr);
-		return attr;
-		
-		
-	},// raises: NOT_FOUND_ERR,NO_MODIFICATION_ALLOWED_ERR
-	
-	//for level2
-	removeNamedItemNS:function(namespaceURI,localName){
-		var attr = this.getNamedItemNS(namespaceURI,localName);
-		_removeNamedNode(this._ownerElement,this,attr);
-		return attr;
-	},
-	getNamedItemNS: function(namespaceURI, localName) {
-		var i = this.length;
-		while(i--){
-			var node = this[i];
-			if(node.localName == localName && node.namespaceURI == namespaceURI){
-				return node;
-			}
-		}
-		return null;
-	}
-};
-/**
- * @see http://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-102161490
- */
-function DOMImplementation(/* Object */ features) {
-	this._features = {};
-	if (features) {
-		for (var feature in features) {
-			 this._features = features[feature];
-		}
-	}
-};
-
-DOMImplementation.prototype = {
-	hasFeature: function(/* string */ feature, /* string */ version) {
-		var versions = this._features[feature.toLowerCase()];
-		if (versions && (!version || version in versions)) {
-			return true;
-		} else {
-			return false;
-		}
-	},
-	// Introduced in DOM Level 2:
-	createDocument:function(namespaceURI,  qualifiedName, doctype){// raises:INVALID_CHARACTER_ERR,NAMESPACE_ERR,WRONG_DOCUMENT_ERR
-		var doc = new Document();
-		doc.doctype = doctype;
-		if(doctype){
-			doc.appendChild(doctype);
-		}
-		doc.implementation = this;
-		doc.childNodes = new NodeList();
-		if(qualifiedName){
-			var root = doc.createElementNS(namespaceURI,qualifiedName);
-			doc.appendChild(root);
-		}
-		return doc;
-	},
-	// Introduced in DOM Level 2:
-	createDocumentType:function(qualifiedName, publicId, systemId){// raises:INVALID_CHARACTER_ERR,NAMESPACE_ERR
-		var node = new DocumentType();
-		node.name = qualifiedName;
-		node.nodeName = qualifiedName;
-		node.publicId = publicId;
-		node.systemId = systemId;
-		// Introduced in DOM Level 2:
-		//readonly attribute DOMString        internalSubset;
-		
-		//TODO:..
-		//  readonly attribute NamedNodeMap     entities;
-		//  readonly attribute NamedNodeMap     notations;
-		return node;
-	}
-};
-
-
-/**
- * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-1950641247
- */
-
-function Node() {
-};
-
-Node.prototype = {
-	firstChild : null,
-	lastChild : null,
-	previousSibling : null,
-	nextSibling : null,
-	attributes : null,
-	parentNode : null,
-	childNodes : null,
-	ownerDocument : null,
-	nodeValue : null,
-	namespaceURI : null,
-	prefix : null,
-	localName : null,
-	// Modified in DOM Level 2:
-	insertBefore:function(newChild, refChild){//raises 
-		return _insertBefore(this,newChild,refChild);
-	},
-	replaceChild:function(newChild, oldChild){//raises 
-		this.insertBefore(newChild,oldChild);
-		if(oldChild){
-			this.removeChild(oldChild);
-		}
-	},
-	removeChild:function(oldChild){
-		return _removeChild(this,oldChild);
-	},
-	appendChild:function(newChild){
-		return this.insertBefore(newChild,null);
-	},
-	hasChildNodes:function(){
-		return this.firstChild != null;
-	},
-	cloneNode:function(deep){
-		return cloneNode(this.ownerDocument||this,this,deep);
-	},
-	// Modified in DOM Level 2:
-	normalize:function(){
-		var child = this.firstChild;
-		while(child){
-			var next = child.nextSibling;
-			if(next && next.nodeType == TEXT_NODE && child.nodeType == TEXT_NODE){
-				this.removeChild(next);
-				child.appendData(next.data);
-			}else{
-				child.normalize();
-				child = next;
-			}
-		}
-	},
-  	// Introduced in DOM Level 2:
-	isSupported:function(feature, version){
-		return this.ownerDocument.implementation.hasFeature(feature,version);
-	},
-    // Introduced in DOM Level 2:
-    hasAttributes:function(){
-    	return this.attributes.length>0;
-    },
-    lookupPrefix:function(namespaceURI){
-    	var el = this;
-    	while(el){
-    		var map = el._nsMap;
-    		//console.dir(map)
-    		if(map){
-    			for(var n in map){
-    				if(map[n] == namespaceURI){
-    					return n;
-    				}
-    			}
-    		}
-    		el = el.nodeType == 2?el.ownerDocument : el.parentNode;
-    	}
-    	return null;
-    },
-    // Introduced in DOM Level 3:
-    lookupNamespaceURI:function(prefix){
-    	var el = this;
-    	while(el){
-    		var map = el._nsMap;
-    		//console.dir(map)
-    		if(map){
-    			if(prefix in map){
-    				return map[prefix] ;
-    			}
-    		}
-    		el = el.nodeType == 2?el.ownerDocument : el.parentNode;
-    	}
-    	return null;
-    },
-    // Introduced in DOM Level 3:
-    isDefaultNamespace:function(namespaceURI){
-    	var prefix = this.lookupPrefix(namespaceURI);
-    	return prefix == null;
-    }
-};
-
-
-function _xmlEncoder(c){
-	return c == '<' && '&lt;' ||
-         c == '>' && '&gt;' ||
-         c == '&' && '&amp;' ||
-         c == '"' && '&quot;' ||
-         '&#'+c.charCodeAt()+';'
-}
-
-
-copy(NodeType,Node);
-copy(NodeType,Node.prototype);
-
-/**
- * @param callback return true for continue,false for break
- * @return boolean true: break visit;
- */
-function _visitNode(node,callback){
-	if(callback(node)){
-		return true;
-	}
-	if(node = node.firstChild){
-		do{
-			if(_visitNode(node,callback)){return true}
-        }while(node=node.nextSibling)
-    }
-}
-
-
-
-function Document(){
-}
-function _onAddAttribute(doc,el,newAttr){
-	doc && doc._inc++;
-	var ns = newAttr.namespaceURI ;
-	if(ns == 'http://www.w3.org/2000/xmlns/'){
-		//update namespace
-		el._nsMap[newAttr.prefix?newAttr.localName:''] = newAttr.value
-	}
-}
-function _onRemoveAttribute(doc,el,newAttr,remove){
-	doc && doc._inc++;
-	var ns = newAttr.namespaceURI ;
-	if(ns == 'http://www.w3.org/2000/xmlns/'){
-		//update namespace
-		delete el._nsMap[newAttr.prefix?newAttr.localName:'']
-	}
-}
-function _onUpdateChild(doc,el,newChild){
-	if(doc && doc._inc){
-		doc._inc++;
-		//update childNodes
-		var cs = el.childNodes;
-		if(newChild){
-			cs[cs.length++] = newChild;
-		}else{
-			//console.log(1)
-			var child = el.firstChild;
-			var i = 0;
-			while(child){
-				cs[i++] = child;
-				child =child.nextSibling;
-			}
-			cs.length = i;
-		}
-	}
-}
-
-/**
- * attributes;
- * children;
- * 
- * writeable properties:
- * nodeValue,Attr:value,CharacterData:data
- * prefix
- */
-function _removeChild(parentNode,child){
-	var previous = child.previousSibling;
-	var next = child.nextSibling;
-	if(previous){
-		previous.nextSibling = next;
-	}else{
-		parentNode.firstChild = next
-	}
-	if(next){
-		next.previousSibling = previous;
-	}else{
-		parentNode.lastChild = previous;
-	}
-	_onUpdateChild(parentNode.ownerDocument,parentNode);
-	return child;
-}
-/**
- * preformance key(refChild == null)
- */
-function _insertBefore(parentNode,newChild,nextChild){
-	var cp = newChild.parentNode;
-	if(cp){
-		cp.removeChild(newChild);//remove and update
-	}
-	if(newChild.nodeType === DOCUMENT_FRAGMENT_NODE){
-		var newFirst = newChild.firstChild;
-		if (newFirst == null) {
-			return newChild;
-		}
-		var newLast = newChild.lastChild;
-	}else{
-		newFirst = newLast = newChild;
-	}
-	var pre = nextChild ? nextChild.previousSibling : parentNode.lastChild;
-
-	newFirst.previousSibling = pre;
-	newLast.nextSibling = nextChild;
-	
-	
-	if(pre){
-		pre.nextSibling = newFirst;
-	}else{
-		parentNode.firstChild = newFirst;
-	}
-	if(nextChild == null){
-		parentNode.lastChild = newLast;
-	}else{
-		nextChild.previousSibling = newLast;
-	}
-	do{
-		newFirst.parentNode = parentNode;
-	}while(newFirst !== newLast && (newFirst= newFirst.nextSibling))
-	_onUpdateChild(parentNode.ownerDocument||parentNode,parentNode);
-	//console.log(parentNode.lastChild.nextSibling == null)
-	if (newChild.nodeType == DOCUMENT_FRAGMENT_NODE) {
-		newChild.firstChild = newChild.lastChild = null;
-	}
-	return newChild;
-}
-function _appendSingleChild(parentNode,newChild){
-	var cp = newChild.parentNode;
-	if(cp){
-		var pre = parentNode.lastChild;
-		cp.removeChild(newChild);//remove and update
-		var pre = parentNode.lastChild;
-	}
-	var pre = parentNode.lastChild;
-	newChild.parentNode = parentNode;
-	newChild.previousSibling = pre;
-	newChild.nextSibling = null;
-	if(pre){
-		pre.nextSibling = newChild;
-	}else{
-		parentNode.firstChild = newChild;
-	}
-	parentNode.lastChild = newChild;
-	_onUpdateChild(parentNode.ownerDocument,parentNode,newChild);
-	return newChild;
-	//console.log("__aa",parentNode.lastChild.nextSibling == null)
-}
-Document.prototype = {
-	//implementation : null,
-	nodeName :  '#document',
-	nodeType :  DOCUMENT_NODE,
-	doctype :  null,
-	documentElement :  null,
-	_inc : 1,
-	
-	insertBefore :  function(newChild, refChild){//raises 
-		if(newChild.nodeType == DOCUMENT_FRAGMENT_NODE){
-			var child = newChild.firstChild;
-			while(child){
-				var next = child.nextSibling;
-				this.insertBefore(child,refChild);
-				child = next;
-			}
-			return newChild;
-		}
-		if(this.documentElement == null && newChild.nodeType == 1){
-			this.documentElement = newChild;
-		}
-		
-		return _insertBefore(this,newChild,refChild),(newChild.ownerDocument = this),newChild;
-	},
-	removeChild :  function(oldChild){
-		if(this.documentElement == oldChild){
-			this.documentElement = null;
-		}
-		return _removeChild(this,oldChild);
-	},
-	// Introduced in DOM Level 2:
-	importNode : function(importedNode,deep){
-		return importNode(this,importedNode,deep);
-	},
-	// Introduced in DOM Level 2:
-	getElementById :	function(id){
-		var rtv = null;
-		_visitNode(this.documentElement,function(node){
-			if(node.nodeType == 1){
-				if(node.getAttribute('id') == id){
-					rtv = node;
-					return true;
-				}
-			}
-		})
-		return rtv;
-	},
-	
-	//document factory method:
-	createElement :	function(tagName){
-		var node = new Element();
-		node.ownerDocument = this;
-		node.nodeName = tagName;
-		node.tagName = tagName;
-		node.childNodes = new NodeList();
-		var attrs	= node.attributes = new NamedNodeMap();
-		attrs._ownerElement = node;
-		return node;
-	},
-	createDocumentFragment :	function(){
-		var node = new DocumentFragment();
-		node.ownerDocument = this;
-		node.childNodes = new NodeList();
-		return node;
-	},
-	createTextNode :	function(data){
-		var node = new Text();
-		node.ownerDocument = this;
-		node.appendData(data)
-		return node;
-	},
-	createComment :	function(data){
-		var node = new Comment();
-		node.ownerDocument = this;
-		node.appendData(data)
-		return node;
-	},
-	createCDATASection :	function(data){
-		var node = new CDATASection();
-		node.ownerDocument = this;
-		node.appendData(data)
-		return node;
-	},
-	createProcessingInstruction :	function(target,data){
-		var node = new ProcessingInstruction();
-		node.ownerDocument = this;
-		node.tagName = node.target = target;
-		node.nodeValue= node.data = data;
-		return node;
-	},
-	createAttribute :	function(name){
-		var node = new Attr();
-		node.ownerDocument	= this;
-		node.name = name;
-		node.nodeName	= name;
-		node.localName = name;
-		node.specified = true;
-		return node;
-	},
-	createEntityReference :	function(name){
-		var node = new EntityReference();
-		node.ownerDocument	= this;
-		node.nodeName	= name;
-		return node;
-	},
-	// Introduced in DOM Level 2:
-	createElementNS :	function(namespaceURI,qualifiedName){
-		var node = new Element();
-		var pl = qualifiedName.split(':');
-		var attrs	= node.attributes = new NamedNodeMap();
-		node.childNodes = new NodeList();
-		node.ownerDocument = this;
-		node.nodeName = qualifiedName;
-		node.tagName = qualifiedName;
-		node.namespaceURI = namespaceURI;
-		if(pl.length == 2){
-			node.prefix = pl[0];
-			node.localName = pl[1];
-		}else{
-			//el.prefix = null;
-			node.localName = qualifiedName;
-		}
-		attrs._ownerElement = node;
-		return node;
-	},
-	// Introduced in DOM Level 2:
-	createAttributeNS :	function(namespaceURI,qualifiedName){
-		var node = new Attr();
-		var pl = qualifiedName.split(':');
-		node.ownerDocument = this;
-		node.nodeName = qualifiedName;
-		node.name = qualifiedName;
-		node.namespaceURI = namespaceURI;
-		node.specified = true;
-		if(pl.length == 2){
-			node.prefix = pl[0];
-			node.localName = pl[1];
-		}else{
-			//el.prefix = null;
-			node.localName = qualifiedName;
-		}
-		return node;
-	}
-};
-_extends(Document,Node);
-
-
-function Element() {
-	this._nsMap = {};
-};
-Element.prototype = {
-	nodeType : ELEMENT_NODE,
-	hasAttribute : function(name){
-		return this.getAttributeNode(name)!=null;
-	},
-	getAttribute : function(name){
-		var attr = this.getAttributeNode(name);
-		return attr && attr.value || '';
-	},
-	getAttributeNode : function(name){
-		return this.attributes.getNamedItem(name);
-	},
-	setAttribute : function(name, value){
-		var attr = this.ownerDocument.createAttribute(name);
-		attr.value = attr.nodeValue = "" + value;
-		this.setAttributeNode(attr)
-	},
-	removeAttribute : function(name){
-		var attr = this.getAttributeNode(name)
-		attr && this.removeAttributeNode(attr);
-	},
-	
-	//four real opeartion method
-	appendChild:function(newChild){
-		if(newChild.nodeType === DOCUMENT_FRAGMENT_NODE){
-			return this.insertBefore(newChild,null);
-		}else{
-			return _appendSingleChild(this,newChild);
-		}
-	},
-	setAttributeNode : function(newAttr){
-		return this.attributes.setNamedItem(newAttr);
-	},
-	setAttributeNodeNS : function(newAttr){
-		return this.attributes.setNamedItemNS(newAttr);
-	},
-	removeAttributeNode : function(oldAttr){
-		return this.attributes.removeNamedItem(oldAttr.nodeName);
-	},
-	//get real attribute name,and remove it by removeAttributeNode
-	removeAttributeNS : function(namespaceURI, localName){
-		var old = this.getAttributeNodeNS(namespaceURI, localName);
-		old && this.removeAttributeNode(old);
-	},
-	
-	hasAttributeNS : function(namespaceURI, localName){
-		return this.getAttributeNodeNS(namespaceURI, localName)!=null;
-	},
-	getAttributeNS : function(namespaceURI, localName){
-		var attr = this.getAttributeNodeNS(namespaceURI, localName);
-		return attr && attr.value || '';
-	},
-	setAttributeNS : function(namespaceURI, qualifiedName, value){
-		var attr = this.ownerDocument.createAttributeNS(namespaceURI, qualifiedName);
-		attr.value = attr.nodeValue = value;
-		this.setAttributeNode(attr)
-	},
-	getAttributeNodeNS : function(namespaceURI, localName){
-		return this.attributes.getNamedItemNS(namespaceURI, localName);
-	},
-	
-	getElementsByTagName : function(tagName){
-		return new LiveNodeList(this,function(base){
-			var ls = [];
-			_visitNode(base,function(node){
-				if(node !== base && node.nodeType == ELEMENT_NODE && (tagName === '*' || node.tagName == tagName)){
-					ls.push(node);
-				}
-			});
-			return ls;
-		});
-	},
-	getElementsByTagNameNS : function(namespaceURI, localName){
-		return new LiveNodeList(this,function(base){
-			var ls = [];
-			_visitNode(base,function(node){
-				if(node !== base && node.nodeType === ELEMENT_NODE && node.namespaceURI === namespaceURI && (localName === '*' || node.localName == localName)){
-					ls.push(node);
-				}
-			});
-			return ls;
-		});
-	}
-};
-Document.prototype.getElementsByTagName = Element.prototype.getElementsByTagName;
-Document.prototype.getElementsByTagNameNS = Element.prototype.getElementsByTagNameNS;
-
-
-_extends(Element,Node);
-function Attr() {
-};
-Attr.prototype.nodeType = ATTRIBUTE_NODE;
-_extends(Attr,Node);
-
-
-function CharacterData() {
-};
-CharacterData.prototype = {
-	data : '',
-	substringData : function(offset, count) {
-		return this.data.substring(offset, offset+count);
-	},
-	appendData: function(text) {
-		text = this.data+text;
-		this.nodeValue = this.data = text;
-		this.length = text.length;
-	},
-	insertData: function(offset,text) {
-		this.replaceData(offset,0,text);
-	
-	},
-	appendChild:function(newChild){
-		//if(!(newChild instanceof CharacterData)){
-			throw new Error(ExceptionMessage[3])
-		//}
-		return Node.prototype.appendChild.apply(this,arguments)
-	},
-	deleteData: function(offset, count) {
-		this.replaceData(offset,count,"");
-	},
-	replaceData: function(offset, count, text) {
-		var start = this.data.substring(0,offset);
-		var end = this.data.substring(offset+count);
-		text = start + text + end;
-		this.nodeValue = this.data = text;
-		this.length = text.length;
-	}
-}
-_extends(CharacterData,Node);
-function Text() {
-};
-Text.prototype = {
-	nodeName : "#text",
-	nodeType : TEXT_NODE,
-	splitText : function(offset) {
-		var text = this.data;
-		var newText = text.substring(offset);
-		text = text.substring(0, offset);
-		this.data = this.nodeValue = text;
-		this.length = text.length;
-		var newNode = this.ownerDocument.createTextNode(newText);
-		if(this.parentNode){
-			this.parentNode.insertBefore(newNode, this.nextSibling);
-		}
-		return newNode;
-	}
-}
-_extends(Text,CharacterData);
-function Comment() {
-};
-Comment.prototype = {
-	nodeName : "#comment",
-	nodeType : COMMENT_NODE
-}
-_extends(Comment,CharacterData);
-
-function CDATASection() {
-};
-CDATASection.prototype = {
-	nodeName : "#cdata-section",
-	nodeType : CDATA_SECTION_NODE
-}
-_extends(CDATASection,CharacterData);
-
-
-function DocumentType() {
-};
-DocumentType.prototype.nodeType = DOCUMENT_TYPE_NODE;
-_extends(DocumentType,Node);
-
-function Notation() {
-};
-Notation.prototype.nodeType = NOTATION_NODE;
-_extends(Notation,Node);
-
-function Entity() {
-};
-Entity.prototype.nodeType = ENTITY_NODE;
-_extends(Entity,Node);
-
-function EntityReference() {
-};
-EntityReference.prototype.nodeType = ENTITY_REFERENCE_NODE;
-_extends(EntityReference,Node);
-
-function DocumentFragment() {
-};
-DocumentFragment.prototype.nodeName =	"#document-fragment";
-DocumentFragment.prototype.nodeType =	DOCUMENT_FRAGMENT_NODE;
-_extends(DocumentFragment,Node);
-
-
-function ProcessingInstruction() {
-}
-ProcessingInstruction.prototype.nodeType = PROCESSING_INSTRUCTION_NODE;
-_extends(ProcessingInstruction,Node);
-function XMLSerializer(){}
-XMLSerializer.prototype.serializeToString = function(node){
-	var buf = [];
-	serializeToString(node,buf);
-	return buf.join('');
-}
-Node.prototype.toString =function(){
-	return XMLSerializer.prototype.serializeToString(this);
-}
-function serializeToString(node,buf){
-	switch(node.nodeType){
-	case ELEMENT_NODE:
-		var attrs = node.attributes;
-		var len = attrs.length;
-		var child = node.firstChild;
-		var nodeName = node.tagName;
-		var isHTML = htmlns === node.namespaceURI
-		buf.push('<',nodeName);
-		for(var i=0;i<len;i++){
-			serializeToString(attrs.item(i),buf,isHTML);
-		}
-		if(child || isHTML && !/^(?:meta|link|img|br|hr|input)$/i.test(nodeName)){
-			buf.push('>');
-			//if is cdata child node
-			if(isHTML && /^script$/i.test(nodeName)){
-				if(child){
-					buf.push(child.data);
-				}
-			}else{
-				while(child){
-					serializeToString(child,buf);
-					child = child.nextSibling;
-				}
-			}
-			buf.push('</',nodeName,'>');
-		}else{
-			buf.push('/>');
-		}
-		return;
-	case DOCUMENT_NODE:
-	case DOCUMENT_FRAGMENT_NODE:
-		var child = node.firstChild;
-		while(child){
-			serializeToString(child,buf);
-			child = child.nextSibling;
-		}
-		return;
-	case ATTRIBUTE_NODE:
-		return buf.push(' ',node.name,'="',node.value.replace(/[<&"]/g,_xmlEncoder),'"');
-	case TEXT_NODE:
-		return buf.push(node.data.replace(/[<&]/g,_xmlEncoder));
-	case CDATA_SECTION_NODE:
-		return buf.push( '<![CDATA[',node.data,']]>');
-	case COMMENT_NODE:
-		return buf.push( "<!--",node.data,"-->");
-	case DOCUMENT_TYPE_NODE:
-		var pubid = node.publicId;
-		var sysid = node.systemId;
-		buf.push('<!DOCTYPE ',node.name);
-		if(pubid){
-			buf.push(' PUBLIC "',pubid);
-			if (sysid && sysid!='.') {
-				buf.push( '" "',sysid);
-			}
-			buf.push('">');
-		}else if(sysid && sysid!='.'){
-			buf.push(' SYSTEM "',sysid,'">');
-		}else{
-			var sub = node.internalSubset;
-			if(sub){
-				buf.push(" [",sub,"]");
-			}
-			buf.push(">");
-		}
-		return;
-	case PROCESSING_INSTRUCTION_NODE:
-		return buf.push( "<?",node.target," ",node.data,"?>");
-	case ENTITY_REFERENCE_NODE:
-		return buf.push( '&',node.nodeName,';');
-	//case ENTITY_NODE:
-	//case NOTATION_NODE:
-	default:
-		buf.push('??',node.nodeName);
-	}
-}
-function importNode(doc,node,deep){
-	var node2;
-	switch (node.nodeType) {
-	case ELEMENT_NODE:
-		node2 = node.cloneNode(false);
-		node2.ownerDocument = doc;
-		//var attrs = node2.attributes;
-		//var len = attrs.length;
-		//for(var i=0;i<len;i++){
-			//node2.setAttributeNodeNS(importNode(doc,attrs.item(i),deep));
-		//}
-	case DOCUMENT_FRAGMENT_NODE:
-		break;
-	case ATTRIBUTE_NODE:
-		deep = true;
-		break;
-	//case ENTITY_REFERENCE_NODE:
-	//case PROCESSING_INSTRUCTION_NODE:
-	////case TEXT_NODE:
-	//case CDATA_SECTION_NODE:
-	//case COMMENT_NODE:
-	//	deep = false;
-	//	break;
-	//case DOCUMENT_NODE:
-	//case DOCUMENT_TYPE_NODE:
-	//cannot be imported.
-	//case ENTITY_NODE:
-	//case NOTATION_NODE:
-	//can not hit in level3
-	//default:throw e;
-	}
-	if(!node2){
-		node2 = node.cloneNode(false);//false
-	}
-	node2.ownerDocument = doc;
-	node2.parentNode = null;
-	if(deep){
-		var child = node.firstChild;
-		while(child){
-			node2.appendChild(importNode(doc,child,deep));
-			child = child.nextSibling;
-		}
-	}
-	return node2;
-}
-//
-//var _relationMap = {firstChild:1,lastChild:1,previousSibling:1,nextSibling:1,
-//					attributes:1,childNodes:1,parentNode:1,documentElement:1,doctype,};
-function cloneNode(doc,node,deep){
-	var node2 = new node.constructor();
-	for(var n in node){
-		var v = node[n];
-		if(typeof v != 'object' ){
-			if(v != node2[n]){
-				node2[n] = v;
-			}
-		}
-	}
-	if(node.childNodes){
-		node2.childNodes = new NodeList();
-	}
-	node2.ownerDocument = doc;
-	switch (node2.nodeType) {
-	case ELEMENT_NODE:
-		var attrs	= node.attributes;
-		var attrs2	= node2.attributes = new NamedNodeMap();
-		var len = attrs.length
-		attrs2._ownerElement = node2;
-		for(var i=0;i<len;i++){
-			node2.setAttributeNode(cloneNode(doc,attrs.item(i),true));
-		}
-		break;;
-	case ATTRIBUTE_NODE:
-		deep = true;
-	}
-	if(deep){
-		var child = node.firstChild;
-		while(child){
-			node2.appendChild(cloneNode(doc,child,deep));
-			child = child.nextSibling;
-		}
-	}
-	return node2;
-}
-
-function __set__(object,key,value){
-	object[key] = value
-}
-//do dynamic
-try{
-	if(Object.defineProperty){
-		Object.defineProperty(LiveNodeList.prototype,'length',{
-			get:function(){
-				_updateLiveList(this);
-				return this.$$length;
-			}
-		});
-		Object.defineProperty(Node.prototype,'textContent',{
-			get:function(){
-				return getTextContent(this);
-			},
-			set:function(data){
-				switch(this.nodeType){
-				case 1:
-				case 11:
-					while(this.firstChild){
-						this.removeChild(this.firstChild);
-					}
-					if(data || String(data)){
-						this.appendChild(this.ownerDocument.createTextNode(data));
-					}
-					break;
-				default:
-					//TODO:
-					this.data = data;
-					this.value = value;
-					this.nodeValue = data;
-				}
-			}
-		})
-		
-		function getTextContent(node){
-			switch(node.nodeType){
-			case 1:
-			case 11:
-				var buf = [];
-				node = node.firstChild;
-				while(node){
-					if(node.nodeType!==7 && node.nodeType !==8){
-						buf.push(getTextContent(node));
-					}
-					node = node.nextSibling;
-				}
-				return buf.join('');
-			default:
-				return node.nodeValue;
-			}
-		}
-		__set__ = function(object,key,value){
-			//console.log(value)
-			object['$$'+key] = value
-		}
-	}
-}catch(e){//ie8
-}
-
-if(typeof require == 'function'){
-	exports.DOMImplementation = DOMImplementation;
-	exports.XMLSerializer = XMLSerializer;
-}
-
-},{}],8:[function(require,module,exports){
-//[4]   	NameStartChar	   ::=   	":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]
-//[4a]   	NameChar	   ::=   	NameStartChar | "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]
-//[5]   	Name	   ::=   	NameStartChar (NameChar)*
-var nameStartChar = /[A-Z_a-z\xC0-\xD6\xD8-\xF6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]///\u10000-\uEFFFF
-var nameChar = new RegExp("[\\-\\.0-9"+nameStartChar.source.slice(1,-1)+"\u00B7\u0300-\u036F\\ux203F-\u2040]");
-var tagNamePattern = new RegExp('^'+nameStartChar.source+nameChar.source+'*(?:\:'+nameStartChar.source+nameChar.source+'*)?$');
-//var tagNamePattern = /^[a-zA-Z_][\w\-\.]*(?:\:[a-zA-Z_][\w\-\.]*)?$/
-//var handlers = 'resolveEntity,getExternalSubset,characters,endDocument,endElement,endPrefixMapping,ignorableWhitespace,processingInstruction,setDocumentLocator,skippedEntity,startDocument,startElement,startPrefixMapping,notationDecl,unparsedEntityDecl,error,fatalError,warning,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,comment,endCDATA,endDTD,endEntity,startCDATA,startDTD,startEntity'.split(',')
-
-//S_TAG,	S_ATTR,	S_EQ,	S_V
-//S_ATTR_S,	S_E,	S_S,	S_C
-var S_TAG = 0;//tag name offerring
-var S_ATTR = 1;//attr name offerring 
-var S_ATTR_S=2;//attr name end and space offer
-var S_EQ = 3;//=space?
-var S_V = 4;//attr value(no quot value only)
-var S_E = 5;//attr value end and no space(quot end)
-var S_S = 6;//(attr value end || tag end ) && (space offer)
-var S_C = 7;//closed el<el />
-
-function XMLReader(){
-	
-}
-
-XMLReader.prototype = {
-	parse:function(source,defaultNSMap,entityMap){
-		var domBuilder = this.domBuilder;
-		domBuilder.startDocument();
-		_copy(defaultNSMap ,defaultNSMap = {})
-		parse(source,defaultNSMap,entityMap,
-				domBuilder,this.errorHandler);
-		domBuilder.endDocument();
-	}
-}
-function parse(source,defaultNSMapCopy,entityMap,domBuilder,errorHandler){
-  function fixedFromCharCode(code) {
-		// String.prototype.fromCharCode does not supports
-		// > 2 bytes unicode chars directly
-		if (code > 0xffff) {
-			code -= 0x10000;
-			var surrogate1 = 0xd800 + (code >> 10)
-				, surrogate2 = 0xdc00 + (code & 0x3ff);
-
-			return String.fromCharCode(surrogate1, surrogate2);
-		} else {
-			return String.fromCharCode(code);
-		}
-	}
-	function entityReplacer(a){
-		var k = a.slice(1,-1);
-		if(k in entityMap){
-			return entityMap[k]; 
-		}else if(k.charAt(0) === '#'){
-			return fixedFromCharCode(parseInt(k.substr(1).replace('x','0x')))
-		}else{
-			errorHandler.error('entity not found:'+a);
-			return a;
-		}
-	}
-	function appendText(end){//has some bugs
-		var xt = source.substring(start,end).replace(/&#?\w+;/g,entityReplacer);
-		locator&&position(start);
-		domBuilder.characters(xt,0,end-start);
-		start = end
-	}
-	function position(start,m){
-		while(start>=endPos && (m = linePattern.exec(source))){
-			startPos = m.index;
-			endPos = startPos + m[0].length;
-			locator.lineNumber++;
-			//console.log('line++:',locator,startPos,endPos)
-		}
-		locator.columnNumber = start-startPos+1;
-	}
-	var startPos = 0;
-	var endPos = 0;
-	var linePattern = /.+(?:\r\n?|\n)|.*$/g
-	var locator = domBuilder.locator;
-	
-	var parseStack = [{currentNSMap:defaultNSMapCopy}]
-	var closeMap = {};
-	var start = 0;
-	while(true){
-		var i = source.indexOf('<',start);
-		if(i<0){
-			if(!source.substr(start).match(/^\s*$/)){
-				var doc = domBuilder.document;
-    			var text = doc.createTextNode(source.substr(start));
-    			doc.appendChild(text);
-    			domBuilder.currentElement = text;
-			}
-			return;
-		}
-		if(i>start){
-			appendText(i);
-		}
-		switch(source.charAt(i+1)){
-		case '/':
-			var end = source.indexOf('>',i+3);
-			var tagName = source.substring(i+2,end);
-			var config = parseStack.pop();
-			var localNSMap = config.localNSMap;
-			
-	        if(config.tagName != tagName){
-	            errorHandler.fatalError("end tag name: "+tagName+' is not match the current start tagName:'+config.tagName );
-	        }
-			domBuilder.endElement(config.uri,config.localName,tagName);
-			if(localNSMap){
-				for(var prefix in localNSMap){
-					domBuilder.endPrefixMapping(prefix) ;
-				}
-			}
-			end++;
-			break;
-			// end elment
-		case '?':// <?...?>
-			locator&&position(i);
-			end = parseInstruction(source,i,domBuilder);
-			break;
-		case '!':// <!doctype,<![CDATA,<!--
-			locator&&position(i);
-			end = parseDCC(source,i,domBuilder,errorHandler);
-			break;
-		default:
-			try{
-				locator&&position(i);
-				
-				var el = new ElementAttributes();
-				
-				//elStartEnd
-				var end = parseElementStartPart(source,i,el,entityReplacer,errorHandler);
-				var len = el.length;
-				//position fixed
-				if(len && locator){
-					var backup = copyLocator(locator,{});
-					for(var i = 0;i<len;i++){
-						var a = el[i];
-						position(a.offset);
-						a.offset = copyLocator(locator,{});
-					}
-					copyLocator(backup,locator);
-				}
-				if(!el.closed && fixSelfClosed(source,end,el.tagName,closeMap)){
-					el.closed = true;
-					if(!entityMap.nbsp){
-						errorHandler.warning('unclosed xml attribute');
-					}
-				}
-				appendElement(el,domBuilder,parseStack);
-				
-				
-				if(el.uri === 'http://www.w3.org/1999/xhtml' && !el.closed){
-					end = parseHtmlSpecialContent(source,end,el.tagName,entityReplacer,domBuilder)
-				}else{
-					end++;
-				}
-			}catch(e){
-				errorHandler.error('element parse error: '+e);
-				end = -1;
-			}
-
-		}
-		if(end<0){
-			//TODO: 这里有可能sax回退,有位置错误风险
-			appendText(i+1);
-		}else{
-			start = end;
-		}
-	}
-}
-function copyLocator(f,t){
-	t.lineNumber = f.lineNumber;
-	t.columnNumber = f.columnNumber;
-	return t;
-	
-}
-
-/**
- * @see #appendElement(source,elStartEnd,el,selfClosed,entityReplacer,domBuilder,parseStack);
- * @return end of the elementStartPart(end of elementEndPart for selfClosed el)
- */
-function parseElementStartPart(source,start,el,entityReplacer,errorHandler){
-	var attrName;
-	var value;
-	var p = ++start;
-	var s = S_TAG;//status
-	while(true){
-		var c = source.charAt(p);
-		switch(c){
-		case '=':
-			if(s === S_ATTR){//attrName
-				attrName = source.slice(start,p);
-				s = S_EQ;
-			}else if(s === S_ATTR_S){
-				s = S_EQ;
-			}else{
-				//fatalError: equal must after attrName or space after attrName
-				throw new Error('attribute equal must after attrName');
-			}
-			break;
-		case '\'':
-		case '"':
-			if(s === S_EQ){//equal
-				start = p+1;
-				p = source.indexOf(c,start)
-				if(p>0){
-					value = source.slice(start,p).replace(/&#?\w+;/g,entityReplacer);
-					el.add(attrName,value,start-1);
-					s = S_E;
-				}else{
-					//fatalError: no end quot match
-					throw new Error('attribute value no end \''+c+'\' match');
-				}
-			}else if(s == S_V){
-				value = source.slice(start,p).replace(/&#?\w+;/g,entityReplacer);
-				//console.log(attrName,value,start,p)
-				el.add(attrName,value,start);
-				//console.dir(el)
-				errorHandler.warning('attribute "'+attrName+'" missed start quot('+c+')!!');
-				start = p+1;
-				s = S_E
-			}else{
-				//fatalError: no equal before
-				throw new Error('attribute value must after "="');
-			}
-			break;
-		case '/':
-			switch(s){
-			case S_TAG:
-				el.setTagName(source.slice(start,p));
-			case S_E:
-			case S_S:
-			case S_C:
-				s = S_C;
-				el.closed = true;
-			case S_V:
-			case S_ATTR:
-			case S_ATTR_S:
-				break;
-			//case S_EQ:
-			default:
-				throw new Error("attribute invalid close char('/')")
-			}
-			break;
-		case ''://end document
-			//throw new Error('unexpected end of input')
-			errorHandler.error('unexpected end of input');
-		case '>':
-			switch(s){
-			case S_TAG:
-				el.setTagName(source.slice(start,p));
-			case S_E:
-			case S_S:
-			case S_C:
-				break;//normal
-			case S_V://Compatible state
-			case S_ATTR:
-				value = source.slice(start,p);
-				if(value.slice(-1) === '/'){
-					el.closed  = true;
-					value = value.slice(0,-1)
-				}
-			case S_ATTR_S:
-				if(s === S_ATTR_S){
-					value = attrName;
-				}
-				if(s == S_V){
-					errorHandler.warning('attribute "'+value+'" missed quot(")!!');
-					el.add(attrName,value.replace(/&#?\w+;/g,entityReplacer),start)
-				}else{
-					errorHandler.warning('attribute "'+value+'" missed value!! "'+value+'" instead!!')
-					el.add(value,value,start)
-				}
-				break;
-			case S_EQ:
-				throw new Error('attribute value missed!!');
-			}
-//			console.log(tagName,tagNamePattern,tagNamePattern.test(tagName))
-			return p;
-		/*xml space '\x20' | #x9 | #xD | #xA; */
-		case '\u0080':
-			c = ' ';
-		default:
-			if(c<= ' '){//space
-				switch(s){
-				case S_TAG:
-					el.setTagName(source.slice(start,p));//tagName
-					s = S_S;
-					break;
-				case S_ATTR:
-					attrName = source.slice(start,p)
-					s = S_ATTR_S;
-					break;
-				case S_V:
-					var value = source.slice(start,p).replace(/&#?\w+;/g,entityReplacer);
-					errorHandler.warning('attribute "'+value+'" missed quot(")!!');
-					el.add(attrName,value,start)
-				case S_E:
-					s = S_S;
-					break;
-				//case S_S:
-				//case S_EQ:
-				//case S_ATTR_S:
-				//	void();break;
-				//case S_C:
-					//ignore warning
-				}
-			}else{//not space
-//S_TAG,	S_ATTR,	S_EQ,	S_V
-//S_ATTR_S,	S_E,	S_S,	S_C
-				switch(s){
-				//case S_TAG:void();break;
-				//case S_ATTR:void();break;
-				//case S_V:void();break;
-				case S_ATTR_S:
-					errorHandler.warning('attribute "'+attrName+'" missed value!! "'+attrName+'" instead!!')
-					el.add(attrName,attrName,start);
-					start = p;
-					s = S_ATTR;
-					break;
-				case S_E:
-					errorHandler.warning('attribute space is required"'+attrName+'"!!')
-				case S_S:
-					s = S_ATTR;
-					start = p;
-					break;
-				case S_EQ:
-					s = S_V;
-					start = p;
-					break;
-				case S_C:
-					throw new Error("elements closed character '/' and '>' must be connected to");
-				}
-			}
-		}
-		p++;
-	}
-}
-/**
- * @return end of the elementStartPart(end of elementEndPart for selfClosed el)
- */
-function appendElement(el,domBuilder,parseStack){
-	var tagName = el.tagName;
-	var localNSMap = null;
-	var currentNSMap = parseStack[parseStack.length-1].currentNSMap;
-	var i = el.length;
-	while(i--){
-		var a = el[i];
-		var qName = a.qName;
-		var value = a.value;
-		var nsp = qName.indexOf(':');
-		if(nsp>0){
-			var prefix = a.prefix = qName.slice(0,nsp);
-			var localName = qName.slice(nsp+1);
-			var nsPrefix = prefix === 'xmlns' && localName
-		}else{
-			localName = qName;
-			prefix = null
-			nsPrefix = qName === 'xmlns' && ''
-		}
-		//can not set prefix,because prefix !== ''
-		a.localName = localName ;
-		//prefix == null for no ns prefix attribute 
-		if(nsPrefix !== false){//hack!!
-			if(localNSMap == null){
-				localNSMap = {}
-				//console.log(currentNSMap,0)
-				_copy(currentNSMap,currentNSMap={})
-				//console.log(currentNSMap,1)
-			}
-			currentNSMap[nsPrefix] = localNSMap[nsPrefix] = value;
-			a.uri = 'http://www.w3.org/2000/xmlns/'
-			domBuilder.startPrefixMapping(nsPrefix, value) 
-		}
-	}
-	var i = el.length;
-	while(i--){
-		a = el[i];
-		var prefix = a.prefix;
-		if(prefix){//no prefix attribute has no namespace
-			if(prefix === 'xml'){
-				a.uri = 'http://www.w3.org/XML/1998/namespace';
-			}if(prefix !== 'xmlns'){
-				a.uri = currentNSMap[prefix]
-				
-				//{console.log('###'+a.qName,domBuilder.locator.systemId+'',currentNSMap,a.uri)}
-			}
-		}
-	}
-	var nsp = tagName.indexOf(':');
-	if(nsp>0){
-		prefix = el.prefix = tagName.slice(0,nsp);
-		localName = el.localName = tagName.slice(nsp+1);
-	}else{
-		prefix = null;//important!!
-		localName = el.localName = tagName;
-	}
-	//no prefix element has default namespace
-	var ns = el.uri = currentNSMap[prefix || ''];
-	domBuilder.startElement(ns,localName,tagName,el);
-	//endPrefixMapping and startPrefixMapping have not any help for dom builder
-	//localNSMap = null
-	if(el.closed){
-		domBuilder.endElement(ns,localName,tagName);
-		if(localNSMap){
-			for(prefix in localNSMap){
-				domBuilder.endPrefixMapping(prefix) 
-			}
-		}
-	}else{
-		el.currentNSMap = currentNSMap;
-		el.localNSMap = localNSMap;
-		parseStack.push(el);
-	}
-}
-function parseHtmlSpecialContent(source,elStartEnd,tagName,entityReplacer,domBuilder){
-	if(/^(?:script|textarea)$/i.test(tagName)){
-		var elEndStart =  source.indexOf('</'+tagName+'>',elStartEnd);
-		var text = source.substring(elStartEnd+1,elEndStart);
-		if(/[&<]/.test(text)){
-			if(/^script$/i.test(tagName)){
-				//if(!/\]\]>/.test(text)){
-					//lexHandler.startCDATA();
-					domBuilder.characters(text,0,text.length);
-					//lexHandler.endCDATA();
-					return elEndStart;
-				//}
-			}//}else{//text area
-				text = text.replace(/&#?\w+;/g,entityReplacer);
-				domBuilder.characters(text,0,text.length);
-				return elEndStart;
-			//}
-			
-		}
-	}
-	return elStartEnd+1;
-}
-function fixSelfClosed(source,elStartEnd,tagName,closeMap){
-	//if(tagName in closeMap){
-	var pos = closeMap[tagName];
-	if(pos == null){
-		//console.log(tagName)
-		pos = closeMap[tagName] = source.lastIndexOf('</'+tagName+'>')
-	}
-	return pos<elStartEnd;
-	//} 
-}
-function _copy(source,target){
-	for(var n in source){target[n] = source[n]}
-}
-function parseDCC(source,start,domBuilder,errorHandler){//sure start with '<!'
-	var next= source.charAt(start+2)
-	switch(next){
-	case '-':
-		if(source.charAt(start + 3) === '-'){
-			var end = source.indexOf('-->',start+4);
-			//append comment source.substring(4,end)//<!--
-			if(end>start){
-				domBuilder.comment(source,start+4,end-start-4);
-				return end+3;
-			}else{
-				errorHandler.error("Unclosed comment");
-				return -1;
-			}
-		}else{
-			//error
-			return -1;
-		}
-	default:
-		if(source.substr(start+3,6) == 'CDATA['){
-			var end = source.indexOf(']]>',start+9);
-			domBuilder.startCDATA();
-			domBuilder.characters(source,start+9,end-start-9);
-			domBuilder.endCDATA() 
-			return end+3;
-		}
-		//<!DOCTYPE
-		//startDTD(java.lang.String name, java.lang.String publicId, java.lang.String systemId) 
-		var matchs = split(source,start);
-		var len = matchs.length;
-		if(len>1 && /!doctype/i.test(matchs[0][0])){
-			var name = matchs[1][0];
-			var pubid = len>3 && /^public$/i.test(matchs[2][0]) && matchs[3][0]
-			var sysid = len>4 && matchs[4][0];
-			var lastMatch = matchs[len-1]
-			domBuilder.startDTD(name,pubid && pubid.replace(/^(['"])(.*?)\1$/,'$2'),
-					sysid && sysid.replace(/^(['"])(.*?)\1$/,'$2'));
-			domBuilder.endDTD();
-			
-			return lastMatch.index+lastMatch[0].length
-		}
-	}
-	return -1;
-}
-
-
-
-function parseInstruction(source,start,domBuilder){
-	var end = source.indexOf('?>',start);
-	if(end){
-		var match = source.substring(start,end).match(/^<\?(\S*)\s*([\s\S]*?)\s*$/);
-		if(match){
-			var len = match[0].length;
-			domBuilder.processingInstruction(match[1], match[2]) ;
-			return end+2;
-		}else{//error
-			return -1;
-		}
-	}
-	return -1;
-}
-
-/**
- * @param source
- */
-function ElementAttributes(source){
-	
-}
-ElementAttributes.prototype = {
-	setTagName:function(tagName){
-		if(!tagNamePattern.test(tagName)){
-			throw new Error('invalid tagName:'+tagName)
-		}
-		this.tagName = tagName
-	},
-	add:function(qName,value,offset){
-		if(!tagNamePattern.test(qName)){
-			throw new Error('invalid attribute:'+qName)
-		}
-		this[this.length++] = {qName:qName,value:value,offset:offset}
-	},
-	length:0,
-	getLocalName:function(i){return this[i].localName},
-	getOffset:function(i){return this[i].offset},
-	getQName:function(i){return this[i].qName},
-	getURI:function(i){return this[i].uri},
-	getValue:function(i){return this[i].value}
-//	,getIndex:function(uri, localName)){
-//		if(localName){
-//			
-//		}else{
-//			var qName = uri
-//		}
-//	},
-//	getValue:function(){return this.getValue(this.getIndex.apply(this,arguments))},
-//	getType:function(uri,localName){}
-//	getType:function(i){},
-}
-
-
-
-
-function _set_proto_(thiz,parent){
-	thiz.__proto__ = parent;
-	return thiz;
-}
-if(!(_set_proto_({},_set_proto_.prototype) instanceof _set_proto_)){
-	_set_proto_ = function(thiz,parent){
-		function p(){};
-		p.prototype = parent;
-		p = new p();
-		for(parent in thiz){
-			p[parent] = thiz[parent];
-		}
-		return p;
-	}
-}
-
-function split(source,start){
-	var match;
-	var buf = [];
-	var reg = /'[^']+'|"[^"]+"|[^\s<>\/=]+=?|(\/?\s*>|<)/g;
-	reg.lastIndex = start;
-	reg.exec(source);//skip <
-	while(match = reg.exec(source)){
-		buf.push(match);
-		if(match[1])return buf;
-	}
-}
-
-if(typeof require == 'function'){
-	exports.XMLReader = XMLReader;
-}
-
-
-},{}]},{},[1])(1)
-});
\ No newline at end of file
diff --git a/bin/node_modules/plist/dist/plist.js b/bin/node_modules/plist/dist/plist.js
deleted file mode 100644
index aa862c2..0000000
--- a/bin/node_modules/plist/dist/plist.js
+++ /dev/null
@@ -1,14920 +0,0 @@
-!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.plist=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
-(function (Buffer){
-
-/**
- * Module dependencies.
- */
-
-var base64 = require('base64-js');
-var xmlbuilder = require('xmlbuilder');
-
-/**
- * Module exports.
- */
-
-exports.build = build;
-
-/**
- * Accepts a `Date` instance and returns an ISO date string.
- *
- * @param {Date} d - Date instance to serialize
- * @returns {String} ISO date string representation of `d`
- * @api private
- */
-
-function ISODateString(d){
-  function pad(n){
-    return n < 10 ? '0' + n : n;
-  }
-  return d.getUTCFullYear()+'-'
-    + pad(d.getUTCMonth()+1)+'-'
-    + pad(d.getUTCDate())+'T'
-    + pad(d.getUTCHours())+':'
-    + pad(d.getUTCMinutes())+':'
-    + pad(d.getUTCSeconds())+'Z';
-}
-
-/**
- * Returns the internal "type" of `obj` via the
- * `Object.prototype.toString()` trick.
- *
- * @param {Mixed} obj - any value
- * @returns {String} the internal "type" name
- * @api private
- */
-
-var toString = Object.prototype.toString;
-function type (obj) {
-  var m = toString.call(obj).match(/\[object (.*)\]/);
-  return m ? m[1] : m;
-}
-
-/**
- * Generate an XML plist string from the input object `obj`.
- *
- * @param {Object} obj - the object to convert
- * @param {Object} [opts] - optional options object
- * @returns {String} converted plist XML string
- * @api public
- */
-
-function build (obj, opts) {
-  var XMLHDR = {
-    version: '1.0',
-    encoding: 'UTF-8'
-  };
-
-  var XMLDTD = {
-    pubid: '-//Apple//DTD PLIST 1.0//EN',
-    sysid: 'http://www.apple.com/DTDs/PropertyList-1.0.dtd'
-  };
-
-  var doc = xmlbuilder.create('plist');
-
-  doc.dec(XMLHDR.version, XMLHDR.encoding, XMLHDR.standalone);
-  doc.dtd(XMLDTD.pubid, XMLDTD.sysid);
-  doc.att('version', '1.0');
-
-  walk_obj(obj, doc);
-
-  if (!opts) opts = {};
-  // default `pretty` to `true`
-  opts.pretty = opts.pretty !== false;
-  return doc.end(opts);
-}
-
-/**
- * depth first, recursive traversal of a javascript object. when complete,
- * next_child contains a reference to the build XML object.
- *
- * @api private
- */
-
-function walk_obj(next, next_child) {
-  var tag_type, i, prop;
-  var name = type(next);
-
-  if (Array.isArray(next)) {
-    next_child = next_child.ele('array');
-    for (i = 0; i < next.length; i++) {
-      walk_obj(next[i], next_child);
-    }
-
-  } else if (Buffer.isBuffer(next)) {
-    next_child.ele('data').raw(next.toString('base64'));
-
-  } else if ('Object' == name) {
-    next_child = next_child.ele('dict');
-    for (prop in next) {
-      if (next.hasOwnProperty(prop)) {
-        next_child.ele('key').txt(prop);
-        walk_obj(next[prop], next_child);
-      }
-    }
-
-  } else if ('Number' == name) {
-    // detect if this is an integer or real
-    // TODO: add an ability to force one way or another via a "cast"
-    tag_type = (next % 1 === 0) ? 'integer' : 'real';
-    next_child.ele(tag_type).txt(next.toString());
-
-  } else if ('Date' == name) {
-    next_child.ele('date').txt(ISODateString(new Date(next)));
-
-  } else if ('Boolean' == name) {
-    next_child.ele(next ? 'true' : 'false');
-
-  } else if ('String' == name) {
-    next_child.ele('string').txt(next);
-
-  } else if ('ArrayBuffer' == name) {
-    next_child.ele('data').raw(base64.fromByteArray(next));
-
-  } else if (next.buffer && 'ArrayBuffer' == type(next.buffer)) {
-    // a typed array
-    next_child.ele('data').raw(base64.fromByteArray(new Uint8Array(next.buffer), next_child));
-
-  }
-}
-
-}).call(this,require("buffer").Buffer)
-},{"base64-js":5,"buffer":7,"xmlbuilder":26}],2:[function(require,module,exports){
-/**
- * Module dependencies.
- */
-
-var fs = require('fs');
-var parse = require('./parse');
-var deprecate = require('util-deprecate');
-
-/**
- * Module exports.
- */
-
-exports.parseFile = deprecate(parseFile, '`parseFile()` is deprecated. ' +
-  'Use `parseString()` instead.');
-exports.parseFileSync = deprecate(parseFileSync, '`parseFileSync()` is deprecated. ' +
-  'Use `parseStringSync()` instead.');
-
-/**
- * Parses file `filename` as a .plist file.
- * Invokes `fn` callback function when done.
- *
- * @param {String} filename - name of the file to read
- * @param {Function} fn - callback function
- * @api public
- * @deprecated use parseString() instead
- */
-
-function parseFile (filename, fn) {
-  fs.readFile(filename, { encoding: 'utf8' }, onread);
-  function onread (err, inxml) {
-    if (err) return fn(err);
-    parse.parseString(inxml, fn);
-  }
-}
-
-/**
- * Parses file `filename` as a .plist file.
- * Returns a  when done.
- *
- * @param {String} filename - name of the file to read
- * @param {Function} fn - callback function
- * @api public
- * @deprecated use parseStringSync() instead
- */
-
-function parseFileSync (filename) {
-  var inxml = fs.readFileSync(filename, 'utf8');
-  return parse.parseStringSync(inxml);
-}
-
-},{"./parse":3,"fs":6,"util-deprecate":9}],3:[function(require,module,exports){
-(function (Buffer){
-
-/**
- * Module dependencies.
- */
-
-var deprecate = require('util-deprecate');
-var DOMParser = require('xmldom').DOMParser;
-
-/**
- * Module exports.
- */
-
-exports.parse = parse;
-exports.parseString = deprecate(parseString, '`parseString()` is deprecated. ' +
-  'It\'s not actually async. Use `parse()` instead.');
-exports.parseStringSync = deprecate(parseStringSync, '`parseStringSync()` is ' +
-  'deprecated. Use `parse()` instead.');
-
-/**
- * We ignore raw text (usually whitespace), <!-- xml comments -->,
- * and raw CDATA nodes.
- *
- * @param {Element} node
- * @returns {Boolean}
- * @api private
- */
-
-function shouldIgnoreNode (node) {
-  return node.nodeType === 3 // text
-    || node.nodeType === 8   // comment
-    || node.nodeType === 4;  // cdata
-}
-
-
-/**
- * Parses a Plist XML string. Returns an Object.
- *
- * @param {String} xml - the XML String to decode
- * @returns {Mixed} the decoded value from the Plist XML
- * @api public
- */
-
-function parse (xml) {
-  var doc = new DOMParser().parseFromString(xml);
-  if (doc.documentElement.nodeName !== 'plist') {
-    throw new Error('malformed document. First element should be <plist>');
-  }
-  var plist = parsePlistXML(doc.documentElement);
-
-  // the root <plist> node gets interpreted as an Array,
-  // so pull out the inner data first
-  if (plist.length == 1) plist = plist[0];
-
-  return plist;
-}
-
-/**
- * Parses a Plist XML string. Returns an Object. Takes a `callback` function.
- *
- * @param {String} xml - the XML String to decode
- * @param {Function} callback - callback function
- * @returns {Mixed} the decoded value from the Plist XML
- * @api public
- * @deprecated not actually async. use parse() instead
- */
-
-function parseString (xml, callback) {
-  var doc, error, plist;
-  try {
-    doc = new DOMParser().parseFromString(xml);
-    plist = parsePlistXML(doc.documentElement);
-  } catch(e) {
-    error = e;
-  }
-  callback(error, plist);
-}
-
-/**
- * Parses a Plist XML string. Returns an Object.
- *
- * @param {String} xml - the XML String to decode
- * @param {Function} callback - callback function
- * @returns {Mixed} the decoded value from the Plist XML
- * @api public
- * @deprecated use parse() instead
- */
-
-function parseStringSync (xml) {
-  var doc = new DOMParser().parseFromString(xml);
-  var plist;
-  if (doc.documentElement.nodeName !== 'plist') {
-    throw new Error('malformed document. First element should be <plist>');
-  }
-  plist = parsePlistXML(doc.documentElement);
-
-  // if the plist is an array with 1 element, pull it out of the array
-  if (plist.length == 1) {
-    plist = plist[0];
-  }
-  return plist;
-}
-
-/**
- * Convert an XML based plist document into a JSON representation.
- *
- * @param {Object} xml_node - current XML node in the plist
- * @returns {Mixed} built up JSON object
- * @api private
- */
-
-function parsePlistXML (node) {
-  var i, new_obj, key, val, new_arr, res, d;
-
-  if (!node)
-    return null;
-
-  if (node.nodeName === 'plist') {
-    new_arr = [];
-    for (i=0; i < node.childNodes.length; i++) {
-      // ignore comment nodes (text)
-      if (!shouldIgnoreNode(node.childNodes[i])) {
-        new_arr.push( parsePlistXML(node.childNodes[i]));
-      }
-    }
-    return new_arr;
-
-  } else if (node.nodeName === 'dict') {
-    new_obj = {};
-    key = null;
-    for (i=0; i < node.childNodes.length; i++) {
-      // ignore comment nodes (text)
-      if (!shouldIgnoreNode(node.childNodes[i])) {
-        if (key === null) {
-          key = parsePlistXML(node.childNodes[i]);
-        } else {
-          new_obj[key] = parsePlistXML(node.childNodes[i]);
-          key = null;
-        }
-      }
-    }
-    return new_obj;
-
-  } else if (node.nodeName === 'array') {
-    new_arr = [];
-    for (i=0; i < node.childNodes.length; i++) {
-      // ignore comment nodes (text)
-      if (!shouldIgnoreNode(node.childNodes[i])) {
-        res = parsePlistXML(node.childNodes[i]);
-        if (null != res) new_arr.push(res);
-      }
-    }
-    return new_arr;
-
-  } else if (node.nodeName === '#text') {
-    // TODO: what should we do with text types? (CDATA sections)
-
-  } else if (node.nodeName === 'key') {
-    return node.childNodes[0].nodeValue;
-
-  } else if (node.nodeName === 'string') {
-    res = '';
-    for (d=0; d < node.childNodes.length; d++) {
-      res += node.childNodes[d].nodeValue;
-    }
-    return res;
-
-  } else if (node.nodeName === 'integer') {
-    // parse as base 10 integer
-    return parseInt(node.childNodes[0].nodeValue, 10);
-
-  } else if (node.nodeName === 'real') {
-    res = '';
-    for (d=0; d < node.childNodes.length; d++) {
-      if (node.childNodes[d].nodeType === 3) {
-        res += node.childNodes[d].nodeValue;
-      }
-    }
-    return parseFloat(res);
-
-  } else if (node.nodeName === 'data') {
-    res = '';
-    for (d=0; d < node.childNodes.length; d++) {
-      if (node.childNodes[d].nodeType === 3) {
-        res += node.childNodes[d].nodeValue.replace(/\s+/g, '');
-      }
-    }
-
-    // decode base64 data to a Buffer instance
-    return new Buffer(res, 'base64');
-
-  } else if (node.nodeName === 'date') {
-    return new Date(node.childNodes[0].nodeValue);
-
-  } else if (node.nodeName === 'true') {
-    return true;
-
-  } else if (node.nodeName === 'false') {
-    return false;
-  }
-}
-
-}).call(this,require("buffer").Buffer)
-},{"buffer":7,"util-deprecate":9,"xmldom":202}],4:[function(require,module,exports){
-
-var i;
-
-/**
- * Parser functions.
- */
-
-var parserFunctions = require('./parse');
-for (i in parserFunctions) exports[i] = parserFunctions[i];
-
-/**
- * Builder functions.
- */
-
-var builderFunctions = require('./build');
-for (i in builderFunctions) exports[i] = builderFunctions[i];
-
-/**
- * Add Node.js-specific functions (they're deprecated…).
- */
-
-var nodeFunctions = require('./node');
-for (i in nodeFunctions) exports[i] = nodeFunctions[i];
-
-},{"./build":1,"./node":2,"./parse":3}],5:[function(require,module,exports){
-var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
-
-;(function (exports) {
-	'use strict';
-
-  var Arr = (typeof Uint8Array !== 'undefined')
-    ? Uint8Array
-    : Array
-
-	var ZERO   = '0'.charCodeAt(0)
-	var PLUS   = '+'.charCodeAt(0)
-	var SLASH  = '/'.charCodeAt(0)
-	var NUMBER = '0'.charCodeAt(0)
-	var LOWER  = 'a'.charCodeAt(0)
-	var UPPER  = 'A'.charCodeAt(0)
-
-	function decode (elt) {
-		var code = elt.charCodeAt(0)
-		if (code === PLUS)
-			return 62 // '+'
-		if (code === SLASH)
-			return 63 // '/'
-		if (code < NUMBER)
-			return -1 //no match
-		if (code < NUMBER + 10)
-			return code - NUMBER + 26 + 26
-		if (code < UPPER + 26)
-			return code - UPPER
-		if (code < LOWER + 26)
-			return code - LOWER + 26
-	}
-
-	function b64ToByteArray (b64) {
-		var i, j, l, tmp, placeHolders, arr
-
-		if (b64.length % 4 > 0) {
-			throw new Error('Invalid string. Length must be a multiple of 4')
-		}
-
-		// the number of equal signs (place holders)
-		// if there are two placeholders, than the two characters before it
-		// represent one byte
-		// if there is only one, then the three characters before it represent 2 bytes
-		// this is just a cheap hack to not do indexOf twice
-		var len = b64.length
-		placeHolders = '=' === b64.charAt(len - 2) ? 2 : '=' === b64.charAt(len - 1) ? 1 : 0
-
-		// base64 is 4/3 + up to two characters of the original data
-		arr = new Arr(b64.length * 3 / 4 - placeHolders)
-
-		// if there are placeholders, only get up to the last complete 4 chars
-		l = placeHolders > 0 ? b64.length - 4 : b64.length
-
-		var L = 0
-
-		function push (v) {
-			arr[L++] = v
-		}
-
-		for (i = 0, j = 0; i < l; i += 4, j += 3) {
-			tmp = (decode(b64.charAt(i)) << 18) | (decode(b64.charAt(i + 1)) << 12) | (decode(b64.charAt(i + 2)) << 6) | decode(b64.charAt(i + 3))
-			push((tmp & 0xFF0000) >> 16)
-			push((tmp & 0xFF00) >> 8)
-			push(tmp & 0xFF)
-		}
-
-		if (placeHolders === 2) {
-			tmp = (decode(b64.charAt(i)) << 2) | (decode(b64.charAt(i + 1)) >> 4)
-			push(tmp & 0xFF)
-		} else if (placeHolders === 1) {
-			tmp = (decode(b64.charAt(i)) << 10) | (decode(b64.charAt(i + 1)) << 4) | (decode(b64.charAt(i + 2)) >> 2)
-			push((tmp >> 8) & 0xFF)
-			push(tmp & 0xFF)
-		}
-
-		return arr
-	}
-
-	function uint8ToBase64 (uint8) {
-		var i,
-			extraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes
-			output = "",
-			temp, length
-
-		function encode (num) {
-			return lookup.charAt(num)
-		}
-
-		function tripletToBase64 (num) {
-			return encode(num >> 18 & 0x3F) + encode(num >> 12 & 0x3F) + encode(num >> 6 & 0x3F) + encode(num & 0x3F)
-		}
-
-		// go through the array every three bytes, we'll deal with trailing stuff later
-		for (i = 0, length = uint8.length - extraBytes; i < length; i += 3) {
-			temp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
-			output += tripletToBase64(temp)
-		}
-
-		// pad the end with zeros, but make sure to not forget the extra bytes
-		switch (extraBytes) {
-			case 1:
-				temp = uint8[uint8.length - 1]
-				output += encode(temp >> 2)
-				output += encode((temp << 4) & 0x3F)
-				output += '=='
-				break
-			case 2:
-				temp = (uint8[uint8.length - 2] << 8) + (uint8[uint8.length - 1])
-				output += encode(temp >> 10)
-				output += encode((temp >> 4) & 0x3F)
-				output += encode((temp << 2) & 0x3F)
-				output += '='
-				break
-		}
-
-		return output
-	}
-
-	module.exports.toByteArray = b64ToByteArray
-	module.exports.fromByteArray = uint8ToBase64
-}())
-
-},{}],6:[function(require,module,exports){
-
-},{}],7:[function(require,module,exports){
-/*!
- * The buffer module from node.js, for the browser.
- *
- * @author   Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
- * @license  MIT
- */
-
-var base64 = require('base64-js')
-var ieee754 = require('ieee754')
-
-exports.Buffer = Buffer
-exports.SlowBuffer = Buffer
-exports.INSPECT_MAX_BYTES = 50
-Buffer.poolSize = 8192
-
-/**
- * If `TYPED_ARRAY_SUPPORT`:
- *   === true    Use Uint8Array implementation (fastest)
- *   === false   Use Object implementation (most compatible, even IE6)
- *
- * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
- * Opera 11.6+, iOS 4.2+.
- *
- * Note:
- *
- * - Implementation must support adding new properties to `Uint8Array` instances.
- *   Firefox 4-29 lacked support, fixed in Firefox 30+.
- *   See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.
- *
- *  - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.
- *
- *  - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of
- *    incorrect length in some situations.
- *
- * We detect these buggy browsers and set `TYPED_ARRAY_SUPPORT` to `false` so they will
- * get the Object implementation, which is slower but will work correctly.
- */
-var TYPED_ARRAY_SUPPORT = (function () {
-  try {
-    var buf = new ArrayBuffer(0)
-    var arr = new Uint8Array(buf)
-    arr.foo = function () { return 42 }
-    return 42 === arr.foo() && // typed array instances can be augmented
-        typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`
-        new Uint8Array(1).subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`
-  } catch (e) {
-    return false
-  }
-})()
-
-/**
- * Class: Buffer
- * =============
- *
- * The Buffer constructor returns instances of `Uint8Array` that are augmented
- * with function properties for all the node `Buffer` API functions. We use
- * `Uint8Array` so that square bracket notation works as expected -- it returns
- * a single octet.
- *
- * By augmenting the instances, we can avoid modifying the `Uint8Array`
- * prototype.
- */
-function Buffer (subject, encoding, noZero) {
-  if (!(this instanceof Buffer))
-    return new Buffer(subject, encoding, noZero)
-
-  var type = typeof subject
-
-  // Find the length
-  var length
-  if (type === 'number')
-    length = subject > 0 ? subject >>> 0 : 0
-  else if (type === 'string') {
-    if (encoding === 'base64')
-      subject = base64clean(subject)
-    length = Buffer.byteLength(subject, encoding)
-  } else if (type === 'object' && subject !== null) { // assume object is array-like
-    if (subject.type === 'Buffer' && isArray(subject.data))
-      subject = subject.data
-    length = +subject.length > 0 ? Math.floor(+subject.length) : 0
-  } else
-    throw new Error('First argument needs to be a number, array or string.')
-
-  var buf
-  if (TYPED_ARRAY_SUPPORT) {
-    // Preferred: Return an augmented `Uint8Array` instance for best performance
-    buf = Buffer._augment(new Uint8Array(length))
-  } else {
-    // Fallback: Return THIS instance of Buffer (created by `new`)
-    buf = this
-    buf.length = length
-    buf._isBuffer = true
-  }
-
-  var i
-  if (TYPED_ARRAY_SUPPORT && typeof subject.byteLength === 'number') {
-    // Speed optimization -- use set if we're copying from a typed array
-    buf._set(subject)
-  } else if (isArrayish(subject)) {
-    // Treat array-ish objects as a byte array
-    if (Buffer.isBuffer(subject)) {
-      for (i = 0; i < length; i++)
-        buf[i] = subject.readUInt8(i)
-    } else {
-      for (i = 0; i < length; i++)
-        buf[i] = ((subject[i] % 256) + 256) % 256
-    }
-  } else if (type === 'string') {
-    buf.write(subject, 0, encoding)
-  } else if (type === 'number' && !TYPED_ARRAY_SUPPORT && !noZero) {
-    for (i = 0; i < length; i++) {
-      buf[i] = 0
-    }
-  }
-
-  return buf
-}
-
-// STATIC METHODS
-// ==============
-
-Buffer.isEncoding = function (encoding) {
-  switch (String(encoding).toLowerCase()) {
-    case 'hex':
-    case 'utf8':
-    case 'utf-8':
-    case 'ascii':
-    case 'binary':
-    case 'base64':
-    case 'raw':
-    case 'ucs2':
-    case 'ucs-2':
-    case 'utf16le':
-    case 'utf-16le':
-      return true
-    default:
-      return false
-  }
-}
-
-Buffer.isBuffer = function (b) {
-  return !!(b != null && b._isBuffer)
-}
-
-Buffer.byteLength = function (str, encoding) {
-  var ret
-  str = str.toString()
-  switch (encoding || 'utf8') {
-    case 'hex':
-      ret = str.length / 2
-      break
-    case 'utf8':
-    case 'utf-8':
-      ret = utf8ToBytes(str).length
-      break
-    case 'ascii':
-    case 'binary':
-    case 'raw':
-      ret = str.length
-      break
-    case 'base64':
-      ret = base64ToBytes(str).length
-      break
-    case 'ucs2':
-    case 'ucs-2':
-    case 'utf16le':
-    case 'utf-16le':
-      ret = str.length * 2
-      break
-    default:
-      throw new Error('Unknown encoding')
-  }
-  return ret
-}
-
-Buffer.concat = function (list, totalLength) {
-  assert(isArray(list), 'Usage: Buffer.concat(list[, length])')
-
-  if (list.length === 0) {
-    return new Buffer(0)
-  } else if (list.length === 1) {
-    return list[0]
-  }
-
-  var i
-  if (totalLength === undefined) {
-    totalLength = 0
-    for (i = 0; i < list.length; i++) {
-      totalLength += list[i].length
-    }
-  }
-
-  var buf = new Buffer(totalLength)
-  var pos = 0
-  for (i = 0; i < list.length; i++) {
-    var item = list[i]
-    item.copy(buf, pos)
-    pos += item.length
-  }
-  return buf
-}
-
-Buffer.compare = function (a, b) {
-  assert(Buffer.isBuffer(a) && Buffer.isBuffer(b), 'Arguments must be Buffers')
-  var x = a.length
-  var y = b.length
-  for (var i = 0, len = Math.min(x, y); i < len && a[i] === b[i]; i++) {}
-  if (i !== len) {
-    x = a[i]
-    y = b[i]
-  }
-  if (x < y) {
-    return -1
-  }
-  if (y < x) {
-    return 1
-  }
-  return 0
-}
-
-// BUFFER INSTANCE METHODS
-// =======================
-
-function hexWrite (buf, string, offset, length) {
-  offset = Number(offset) || 0
-  var remaining = buf.length - offset
-  if (!length) {
-    length = remaining
-  } else {
-    length = Number(length)
-    if (length > remaining) {
-      length = remaining
-    }
-  }
-
-  // must be an even number of digits
-  var strLen = string.length
-  assert(strLen % 2 === 0, 'Invalid hex string')
-
-  if (length > strLen / 2) {
-    length = strLen / 2
-  }
-  for (var i = 0; i < length; i++) {
-    var byte = parseInt(string.substr(i * 2, 2), 16)
-    assert(!isNaN(byte), 'Invalid hex string')
-    buf[offset + i] = byte
-  }
-  return i
-}
-
-function utf8Write (buf, string, offset, length) {
-  var charsWritten = blitBuffer(utf8ToBytes(string), buf, offset, length)
-  return charsWritten
-}
-
-function asciiWrite (buf, string, offset, length) {
-  var charsWritten = blitBuffer(asciiToBytes(string), buf, offset, length)
-  return charsWritten
-}
-
-function binaryWrite (buf, string, offset, length) {
-  return asciiWrite(buf, string, offset, length)
-}
-
-function base64Write (buf, string, offset, length) {
-  var charsWritten = blitBuffer(base64ToBytes(string), buf, offset, length)
-  return charsWritten
-}
-
-function utf16leWrite (buf, string, offset, length) {
-  var charsWritten = blitBuffer(utf16leToBytes(string), buf, offset, length)
-  return charsWritten
-}
-
-Buffer.prototype.write = function (string, offset, length, encoding) {
-  // Support both (string, offset, length, encoding)
-  // and the legacy (string, encoding, offset, length)
-  if (isFinite(offset)) {
-    if (!isFinite(length)) {
-      encoding = length
-      length = undefined
-    }
-  } else {  // legacy
-    var swap = encoding
-    encoding = offset
-    offset = length
-    length = swap
-  }
-
-  offset = Number(offset) || 0
-  var remaining = this.length - offset
-  if (!length) {
-    length = remaining
-  } else {
-    length = Number(length)
-    if (length > remaining) {
-      length = remaining
-    }
-  }
-  encoding = String(encoding || 'utf8').toLowerCase()
-
-  var ret
-  switch (encoding) {
-    case 'hex':
-      ret = hexWrite(this, string, offset, length)
-      break
-    case 'utf8':
-    case 'utf-8':
-      ret = utf8Write(this, string, offset, length)
-      break
-    case 'ascii':
-      ret = asciiWrite(this, string, offset, length)
-      break
-    case 'binary':
-      ret = binaryWrite(this, string, offset, length)
-      break
-    case 'base64':
-      ret = base64Write(this, string, offset, length)
-      break
-    case 'ucs2':
-    case 'ucs-2':
-    case 'utf16le':
-    case 'utf-16le':
-      ret = utf16leWrite(this, string, offset, length)
-      break
-    default:
-      throw new Error('Unknown encoding')
-  }
-  return ret
-}
-
-Buffer.prototype.toString = function (encoding, start, end) {
-  var self = this
-
-  encoding = String(encoding || 'utf8').toLowerCase()
-  start = Number(start) || 0
-  end = (end === undefined) ? self.length : Number(end)
-
-  // Fastpath empty strings
-  if (end === start)
-    return ''
-
-  var ret
-  switch (encoding) {
-    case 'hex':
-      ret = hexSlice(self, start, end)
-      break
-    case 'utf8':
-    case 'utf-8':
-      ret = utf8Slice(self, start, end)
-      break
-    case 'ascii':
-      ret = asciiSlice(self, start, end)
-      break
-    case 'binary':
-      ret = binarySlice(self, start, end)
-      break
-    case 'base64':
-      ret = base64Slice(self, start, end)
-      break
-    case 'ucs2':
-    case 'ucs-2':
-    case 'utf16le':
-    case 'utf-16le':
-      ret = utf16leSlice(self, start, end)
-      break
-    default:
-      throw new Error('Unknown encoding')
-  }
-  return ret
-}
-
-Buffer.prototype.toJSON = function () {
-  return {
-    type: 'Buffer',
-    data: Array.prototype.slice.call(this._arr || this, 0)
-  }
-}
-
-Buffer.prototype.equals = function (b) {
-  assert(Buffer.isBuffer(b), 'Argument must be a Buffer')
-  return Buffer.compare(this, b) === 0
-}
-
-Buffer.prototype.compare = function (b) {
-  assert(Buffer.isBuffer(b), 'Argument must be a Buffer')
-  return Buffer.compare(this, b)
-}
-
-// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
-Buffer.prototype.copy = function (target, target_start, start, end) {
-  var source = this
-
-  if (!start) start = 0
-  if (!end && end !== 0) end = this.length
-  if (!target_start) target_start = 0
-
-  // Copy 0 bytes; we're done
-  if (end === start) return
-  if (target.length === 0 || source.length === 0) return
-
-  // Fatal error conditions
-  assert(end >= start, 'sourceEnd < sourceStart')
-  assert(target_start >= 0 && target_start < target.length,
-      'targetStart out of bounds')
-  assert(start >= 0 && start < source.length, 'sourceStart out of bounds')
-  assert(end >= 0 && end <= source.length, 'sourceEnd out of bounds')
-
-  // Are we oob?
-  if (end > this.length)
-    end = this.length
-  if (target.length - target_start < end - start)
-    end = target.length - target_start + start
-
-  var len = end - start
-
-  if (len < 100 || !TYPED_ARRAY_SUPPORT) {
-    for (var i = 0; i < len; i++) {
-      target[i + target_start] = this[i + start]
-    }
-  } else {
-    target._set(this.subarray(start, start + len), target_start)
-  }
-}
-
-function base64Slice (buf, start, end) {
-  if (start === 0 && end === buf.length) {
-    return base64.fromByteArray(buf)
-  } else {
-    return base64.fromByteArray(buf.slice(start, end))
-  }
-}
-
-function utf8Slice (buf, start, end) {
-  var res = ''
-  var tmp = ''
-  end = Math.min(buf.length, end)
-
-  for (var i = start; i < end; i++) {
-    if (buf[i] <= 0x7F) {
-      res += decodeUtf8Char(tmp) + String.fromCharCode(buf[i])
-      tmp = ''
-    } else {
-      tmp += '%' + buf[i].toString(16)
-    }
-  }
-
-  return res + decodeUtf8Char(tmp)
-}
-
-function asciiSlice (buf, start, end) {
-  var ret = ''
-  end = Math.min(buf.length, end)
-
-  for (var i = start; i < end; i++) {
-    ret += String.fromCharCode(buf[i])
-  }
-  return ret
-}
-
-function binarySlice (buf, start, end) {
-  return asciiSlice(buf, start, end)
-}
-
-function hexSlice (buf, start, end) {
-  var len = buf.length
-
-  if (!start || start < 0) start = 0
-  if (!end || end < 0 || end > len) end = len
-
-  var out = ''
-  for (var i = start; i < end; i++) {
-    out += toHex(buf[i])
-  }
-  return out
-}
-
-function utf16leSlice (buf, start, end) {
-  var bytes = buf.slice(start, end)
-  var res = ''
-  for (var i = 0; i < bytes.length; i += 2) {
-    res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)
-  }
-  return res
-}
-
-Buffer.prototype.slice = function (start, end) {
-  var len = this.length
-  start = ~~start
-  end = end === undefined ? len : ~~end
-
-  if (start < 0) {
-    start += len;
-    if (start < 0)
-      start = 0
-  } else if (start > len) {
-    start = len
-  }
-
-  if (end < 0) {
-    end += len
-    if (end < 0)
-      end = 0
-  } else if (end > len) {
-    end = len
-  }
-
-  if (end < start)
-    end = start
-
-  if (TYPED_ARRAY_SUPPORT) {
-    return Buffer._augment(this.subarray(start, end))
-  } else {
-    var sliceLen = end - start
-    var newBuf = new Buffer(sliceLen, undefined, true)
-    for (var i = 0; i < sliceLen; i++) {
-      newBuf[i] = this[i + start]
-    }
-    return newBuf
-  }
-}
-
-// `get` will be removed in Node 0.13+
-Buffer.prototype.get = function (offset) {
-  console.log('.get() is deprecated. Access using array indexes instead.')
-  return this.readUInt8(offset)
-}
-
-// `set` will be removed in Node 0.13+
-Buffer.prototype.set = function (v, offset) {
-  console.log('.set() is deprecated. Access using array indexes instead.')
-  return this.writeUInt8(v, offset)
-}
-
-Buffer.prototype.readUInt8 = function (offset, noAssert) {
-  if (!noAssert) {
-    assert(offset !== undefined && offset !== null, 'missing offset')
-    assert(offset < this.length, 'Trying to read beyond buffer length')
-  }
-
-  if (offset >= this.length)
-    return
-
-  return this[offset]
-}
-
-function readUInt16 (buf, offset, littleEndian, noAssert) {
-  if (!noAssert) {
-    assert(typeof littleEndian === 'boolean', 'missing or invalid endian')
-    assert(offset !== undefined && offset !== null, 'missing offset')
-    assert(offset + 1 < buf.length, 'Trying to read beyond buffer length')
-  }
-
-  var len = buf.length
-  if (offset >= len)
-    return
-
-  var val
-  if (littleEndian) {
-    val = buf[offset]
-    if (offset + 1 < len)
-      val |= buf[offset + 1] << 8
-  } else {
-    val = buf[offset] << 8
-    if (offset + 1 < len)
-      val |= buf[offset + 1]
-  }
-  return val
-}
-
-Buffer.prototype.readUInt16LE = function (offset, noAssert) {
-  return readUInt16(this, offset, true, noAssert)
-}
-
-Buffer.prototype.readUInt16BE = function (offset, noAssert) {
-  return readUInt16(this, offset, false, noAssert)
-}
-
-function readUInt32 (buf, offset, littleEndian, noAssert) {
-  if (!noAssert) {
-    assert(typeof littleEndian === 'boolean', 'missing or invalid endian')
-    assert(offset !== undefined && offset !== null, 'missing offset')
-    assert(offset + 3 < buf.length, 'Trying to read beyond buffer length')
-  }
-
-  var len = buf.length
-  if (offset >= len)
-    return
-
-  var val
-  if (littleEndian) {
-    if (offset + 2 < len)
-      val = buf[offset + 2] << 16
-    if (offset + 1 < len)
-      val |= buf[offset + 1] << 8
-    val |= buf[offset]
-    if (offset + 3 < len)
-      val = val + (buf[offset + 3] << 24 >>> 0)
-  } else {
-    if (offset + 1 < len)
-      val = buf[offset + 1] << 16
-    if (offset + 2 < len)
-      val |= buf[offset + 2] << 8
-    if (offset + 3 < len)
-      val |= buf[offset + 3]
-    val = val + (buf[offset] << 24 >>> 0)
-  }
-  return val
-}
-
-Buffer.prototype.readUInt32LE = function (offset, noAssert) {
-  return readUInt32(this, offset, true, noAssert)
-}
-
-Buffer.prototype.readUInt32BE = function (offset, noAssert) {
-  return readUInt32(this, offset, false, noAssert)
-}
-
-Buffer.prototype.readInt8 = function (offset, noAssert) {
-  if (!noAssert) {
-    assert(offset !== undefined && offset !== null,
-        'missing offset')
-    assert(offset < this.length, 'Trying to read beyond buffer length')
-  }
-
-  if (offset >= this.length)
-    return
-
-  var neg = this[offset] & 0x80
-  if (neg)
-    return (0xff - this[offset] + 1) * -1
-  else
-    return this[offset]
-}
-
-function readInt16 (buf, offset, littleEndian, noAssert) {
-  if (!noAssert) {
-    assert(typeof littleEndian === 'boolean', 'missing or invalid endian')
-    assert(offset !== undefined && offset !== null, 'missing offset')
-    assert(offset + 1 < buf.length, 'Trying to read beyond buffer length')
-  }
-
-  var len = buf.length
-  if (offset >= len)
-    return
-
-  var val = readUInt16(buf, offset, littleEndian, true)
-  var neg = val & 0x8000
-  if (neg)
-    return (0xffff - val + 1) * -1
-  else
-    return val
-}
-
-Buffer.prototype.readInt16LE = function (offset, noAssert) {
-  return readInt16(this, offset, true, noAssert)
-}
-
-Buffer.prototype.readInt16BE = function (offset, noAssert) {
-  return readInt16(this, offset, false, noAssert)
-}
-
-function readInt32 (buf, offset, littleEndian, noAssert) {
-  if (!noAssert) {
-    assert(typeof littleEndian === 'boolean', 'missing or invalid endian')
-    assert(offset !== undefined && offset !== null, 'missing offset')
-    assert(offset + 3 < buf.length, 'Trying to read beyond buffer length')
-  }
-
-  var len = buf.length
-  if (offset >= len)
-    return
-
-  var val = readUInt32(buf, offset, littleEndian, true)
-  var neg = val & 0x80000000
-  if (neg)
-    return (0xffffffff - val + 1) * -1
-  else
-    return val
-}
-
-Buffer.prototype.readInt32LE = function (offset, noAssert) {
-  return readInt32(this, offset, true, noAssert)
-}
-
-Buffer.prototype.readInt32BE = function (offset, noAssert) {
-  return readInt32(this, offset, false, noAssert)
-}
-
-function readFloat (buf, offset, littleEndian, noAssert) {
-  if (!noAssert) {
-    assert(typeof littleEndian === 'boolean', 'missing or invalid endian')
-    assert(offset + 3 < buf.length, 'Trying to read beyond buffer length')
-  }
-
-  return ieee754.read(buf, offset, littleEndian, 23, 4)
-}
-
-Buffer.prototype.readFloatLE = function (offset, noAssert) {
-  return readFloat(this, offset, true, noAssert)
-}
-
-Buffer.prototype.readFloatBE = function (offset, noAssert) {
-  return readFloat(this, offset, false, noAssert)
-}
-
-function readDouble (buf, offset, littleEndian, noAssert) {
-  if (!noAssert) {
-    assert(typeof littleEndian === 'boolean', 'missing or invalid endian')
-    assert(offset + 7 < buf.length, 'Trying to read beyond buffer length')
-  }
-
-  return ieee754.read(buf, offset, littleEndian, 52, 8)
-}
-
-Buffer.prototype.readDoubleLE = function (offset, noAssert) {
-  return readDouble(this, offset, true, noAssert)
-}
-
-Buffer.prototype.readDoubleBE = function (offset, noAssert) {
-  return readDouble(this, offset, false, noAssert)
-}
-
-Buffer.prototype.writeUInt8 = function (value, offset, noAssert) {
-  if (!noAssert) {
-    assert(value !== undefined && value !== null, 'missing value')
-    assert(offset !== undefined && offset !== null, 'missing offset')
-    assert(offset < this.length, 'trying to write beyond buffer length')
-    verifuint(value, 0xff)
-  }
-
-  if (offset >= this.length) return
-
-  this[offset] = value
-  return offset + 1
-}
-
-function writeUInt16 (buf, value, offset, littleEndian, noAssert) {
-  if (!noAssert) {
-    assert(value !== undefined && value !== null, 'missing value')
-    assert(typeof littleEndian === 'boolean', 'missing or invalid endian')
-    assert(offset !== undefined && offset !== null, 'missing offset')
-    assert(offset + 1 < buf.length, 'trying to write beyond buffer length')
-    verifuint(value, 0xffff)
-  }
-
-  var len = buf.length
-  if (offset >= len)
-    return
-
-  for (var i = 0, j = Math.min(len - offset, 2); i < j; i++) {
-    buf[offset + i] =
-        (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>
-            (littleEndian ? i : 1 - i) * 8
-  }
-  return offset + 2
-}
-
-Buffer.prototype.writeUInt16LE = function (value, offset, noAssert) {
-  return writeUInt16(this, value, offset, true, noAssert)
-}
-
-Buffer.prototype.writeUInt16BE = function (value, offset, noAssert) {
-  return writeUInt16(this, value, offset, false, noAssert)
-}
-
-function writeUInt32 (buf, value, offset, littleEndian, noAssert) {
-  if (!noAssert) {
-    assert(value !== undefined && value !== null, 'missing value')
-    assert(typeof littleEndian === 'boolean', 'missing or invalid endian')
-    assert(offset !== undefined && offset !== null, 'missing offset')
-    assert(offset + 3 < buf.length, 'trying to write beyond buffer length')
-    verifuint(value, 0xffffffff)
-  }
-
-  var len = buf.length
-  if (offset >= len)
-    return
-
-  for (var i = 0, j = Math.min(len - offset, 4); i < j; i++) {
-    buf[offset + i] =
-        (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff
-  }
-  return offset + 4
-}
-
-Buffer.prototype.writeUInt32LE = function (value, offset, noAssert) {
-  return writeUInt32(this, value, offset, true, noAssert)
-}
-
-Buffer.prototype.writeUInt32BE = function (value, offset, noAssert) {
-  return writeUInt32(this, value, offset, false, noAssert)
-}
-
-Buffer.prototype.writeInt8 = function (value, offset, noAssert) {
-  if (!noAssert) {
-    assert(value !== undefined && value !== null, 'missing value')
-    assert(offset !== undefined && offset !== null, 'missing offset')
-    assert(offset < this.length, 'Trying to write beyond buffer length')
-    verifsint(value, 0x7f, -0x80)
-  }
-
-  if (offset >= this.length)
-    return
-
-  if (value >= 0)
-    this.writeUInt8(value, offset, noAssert)
-  else
-    this.writeUInt8(0xff + value + 1, offset, noAssert)
-  return offset + 1
-}
-
-function writeInt16 (buf, value, offset, littleEndian, noAssert) {
-  if (!noAssert) {
-    assert(value !== undefined && value !== null, 'missing value')
-    assert(typeof littleEndian === 'boolean', 'missing or invalid endian')
-    assert(offset !== undefined && offset !== null, 'missing offset')
-    assert(offset + 1 < buf.length, 'Trying to write beyond buffer length')
-    verifsint(value, 0x7fff, -0x8000)
-  }
-
-  var len = buf.length
-  if (offset >= len)
-    return
-
-  if (value >= 0)
-    writeUInt16(buf, value, offset, littleEndian, noAssert)
-  else
-    writeUInt16(buf, 0xffff + value + 1, offset, littleEndian, noAssert)
-  return offset + 2
-}
-
-Buffer.prototype.writeInt16LE = function (value, offset, noAssert) {
-  return writeInt16(this, value, offset, true, noAssert)
-}
-
-Buffer.prototype.writeInt16BE = function (value, offset, noAssert) {
-  return writeInt16(this, value, offset, false, noAssert)
-}
-
-function writeInt32 (buf, value, offset, littleEndian, noAssert) {
-  if (!noAssert) {
-    assert(value !== undefined && value !== null, 'missing value')
-    assert(typeof littleEndian === 'boolean', 'missing or invalid endian')
-    assert(offset !== undefined && offset !== null, 'missing offset')
-    assert(offset + 3 < buf.length, 'Trying to write beyond buffer length')
-    verifsint(value, 0x7fffffff, -0x80000000)
-  }
-
-  var len = buf.length
-  if (offset >= len)
-    return
-
-  if (value >= 0)
-    writeUInt32(buf, value, offset, littleEndian, noAssert)
-  else
-    writeUInt32(buf, 0xffffffff + value + 1, offset, littleEndian, noAssert)
-  return offset + 4
-}
-
-Buffer.prototype.writeInt32LE = function (value, offset, noAssert) {
-  return writeInt32(this, value, offset, true, noAssert)
-}
-
-Buffer.prototype.writeInt32BE = function (value, offset, noAssert) {
-  return writeInt32(this, value, offset, false, noAssert)
-}
-
-function writeFloat (buf, value, offset, littleEndian, noAssert) {
-  if (!noAssert) {
-    assert(value !== undefined && value !== null, 'missing value')
-    assert(typeof littleEndian === 'boolean', 'missing or invalid endian')
-    assert(offset !== undefined && offset !== null, 'missing offset')
-    assert(offset + 3 < buf.length, 'Trying to write beyond buffer length')
-    verifIEEE754(value, 3.4028234663852886e+38, -3.4028234663852886e+38)
-  }
-
-  var len = buf.length
-  if (offset >= len)
-    return
-
-  ieee754.write(buf, value, offset, littleEndian, 23, 4)
-  return offset + 4
-}
-
-Buffer.prototype.writeFloatLE = function (value, offset, noAssert) {
-  return writeFloat(this, value, offset, true, noAssert)
-}
-
-Buffer.prototype.writeFloatBE = function (value, offset, noAssert) {
-  return writeFloat(this, value, offset, false, noAssert)
-}
-
-function writeDouble (buf, value, offset, littleEndian, noAssert) {
-  if (!noAssert) {
-    assert(value !== undefined && value !== null, 'missing value')
-    assert(typeof littleEndian === 'boolean', 'missing or invalid endian')
-    assert(offset !== undefined && offset !== null, 'missing offset')
-    assert(offset + 7 < buf.length,
-        'Trying to write beyond buffer length')
-    verifIEEE754(value, 1.7976931348623157E+308, -1.7976931348623157E+308)
-  }
-
-  var len = buf.length
-  if (offset >= len)
-    return
-
-  ieee754.write(buf, value, offset, littleEndian, 52, 8)
-  return offset + 8
-}
-
-Buffer.prototype.writeDoubleLE = function (value, offset, noAssert) {
-  return writeDouble(this, value, offset, true, noAssert)
-}
-
-Buffer.prototype.writeDoubleBE = function (value, offset, noAssert) {
-  return writeDouble(this, value, offset, false, noAssert)
-}
-
-// fill(value, start=0, end=buffer.length)
-Buffer.prototype.fill = function (value, start, end) {
-  if (!value) value = 0
-  if (!start) start = 0
-  if (!end) end = this.length
-
-  assert(end >= start, 'end < start')
-
-  // Fill 0 bytes; we're done
-  if (end === start) return
-  if (this.length === 0) return
-
-  assert(start >= 0 && start < this.length, 'start out of bounds')
-  assert(end >= 0 && end <= this.length, 'end out of bounds')
-
-  var i
-  if (typeof value === 'number') {
-    for (i = start; i < end; i++) {
-      this[i] = value
-    }
-  } else {
-    var bytes = utf8ToBytes(value.toString())
-    var len = bytes.length
-    for (i = start; i < end; i++) {
-      this[i] = bytes[i % len]
-    }
-  }
-
-  return this
-}
-
-Buffer.prototype.inspect = function () {
-  var out = []
-  var len = this.length
-  for (var i = 0; i < len; i++) {
-    out[i] = toHex(this[i])
-    if (i === exports.INSPECT_MAX_BYTES) {
-      out[i + 1] = '...'
-      break
-    }
-  }
-  return '<Buffer ' + out.join(' ') + '>'
-}
-
-/**
- * Creates a new `ArrayBuffer` with the *copied* memory of the buffer instance.
- * Added in Node 0.12. Only available in browsers that support ArrayBuffer.
- */
-Buffer.prototype.toArrayBuffer = function () {
-  if (typeof Uint8Array !== 'undefined') {
-    if (TYPED_ARRAY_SUPPORT) {
-      return (new Buffer(this)).buffer
-    } else {
-      var buf = new Uint8Array(this.length)
-      for (var i = 0, len = buf.length; i < len; i += 1) {
-        buf[i] = this[i]
-      }
-      return buf.buffer
-    }
-  } else {
-    throw new Error('Buffer.toArrayBuffer not supported in this browser')
-  }
-}
-
-// HELPER FUNCTIONS
-// ================
-
-var BP = Buffer.prototype
-
-/**
- * Augment a Uint8Array *instance* (not the Uint8Array class!) with Buffer methods
- */
-Buffer._augment = function (arr) {
-  arr._isBuffer = true
-
-  // save reference to original Uint8Array get/set methods before overwriting
-  arr._get = arr.get
-  arr._set = arr.set
-
-  // deprecated, will be removed in node 0.13+
-  arr.get = BP.get
-  arr.set = BP.set
-
-  arr.write = BP.write
-  arr.toString = BP.toString
-  arr.toLocaleString = BP.toString
-  arr.toJSON = BP.toJSON
-  arr.equals = BP.equals
-  arr.compare = BP.compare
-  arr.copy = BP.copy
-  arr.slice = BP.slice
-  arr.readUInt8 = BP.readUInt8
-  arr.readUInt16LE = BP.readUInt16LE
-  arr.readUInt16BE = BP.readUInt16BE
-  arr.readUInt32LE = BP.readUInt32LE
-  arr.readUInt32BE = BP.readUInt32BE
-  arr.readInt8 = BP.readInt8
-  arr.readInt16LE = BP.readInt16LE
-  arr.readInt16BE = BP.readInt16BE
-  arr.readInt32LE = BP.readInt32LE
-  arr.readInt32BE = BP.readInt32BE
-  arr.readFloatLE = BP.readFloatLE
-  arr.readFloatBE = BP.readFloatBE
-  arr.readDoubleLE = BP.readDoubleLE
-  arr.readDoubleBE = BP.readDoubleBE
-  arr.writeUInt8 = BP.writeUInt8
-  arr.writeUInt16LE = BP.writeUInt16LE
-  arr.writeUInt16BE = BP.writeUInt16BE
-  arr.writeUInt32LE = BP.writeUInt32LE
-  arr.writeUInt32BE = BP.writeUInt32BE
-  arr.writeInt8 = BP.writeInt8
-  arr.writeInt16LE = BP.writeInt16LE
-  arr.writeInt16BE = BP.writeInt16BE
-  arr.writeInt32LE = BP.writeInt32LE
-  arr.writeInt32BE = BP.writeInt32BE
-  arr.writeFloatLE = BP.writeFloatLE
-  arr.writeFloatBE = BP.writeFloatBE
-  arr.writeDoubleLE = BP.writeDoubleLE
-  arr.writeDoubleBE = BP.writeDoubleBE
-  arr.fill = BP.fill
-  arr.inspect = BP.inspect
-  arr.toArrayBuffer = BP.toArrayBuffer
-
-  return arr
-}
-
-var INVALID_BASE64_RE = /[^+\/0-9A-z]/g
-
-function base64clean (str) {
-  // Node strips out invalid characters like \n and \t from the string, base64-js does not
-  str = stringtrim(str).replace(INVALID_BASE64_RE, '')
-  // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
-  while (str.length % 4 !== 0) {
-    str = str + '='
-  }
-  return str
-}
-
-function stringtrim (str) {
-  if (str.trim) return str.trim()
-  return str.replace(/^\s+|\s+$/g, '')
-}
-
-function isArray (subject) {
-  return (Array.isArray || function (subject) {
-    return Object.prototype.toString.call(subject) === '[object Array]'
-  })(subject)
-}
-
-function isArrayish (subject) {
-  return isArray(subject) || Buffer.isBuffer(subject) ||
-      subject && typeof subject === 'object' &&
-      typeof subject.length === 'number'
-}
-
-function toHex (n) {
-  if (n < 16) return '0' + n.toString(16)
-  return n.toString(16)
-}
-
-function utf8ToBytes (str) {
-  var byteArray = []
-  for (var i = 0; i < str.length; i++) {
-    var b = str.charCodeAt(i)
-    if (b <= 0x7F) {
-      byteArray.push(b)
-    } else {
-      var start = i
-      if (b >= 0xD800 && b <= 0xDFFF) i++
-      var h = encodeURIComponent(str.slice(start, i+1)).substr(1).split('%')
-      for (var j = 0; j < h.length; j++) {
-        byteArray.push(parseInt(h[j], 16))
-      }
-    }
-  }
-  return byteArray
-}
-
-function asciiToBytes (str) {
-  var byteArray = []
-  for (var i = 0; i < str.length; i++) {
-    // Node's code seems to be doing this and not & 0x7F..
-    byteArray.push(str.charCodeAt(i) & 0xFF)
-  }
-  return byteArray
-}
-
-function utf16leToBytes (str) {
-  var c, hi, lo
-  var byteArray = []
-  for (var i = 0; i < str.length; i++) {
-    c = str.charCodeAt(i)
-    hi = c >> 8
-    lo = c % 256
-    byteArray.push(lo)
-    byteArray.push(hi)
-  }
-
-  return byteArray
-}
-
-function base64ToBytes (str) {
-  return base64.toByteArray(str)
-}
-
-function blitBuffer (src, dst, offset, length) {
-  for (var i = 0; i < length; i++) {
-    if ((i + offset >= dst.length) || (i >= src.length))
-      break
-    dst[i + offset] = src[i]
-  }
-  return i
-}
-
-function decodeUtf8Char (str) {
-  try {
-    return decodeURIComponent(str)
-  } catch (err) {
-    return String.fromCharCode(0xFFFD) // UTF 8 invalid char
-  }
-}
-
-/*
- * We have to make sure that the value is a valid integer. This means that it
- * is non-negative. It has no fractional component and that it does not
- * exceed the maximum allowed value.
- */
-function verifuint (value, max) {
-  assert(typeof value === 'number', 'cannot write a non-number as a number')
-  assert(value >= 0, 'specified a negative value for writing an unsigned value')
-  assert(value <= max, 'value is larger than maximum value for type')
-  assert(Math.floor(value) === value, 'value has a fractional component')
-}
-
-function verifsint (value, max, min) {
-  assert(typeof value === 'number', 'cannot write a non-number as a number')
-  assert(value <= max, 'value larger than maximum allowed value')
-  assert(value >= min, 'value smaller than minimum allowed value')
-  assert(Math.floor(value) === value, 'value has a fractional component')
-}
-
-function verifIEEE754 (value, max, min) {
-  assert(typeof value === 'number', 'cannot write a non-number as a number')
-  assert(value <= max, 'value larger than maximum allowed value')
-  assert(value >= min, 'value smaller than minimum allowed value')
-}
-
-function assert (test, message) {
-  if (!test) throw new Error(message || 'Failed assertion')
-}
-
-},{"base64-js":5,"ieee754":8}],8:[function(require,module,exports){
-exports.read = function(buffer, offset, isLE, mLen, nBytes) {
-  var e, m,
-      eLen = nBytes * 8 - mLen - 1,
-      eMax = (1 << eLen) - 1,
-      eBias = eMax >> 1,
-      nBits = -7,
-      i = isLE ? (nBytes - 1) : 0,
-      d = isLE ? -1 : 1,
-      s = buffer[offset + i];
-
-  i += d;
-
-  e = s & ((1 << (-nBits)) - 1);
-  s >>= (-nBits);
-  nBits += eLen;
-  for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8);
-
-  m = e & ((1 << (-nBits)) - 1);
-  e >>= (-nBits);
-  nBits += mLen;
-  for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8);
-
-  if (e === 0) {
-    e = 1 - eBias;
-  } else if (e === eMax) {
-    return m ? NaN : ((s ? -1 : 1) * Infinity);
-  } else {
-    m = m + Math.pow(2, mLen);
-    e = e - eBias;
-  }
-  return (s ? -1 : 1) * m * Math.pow(2, e - mLen);
-};
-
-exports.write = function(buffer, value, offset, isLE, mLen, nBytes) {
-  var e, m, c,
-      eLen = nBytes * 8 - mLen - 1,
-      eMax = (1 << eLen) - 1,
-      eBias = eMax >> 1,
-      rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0),
-      i = isLE ? 0 : (nBytes - 1),
-      d = isLE ? 1 : -1,
-      s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0;
-
-  value = Math.abs(value);
-
-  if (isNaN(value) || value === Infinity) {
-    m = isNaN(value) ? 1 : 0;
-    e = eMax;
-  } else {
-    e = Math.floor(Math.log(value) / Math.LN2);
-    if (value * (c = Math.pow(2, -e)) < 1) {
-      e--;
-      c *= 2;
-    }
-    if (e + eBias >= 1) {
-      value += rt / c;
-    } else {
-      value += rt * Math.pow(2, 1 - eBias);
-    }
-    if (value * c >= 2) {
-      e++;
-      c /= 2;
-    }
-
-    if (e + eBias >= eMax) {
-      m = 0;
-      e = eMax;
-    } else if (e + eBias >= 1) {
-      m = (value * c - 1) * Math.pow(2, mLen);
-      e = e + eBias;
-    } else {
-      m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen);
-      e = 0;
-    }
-  }
-
-  for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8);
-
-  e = (e << mLen) | m;
-  eLen += mLen;
-  for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8);
-
-  buffer[offset + i - d] |= s * 128;
-};
-
-},{}],9:[function(require,module,exports){
-(function (global){
-
-/**
- * Module exports.
- */
-
-module.exports = deprecate;
-
-/**
- * Mark that a method should not be used.
- * Returns a modified function which warns once by default.
- * If --no-deprecation is set, then it is a no-op.
- *
- * @param {Function} fn - the function to deprecate
- * @param {String} msg - the string to print to the console when `fn` is invoked
- * @returns {Function} a new "deprecated" version of `fn`
- * @api public
- */
-
-function deprecate (fn, msg) {
-  if (config('noDeprecation')) {
-    return fn;
-  }
-
-  var warned = false;
-  function deprecated() {
-    if (!warned) {
-      if (config('throwDeprecation')) {
-        throw new Error(msg);
-      } else if (config('traceDeprecation')) {
-        console.trace(msg);
-      } else {
-        console.error(msg);
-      }
-      warned = true;
-    }
-    return fn.apply(this, arguments);
-  }
-
-  return deprecated;
-}
-
-/**
- * Checks `localStorage` for boolean values for the given `name`.
- *
- * @param {String} name
- * @returns {Boolean}
- * @api private
- */
-
-function config (name) {
-  if (!global.localStorage) return false;
-  var val = global.localStorage[name];
-  if (null == val) return false;
-  return String(val).toLowerCase() === 'true';
-}
-
-}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
-},{}],10:[function(require,module,exports){
-// Generated by CoffeeScript 1.6.3
-(function() {
-  var XMLAttribute, _;
-
-  _ = require('lodash-node');
-
-  module.exports = XMLAttribute = (function() {
-    function XMLAttribute(parent, name, value) {
-      this.stringify = parent.stringify;
-      if (name == null) {
-        throw new Error("Missing attribute name");
-      }
-      if (value == null) {
-        throw new Error("Missing attribute value");
-      }
-      this.name = this.stringify.attName(name);
-      this.value = this.stringify.attValue(value);
-    }
-
-    XMLAttribute.prototype.clone = function() {
-      return _.create(XMLAttribute.prototype, this);
-    };
-
-    XMLAttribute.prototype.toString = function(options, level) {
-      return ' ' + this.name + '="' + this.value + '"';
-    };
-
-    return XMLAttribute;
-
-  })();
-
-}).call(this);
-
-},{"lodash-node":100}],11:[function(require,module,exports){
-// Generated by CoffeeScript 1.6.3
-(function() {
-  var XMLBuilder, XMLDeclaration, XMLDocType, XMLElement, XMLStringifier, _;
-
-  _ = require('lodash-node');
-
-  XMLStringifier = require('./XMLStringifier');
-
-  XMLDeclaration = require('./XMLDeclaration');
-
-  XMLDocType = require('./XMLDocType');
-
-  XMLElement = require('./XMLElement');
-
-  module.exports = XMLBuilder = (function() {
-    function XMLBuilder(name, options) {
-      var root, temp;
-      if (name == null) {
-        throw new Error("Root element needs a name");
-      }
-      if (options == null) {
-        options = {};
-      }
-      this.options = options;
-      this.stringify = new XMLStringifier(options);
-      temp = new XMLElement(this, 'doc');
-      root = temp.element(name);
-      root.isRoot = true;
-      root.documentObject = this;
-      this.rootObject = root;
-      if (!options.headless) {
-        root.declaration(options);
-        if ((options.pubID != null) || (options.sysID != null)) {
-          root.doctype(options);
-        }
-      }
-    }
-
-    XMLBuilder.prototype.root = function() {
-      return this.rootObject;
-    };
-
-    XMLBuilder.prototype.end = function(options) {
-      return toString(options);
-    };
-
-    XMLBuilder.prototype.toString = function(options) {
-      var indent, newline, pretty, r;
-      pretty = (options != null ? options.pretty : void 0) || false;
-      indent = (options != null ? options.indent : void 0) || '  ';
-      newline = (options != null ? options.newline : void 0) || '\n';
-      r = '';
-      if (this.xmldec != null) {
-        r += this.xmldec.toString(options);
-      }
-      if (this.doctype != null) {
-        r += this.doctype.toString(options);
-      }
-      r += this.rootObject.toString(options);
-      if (pretty && r.slice(-newline.length) === newline) {
-        r = r.slice(0, -newline.length);
-      }
-      return r;
-    };
-
-    return XMLBuilder;
-
-  })();
-
-}).call(this);
-
-},{"./XMLDeclaration":18,"./XMLDocType":19,"./XMLElement":20,"./XMLStringifier":24,"lodash-node":100}],12:[function(require,module,exports){
-// Generated by CoffeeScript 1.6.3
-(function() {
-  var XMLCData, XMLNode, _,
-    __hasProp = {}.hasOwnProperty,
-    __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
-
-  _ = require('lodash-node');
-
-  XMLNode = require('./XMLNode');
-
-  module.exports = XMLCData = (function(_super) {
-    __extends(XMLCData, _super);
-
-    function XMLCData(parent, text) {
-      XMLCData.__super__.constructor.call(this, parent);
-      if (text == null) {
-        throw new Error("Missing CDATA text");
-      }
-      this.text = this.stringify.cdata(text);
-    }
-
-    XMLCData.prototype.clone = function() {
-      return _.create(XMLCData.prototype, this);
-    };
-
-    XMLCData.prototype.toString = function(options, level) {
-      var indent, newline, pretty, r, space;
-      pretty = (options != null ? options.pretty : void 0) || false;
-      indent = (options != null ? options.indent : void 0) || '  ';
-      newline = (options != null ? options.newline : void 0) || '\n';
-      level || (level = 0);
-      space = new Array(level + 1).join(indent);
-      r = '';
-      if (pretty) {
-        r += space;
-      }
-      r += '<![CDATA[' + this.text + ']]>';
-      if (pretty) {
-        r += newline;
-      }
-      return r;
-    };
-
-    return XMLCData;
-
-  })(XMLNode);
-
-}).call(this);
-
-},{"./XMLNode":21,"lodash-node":100}],13:[function(require,module,exports){
-// Generated by CoffeeScript 1.6.3
-(function() {
-  var XMLComment, XMLNode, _,
-    __hasProp = {}.hasOwnProperty,
-    __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
-
-  _ = require('lodash-node');
-
-  XMLNode = require('./XMLNode');
-
-  module.exports = XMLComment = (function(_super) {
-    __extends(XMLComment, _super);
-
-    function XMLComment(parent, text) {
-      XMLComment.__super__.constructor.call(this, parent);
-      if (text == null) {
-        throw new Error("Missing comment text");
-      }
-      this.text = this.stringify.comment(text);
-    }
-
-    XMLComment.prototype.clone = function() {
-      return _.create(XMLComment.prototype, this);
-    };
-
-    XMLComment.prototype.toString = function(options, level) {
-      var indent, newline, pretty, r, space;
-      pretty = (options != null ? options.pretty : void 0) || false;
-      indent = (options != null ? options.indent : void 0) || '  ';
-      newline = (options != null ? options.newline : void 0) || '\n';
-      level || (level = 0);
-      space = new Array(level + 1).join(indent);
-      r = '';
-      if (pretty) {
-        r += space;
-      }
-      r += '<!-- ' + this.text + ' -->';
-      if (pretty) {
-        r += newline;
-      }
-      return r;
-    };
-
-    return XMLComment;
-
-  })(XMLNode);
-
-}).call(this);
-
-},{"./XMLNode":21,"lodash-node":100}],14:[function(require,module,exports){
-// Generated by CoffeeScript 1.6.3
-(function() {
-  var XMLDTDAttList, _;
-
-  _ = require('lodash-node');
-
-  module.exports = XMLDTDAttList = (function() {
-    function XMLDTDAttList(parent, elementName, attributeName, attributeType, defaultValueType, defaultValue) {
-      this.stringify = parent.stringify;
-      if (elementName == null) {
-        throw new Error("Missing DTD element name");
-      }
-      if (attributeName == null) {
-        throw new Error("Missing DTD attribute name");
-      }
-      if (!attributeType) {
-        throw new Error("Missing DTD attribute type");
-      }
-      if (!defaultValueType) {
-        throw new Error("Missing DTD attribute default");
-      }
-      if (defaultValueType.indexOf('#') !== 0) {
-        defaultValueType = '#' + defaultValueType;
-      }
-      if (!defaultValueType.match(/^(#REQUIRED|#IMPLIED|#FIXED|#DEFAULT)$/)) {
-        throw new Error("Invalid default value type; expected: #REQUIRED, #IMPLIED, #FIXED or #DEFAULT");
-      }
-      if (defaultValue && !defaultValueType.match(/^(#FIXED|#DEFAULT)$/)) {
-        throw new Error("Default value only applies to #FIXED or #DEFAULT");
-      }
-      this.elementName = this.stringify.eleName(elementName);
-      this.attributeName = this.stringify.attName(attributeName);
-      this.attributeType = this.stringify.dtdAttType(attributeType);
-      this.defaultValue = this.stringify.dtdAttDefault(defaultValue);
-      this.defaultValueType = defaultValueType;
-    }
-
-    XMLDTDAttList.prototype.clone = function() {
-      return _.create(XMLDTDAttList.prototype, this);
-    };
-
-    XMLDTDAttList.prototype.toString = function(options, level) {
-      var indent, newline, pretty, r, space;
-      pretty = (options != null ? options.pretty : void 0) || false;
-      indent = (options != null ? options.indent : void 0) || '  ';
-      newline = (options != null ? options.newline : void 0) || '\n';
-      level || (level = 0);
-      space = new Array(level + 1).join(indent);
-      r = '';
-      if (pretty) {
-        r += space;
-      }
-      r += '<!ATTLIST ' + this.elementName + ' ' + this.attributeName + ' ' + this.attributeType;
-      if (this.defaultValueType !== '#DEFAULT') {
-        r += ' ' + this.defaultValueType;
-      }
-      if (this.defaultValue) {
-        r += ' "' + this.defaultValue + '"';
-      }
-      r += '>';
-      if (pretty) {
-        r += newline;
-      }
-      return r;
-    };
-
-    return XMLDTDAttList;
-
-  })();
-
-}).call(this);
-
-},{"lodash-node":100}],15:[function(require,module,exports){
-// Generated by CoffeeScript 1.6.3
-(function() {
-  var XMLDTDElement, _;
-
-  _ = require('lodash-node');
-
-  module.exports = XMLDTDElement = (function() {
-    function XMLDTDElement(parent, name, value) {
-      this.stringify = parent.stringify;
-      if (name == null) {
-        throw new Error("Missing DTD element name");
-      }
-      if (!value) {
-        value = '(#PCDATA)';
-      }
-      if (_.isArray(value)) {
-        value = '(' + value.join(',') + ')';
-      }
-      this.name = this.stringify.eleName(name);
-      this.value = this.stringify.dtdElementValue(value);
-    }
-
-    XMLDTDElement.prototype.clone = function() {
-      return _.create(XMLDTDElement.prototype, this);
-    };
-
-    XMLDTDElement.prototype.toString = function(options, level) {
-      var indent, newline, pretty, r, space;
-      pretty = (options != null ? options.pretty : void 0) || false;
-      indent = (options != null ? options.indent : void 0) || '  ';
-      newline = (options != null ? options.newline : void 0) || '\n';
-      level || (level = 0);
-      space = new Array(level + 1).join(indent);
-      r = '';
-      if (pretty) {
-        r += space;
-      }
-      r += '<!ELEMENT ' + this.name + ' ' + this.value + '>';
-      if (pretty) {
-        r += newline;
-      }
-      return r;
-    };
-
-    return XMLDTDElement;
-
-  })();
-
-}).call(this);
-
-},{"lodash-node":100}],16:[function(require,module,exports){
-// Generated by CoffeeScript 1.6.3
-(function() {
-  var XMLDTDEntity, _;
-
-  _ = require('lodash-node');
-
-  module.exports = XMLDTDEntity = (function() {
-    function XMLDTDEntity(parent, pe, name, value) {
-      this.stringify = parent.stringify;
-      if (name == null) {
-        throw new Error("Missing entity name");
-      }
-      if (value == null) {
-        throw new Error("Missing entity value");
-      }
-      this.pe = !!pe;
-      this.name = this.stringify.eleName(name);
-      if (!_.isObject(value)) {
-        this.value = this.stringify.dtdEntityValue(value);
-      } else {
-        if (!value.pubID && !value.sysID) {
-          throw new Error("Public and/or system identifiers are required for an external entity");
-        }
-        if (value.pubID && !value.sysID) {
-          throw new Error("System identifier is required for a public external entity");
-        }
-        if (value.pubID != null) {
-          this.pubID = this.stringify.dtdPubID(value.pubID);
-        }
-        if (value.sysID != null) {
-          this.sysID = this.stringify.dtdSysID(value.sysID);
-        }
-        if (value.nData != null) {
-          this.nData = this.stringify.dtdNData(value.nData);
-        }
-        if (this.pe && this.nData) {
-          throw new Error("Notation declaration is not allowed in a parameter entity");
-        }
-      }
-    }
-
-    XMLDTDEntity.prototype.clone = function() {
-      return _.create(XMLDTDEntity.prototype, this);
-    };
-
-    XMLDTDEntity.prototype.toString = function(options, level) {
-      var indent, newline, pretty, r, space;
-      pretty = (options != null ? options.pretty : void 0) || false;
-      indent = (options != null ? options.indent : void 0) || '  ';
-      newline = (options != null ? options.newline : void 0) || '\n';
-      level || (level = 0);
-      space = new Array(level + 1).join(indent);
-      r = '';
-      if (pretty) {
-        r += space;
-      }
-      r += '<!ENTITY';
-      if (this.pe) {
-        r += ' %';
-      }
-      r += ' ' + this.name;
-      if (this.value) {
-        r += ' "' + this.value + '"';
-      } else {
-        if (this.pubID && this.sysID) {
-          r += ' PUBLIC "' + this.pubID + '" "' + this.sysID + '"';
-        } else if (this.sysID) {
-          r += ' SYSTEM "' + this.sysID + '"';
-        }
-        if (this.nData) {
-          r += ' NDATA ' + this.nData;
-        }
-      }
-      r += '>';
-      if (pretty) {
-        r += newline;
-      }
-      return r;
-    };
-
-    return XMLDTDEntity;
-
-  })();
-
-}).call(this);
-
-},{"lodash-node":100}],17:[function(require,module,exports){
-// Generated by CoffeeScript 1.6.3
-(function() {
-  var XMLDTDNotation, _;
-
-  _ = require('lodash-node');
-
-  module.exports = XMLDTDNotation = (function() {
-    function XMLDTDNotation(parent, name, value) {
-      this.stringify = parent.stringify;
-      if (name == null) {
-        throw new Error("Missing notation name");
-      }
-      if (!value.pubID && !value.sysID) {
-        throw new Error("Public or system identifiers are required for an external entity");
-      }
-      this.name = this.stringify.eleName(name);
-      if (value.pubID != null) {
-        this.pubID = this.stringify.dtdPubID(value.pubID);
-      }
-      if (value.sysID != null) {
-        this.sysID = this.stringify.dtdSysID(value.sysID);
-      }
-    }
-
-    XMLDTDNotation.prototype.clone = function() {
-      return _.create(XMLDTDNotation.prototype, this);
-    };
-
-    XMLDTDNotation.prototype.toString = function(options, level) {
-      var indent, newline, pretty, r, space;
-      pretty = (options != null ? options.pretty : void 0) || false;
-      indent = (options != null ? options.indent : void 0) || '  ';
-      newline = (options != null ? options.newline : void 0) || '\n';
-      level || (level = 0);
-      space = new Array(level + 1).join(indent);
-      r = '';
-      if (pretty) {
-        r += space;
-      }
-      r += '<!NOTATION ' + this.name;
-      if (this.pubID && this.sysID) {
-        r += ' PUBLIC "' + this.pubID + '" "' + this.sysID + '"';
-      } else if (this.pubID) {
-        r += ' PUBLIC "' + this.pubID + '"';
-      } else if (this.sysID) {
-        r += ' SYSTEM "' + this.sysID + '"';
-      }
-      r += '>';
-      if (pretty) {
-        r += newline;
-      }
-      return r;
-    };
-
-    return XMLDTDNotation;
-
-  })();
-
-}).call(this);
-
-},{"lodash-node":100}],18:[function(require,module,exports){
-// Generated by CoffeeScript 1.6.3
-(function() {
-  var XMLDeclaration, XMLNode, _,
-    __hasProp = {}.hasOwnProperty,
-    __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
-
-  _ = require('lodash-node');
-
-  XMLNode = require('./XMLNode');
-
-  module.exports = XMLDeclaration = (function(_super) {
-    __extends(XMLDeclaration, _super);
-
-    function XMLDeclaration(parent, version, encoding, standalone) {
-      var _ref;
-      XMLDeclaration.__super__.constructor.call(this, parent);
-      if (_.isObject(version)) {
-        _ref = version, version = _ref.version, encoding = _ref.encoding, standalone = _ref.standalone;
-      }
-      if (!version) {
-        version = '1.0';
-      }
-      if (version != null) {
-        this.version = this.stringify.xmlVersion(version);
-      }
-      if (encoding != null) {
-        this.encoding = this.stringify.xmlEncoding(encoding);
-      }
-      if (standalone != null) {
-        this.standalone = this.stringify.xmlStandalone(standalone);
-      }
-    }
-
-    XMLDeclaration.prototype.clone = function() {
-      return _.create(XMLDeclaration.prototype, this);
-    };
-
-    XMLDeclaration.prototype.toString = function(options, level) {
-      var indent, newline, pretty, r, space;
-      pretty = (options != null ? options.pretty : void 0) || false;
-      indent = (options != null ? options.indent : void 0) || '  ';
-      newline = (options != null ? options.newline : void 0) || '\n';
-      level || (level = 0);
-      space = new Array(level + 1).join(indent);
-      r = '';
-      if (pretty) {
-        r += space;
-      }
-      r += '<?xml';
-      if (this.version != null) {
-        r += ' version="' + this.version + '"';
-      }
-      if (this.encoding != null) {
-        r += ' encoding="' + this.encoding + '"';
-      }
-      if (this.standalone != null) {
-        r += ' standalone="' + this.standalone + '"';
-      }
-      r += '?>';
-      if (pretty) {
-        r += newline;
-      }
-      return r;
-    };
-
-    return XMLDeclaration;
-
-  })(XMLNode);
-
-}).call(this);
-
-},{"./XMLNode":21,"lodash-node":100}],19:[function(require,module,exports){
-// Generated by CoffeeScript 1.6.3
-(function() {
-  var XMLDocType, _;
-
-  _ = require('lodash-node');
-
-  module.exports = XMLDocType = (function() {
-    function XMLDocType(parent, pubID, sysID) {
-      var _ref, _ref1;
-      this.documentObject = parent;
-      this.stringify = this.documentObject.stringify;
-      this.children = [];
-      if (_.isObject(pubID)) {
-        _ref = pubID, pubID = _ref.pubID, sysID = _ref.sysID;
-      }
-      if (sysID == null) {
-        _ref1 = [pubID, sysID], sysID = _ref1[0], pubID = _ref1[1];
-      }
-      if (pubID != null) {
-        this.pubID = this.stringify.dtdPubID(pubID);
-      }
-      if (sysID != null) {
-        this.sysID = this.stringify.dtdSysID(sysID);
-      }
-    }
-
-    XMLDocType.prototype.clone = function() {
-      return _.create(XMLDocType.prototype, this);
-    };
-
-    XMLDocType.prototype.element = function(name, value) {
-      var XMLDTDElement, child;
-      XMLDTDElement = require('./XMLDTDElement');
-      child = new XMLDTDElement(this, name, value);
-      this.children.push(child);
-      return this;
-    };
-
-    XMLDocType.prototype.attList = function(elementName, attributeName, attributeType, defaultValueType, defaultValue) {
-      var XMLDTDAttList, child;
-      XMLDTDAttList = require('./XMLDTDAttList');
-      child = new XMLDTDAttList(this, elementName, attributeName, attributeType, defaultValueType, defaultValue);
-      this.children.push(child);
-      return this;
-    };
-
-    XMLDocType.prototype.entity = function(name, value) {
-      var XMLDTDEntity, child;
-      XMLDTDEntity = require('./XMLDTDEntity');
-      child = new XMLDTDEntity(this, false, name, value);
-      this.children.push(child);
-      return this;
-    };
-
-    XMLDocType.prototype.pEntity = function(name, value) {
-      var XMLDTDEntity, child;
-      XMLDTDEntity = require('./XMLDTDEntity');
-      child = new XMLDTDEntity(this, true, name, value);
-      this.children.push(child);
-      return this;
-    };
-
-    XMLDocType.prototype.notation = function(name, value) {
-      var XMLDTDNotation, child;
-      XMLDTDNotation = require('./XMLDTDNotation');
-      child = new XMLDTDNotation(this, name, value);
-      this.children.push(child);
-      return this;
-    };
-
-    XMLDocType.prototype.cdata = function(value) {
-      var XMLCData, child;
-      XMLCData = require('./XMLCData');
-      child = new XMLCData(this, value);
-      this.children.push(child);
-      return this;
-    };
-
-    XMLDocType.prototype.comment = function(value) {
-      var XMLComment, child;
-      XMLComment = require('./XMLComment');
-      child = new XMLComment(this, value);
-      this.children.push(child);
-      return this;
-    };
-
-    XMLDocType.prototype.instruction = function(target, value) {
-      var XMLProcessingInstruction, child;
-      XMLProcessingInstruction = require('./XMLProcessingInstruction');
-      child = new XMLProcessingInstruction(this, target, value);
-      this.children.push(child);
-      return this;
-    };
-
-    XMLDocType.prototype.root = function() {
-      return this.documentObject.root();
-    };
-
-    XMLDocType.prototype.document = function() {
-      return this.documentObject;
-    };
-
-    XMLDocType.prototype.toString = function(options, level) {
-      var child, indent, newline, pretty, r, space, _i, _len, _ref;
-      pretty = (options != null ? options.pretty : void 0) || false;
-      indent = (options != null ? options.indent : void 0) || '  ';
-      newline = (options != null ? options.newline : void 0) || '\n';
-      level || (level = 0);
-      space = new Array(level + 1).join(indent);
-      r = '';
-      if (pretty) {
-        r += space;
-      }
-      r += '<!DOCTYPE ' + this.root().name;
-      if (this.pubID && this.sysID) {
-        r += ' PUBLIC "' + this.pubID + '" "' + this.sysID + '"';
-      } else if (this.sysID) {
-        r += ' SYSTEM "' + this.sysID + '"';
-      }
-      if (this.children.length > 0) {
-        r += ' [';
-        if (pretty) {
-          r += newline;
-        }
-        _ref = this.children;
-        for (_i = 0, _len = _ref.length; _i < _len; _i++) {
-          child = _ref[_i];
-          r += child.toString(options, level + 1);
-        }
-        r += ']';
-      }
-      r += '>';
-      if (pretty) {
-        r += newline;
-      }
-      return r;
-    };
-
-    XMLDocType.prototype.ele = function(name, value) {
-      return this.element(name, value);
-    };
-
-    XMLDocType.prototype.att = function(elementName, attributeName, attributeType, defaultValueType, defaultValue) {
-      return this.attList(elementName, attributeName, attributeType, defaultValueType, defaultValue);
-    };
-
-    XMLDocType.prototype.ent = function(name, value) {
-      return this.entity(name, value);
-    };
-
-    XMLDocType.prototype.pent = function(name, value) {
-      return this.pEntity(name, value);
-    };
-
-    XMLDocType.prototype.not = function(name, value) {
-      return this.notation(name, value);
-    };
-
-    XMLDocType.prototype.dat = function(value) {
-      return this.cdata(value);
-    };
-
-    XMLDocType.prototype.com = function(value) {
-      return this.comment(value);
-    };
-
-    XMLDocType.prototype.ins = function(target, value) {
-      return this.instruction(target, value);
-    };
-
-    XMLDocType.prototype.up = function() {
-      return this.root();
-    };
-
-    XMLDocType.prototype.doc = function() {
-      return this.document();
-    };
-
-    return XMLDocType;
-
-  })();
-
-}).call(this);
-
-},{"./XMLCData":12,"./XMLComment":13,"./XMLDTDAttList":14,"./XMLDTDElement":15,"./XMLDTDEntity":16,"./XMLDTDNotation":17,"./XMLProcessingInstruction":22,"lodash-node":100}],20:[function(require,module,exports){
-// Generated by CoffeeScript 1.6.3
-(function() {
-  var XMLAttribute, XMLElement, XMLNode, XMLProcessingInstruction, _,
-    __hasProp = {}.hasOwnProperty,
-    __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
-
-  _ = require('lodash-node');
-
-  XMLNode = require('./XMLNode');
-
-  XMLAttribute = require('./XMLAttribute');
-
-  XMLProcessingInstruction = require('./XMLProcessingInstruction');
-
-  module.exports = XMLElement = (function(_super) {
-    __extends(XMLElement, _super);
-
-    function XMLElement(parent, name, attributes) {
-      XMLElement.__super__.constructor.call(this, parent);
-      if (name == null) {
-        throw new Error("Missing element name");
-      }
-      this.name = this.stringify.eleName(name);
-      this.children = [];
-      this.instructions = [];
-      this.attributes = {};
-      if (attributes != null) {
-        this.attribute(attributes);
-      }
-    }
-
-    XMLElement.prototype.clone = function() {
-      var att, attName, clonedSelf, pi, _i, _len, _ref, _ref1;
-      clonedSelf = _.create(XMLElement.prototype, this);
-      clonedSelf.attributes = {};
-      _ref = this.attributes;
-      for (attName in _ref) {
-        if (!__hasProp.call(_ref, attName)) continue;
-        att = _ref[attName];
-        clonedSelf.attributes[attName] = att.clone();
-      }
-      clonedSelf.instructions = [];
-      _ref1 = this.instructions;
-      for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
-        pi = _ref1[_i];
-        clonedSelf.instructions.push(pi.clone());
-      }
-      clonedSelf.children = [];
-      this.children.forEach(function(child) {
-        var clonedChild;
-        clonedChild = child.clone();
-        clonedChild.parent = clonedSelf;
-        return clonedSelf.children.push(clonedChild);
-      });
-      return clonedSelf;
-    };
-
-    XMLElement.prototype.attribute = function(name, value) {
-      var attName, attValue;
-      if (_.isObject(name)) {
-        for (attName in name) {
-          if (!__hasProp.call(name, attName)) continue;
-          attValue = name[attName];
-          this.attribute(attName, attValue);
-        }
-      } else {
-        if (_.isFunction(value)) {
-          value = value.apply();
-        }
-        if (!this.options.skipNullAttributes || (value != null)) {
-          this.attributes[name] = new XMLAttribute(this, name, value);
-        }
-      }
-      return this;
-    };
-
-    XMLElement.prototype.removeAttribute = function(name) {
-      var attName, _i, _len;
-      if (name == null) {
-        throw new Error("Missing attribute name");
-      }
-      if (_.isArray(name)) {
-        for (_i = 0, _len = name.length; _i < _len; _i++) {
-          attName = name[_i];
-          delete this.attributes[attName];
-        }
-      } else {
-        delete this.attributes[name];
-      }
-      return this;
-    };
-
-    XMLElement.prototype.instruction = function(target, value) {
-      var insTarget, insValue, instruction, _i, _len;
-      if (_.isArray(target)) {
-        for (_i = 0, _len = target.length; _i < _len; _i++) {
-          insTarget = target[_i];
-          this.instruction(insTarget);
-        }
-      } else if (_.isObject(target)) {
-        for (insTarget in target) {
-          if (!__hasProp.call(target, insTarget)) continue;
-          insValue = target[insTarget];
-          this.instruction(insTarget, insValue);
-        }
-      } else {
-        if (_.isFunction(value)) {
-          value = value.apply();
-        }
-        instruction = new XMLProcessingInstruction(this, target, value);
-        this.instructions.push(instruction);
-      }
-      return this;
-    };
-
-    XMLElement.prototype.toString = function(options, level) {
-      var att, child, indent, instruction, name, newline, pretty, r, space, _i, _j, _len, _len1, _ref, _ref1, _ref2;
-      pretty = (options != null ? options.pretty : void 0) || false;
-      indent = (options != null ? options.indent : void 0) || '  ';
-      newline = (options != null ? options.newline : void 0) || '\n';
-      level || (level = 0);
-      space = new Array(level + 1).join(indent);
-      r = '';
-      _ref = this.instructions;
-      for (_i = 0, _len = _ref.length; _i < _len; _i++) {
-        instruction = _ref[_i];
-        r += instruction.toString(options, level + 1);
-      }
-      if (pretty) {
-        r += space;
-      }
-      r += '<' + this.name;
-      _ref1 = this.attributes;
-      for (name in _ref1) {
-        if (!__hasProp.call(_ref1, name)) continue;
-        att = _ref1[name];
-        r += att.toString(options);
-      }
-      if (this.children.length === 0) {
-        r += '/>';
-        if (pretty) {
-          r += newline;
-        }
-      } else if (pretty && this.children.length === 1 && (this.children[0].value != null)) {
-        r += '>';
-        r += this.children[0].value;
-        r += '</' + this.name + '>';
-        r += newline;
-      } else {
-        r += '>';
-        if (pretty) {
-          r += newline;
-        }
-        _ref2 = this.children;
-        for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) {
-          child = _ref2[_j];
-          r += child.toString(options, level + 1);
-        }
-        if (pretty) {
-          r += space;
-        }
-        r += '</' + this.name + '>';
-        if (pretty) {
-          r += newline;
-        }
-      }
-      return r;
-    };
-
-    XMLElement.prototype.att = function(name, value) {
-      return this.attribute(name, value);
-    };
-
-    XMLElement.prototype.ins = function(target, value) {
-      return this.instruction(target, value);
-    };
-
-    XMLElement.prototype.a = function(name, value) {
-      return this.attribute(name, value);
-    };
-
-    XMLElement.prototype.i = function(target, value) {
-      return this.instruction(target, value);
-    };
-
-    return XMLElement;
-
-  })(XMLNode);
-
-}).call(this);
-
-},{"./XMLAttribute":10,"./XMLNode":21,"./XMLProcessingInstruction":22,"lodash-node":100}],21:[function(require,module,exports){
-// Generated by CoffeeScript 1.6.3
-(function() {
-  var XMLNode, _,
-    __hasProp = {}.hasOwnProperty;
-
-  _ = require('lodash-node');
-
-  module.exports = XMLNode = (function() {
-    function XMLNode(parent) {
-      this.parent = parent;
-      this.options = this.parent.options;
-      this.stringify = this.parent.stringify;
-    }
-
-    XMLNode.prototype.clone = function() {
-      throw new Error("Cannot clone generic XMLNode");
-    };
-
-    XMLNode.prototype.element = function(name, attributes, text) {
-      var item, key, lastChild, val, _i, _len, _ref;
-      lastChild = null;
-      if (attributes == null) {
-        attributes = {};
-      }
-      if (!_.isObject(attributes)) {
-        _ref = [attributes, text], text = _ref[0], attributes = _ref[1];
-      }
-      if (_.isArray(name)) {
-        for (_i = 0, _len = name.length; _i < _len; _i++) {
-          item = name[_i];
-          lastChild = this.element(item);
-        }
-      } else if (_.isFunction(name)) {
-        lastChild = this.element(name.apply());
-      } else if (_.isObject(name)) {
-        for (key in name) {
-          if (!__hasProp.call(name, key)) continue;
-          val = name[key];
-          if (!(val != null)) {
-            continue;
-          }
-          if (_.isFunction(val)) {
-            val = val.apply();
-          }
-          if (!this.options.ignoreDecorators && this.stringify.convertAttKey && key.indexOf(this.stringify.convertAttKey) === 0) {
-            lastChild = this.attribute(key.substr(this.stringify.convertAttKey.length), val);
-          } else if (!this.options.ignoreDecorators && this.stringify.convertPIKey && key.indexOf(this.stringify.convertPIKey) === 0) {
-            lastChild = this.instruction(key.substr(this.stringify.convertPIKey.length), val);
-          } else if (_.isObject(val)) {
-            if (!this.options.ignoreDecorators && this.stringify.convertListKey && key.indexOf(this.stringify.convertListKey) === 0 && _.isArray(val)) {
-              lastChild = this.element(val);
-            } else {
-              lastChild = this.element(key);
-              lastChild.element(val);
-            }
-          } else {
-            lastChild = this.element(key, val);
-          }
-        }
-      } else {
-        if (!this.options.ignoreDecorators && this.stringify.convertTextKey && name.indexOf(this.stringify.convertTextKey) === 0) {
-          lastChild = this.text(text);
-        } else if (!this.options.ignoreDecorators && this.stringify.convertCDataKey && name.indexOf(this.stringify.convertCDataKey) === 0) {
-          lastChild = this.cdata(text);
-        } else if (!this.options.ignoreDecorators && this.stringify.convertCommentKey && name.indexOf(this.stringify.convertCommentKey) === 0) {
-          lastChild = this.comment(text);
-        } else if (!this.options.ignoreDecorators && this.stringify.convertRawKey && name.indexOf(this.stringify.convertRawKey) === 0) {
-          lastChild = this.raw(text);
-        } else {
-          lastChild = this.node(name, attributes, text);
-        }
-      }
-      if (lastChild == null) {
-        throw new Error("Could not create any elements with: " + name);
-      }
-      return lastChild;
-    };
-
-    XMLNode.prototype.insertBefore = function(name, attributes, text) {
-      var child, i, removed;
-      if (this.isRoot) {
-        throw new Error("Cannot insert elements at root level");
-      }
-      i = this.parent.children.indexOf(this);
-      removed = this.parent.children.splice(i);
-      child = this.parent.element(name, attributes, text);
-      Array.prototype.push.apply(this.parent.children, removed);
-      return child;
-    };
-
-    XMLNode.prototype.insertAfter = function(name, attributes, text) {
-      var child, i, removed;
-      if (this.isRoot) {
-        throw new Error("Cannot insert elements at root level");
-      }
-      i = this.parent.children.indexOf(this);
-      removed = this.parent.children.splice(i + 1);
-      child = this.parent.element(name, attributes, text);
-      Array.prototype.push.apply(this.parent.children, removed);
-      return child;
-    };
-
-    XMLNode.prototype.remove = function() {
-      var i, _ref;
-      if (this.isRoot) {
-        throw new Error("Cannot remove the root element");
-      }
-      i = this.parent.children.indexOf(this);
-      [].splice.apply(this.parent.children, [i, i - i + 1].concat(_ref = [])), _ref;
-      return this.parent;
-    };
-
-    XMLNode.prototype.node = function(name, attributes, text) {
-      var XMLElement, child, _ref;
-      if (attributes == null) {
-        attributes = {};
-      }
-      if (!_.isObject(attributes)) {
-        _ref = [attributes, text], text = _ref[0], attributes = _ref[1];
-      }
-      XMLElement = require('./XMLElement');
-      child = new XMLElement(this, name, attributes);
-      if (text != null) {
-        child.text(text);
-      }
-      this.children.push(child);
-      return child;
-    };
-
-    XMLNode.prototype.text = function(value) {
-      var XMLText, child;
-      XMLText = require('./XMLText');
-      child = new XMLText(this, value);
-      this.children.push(child);
-      return this;
-    };
-
-    XMLNode.prototype.cdata = function(value) {
-      var XMLCData, child;
-      XMLCData = require('./XMLCData');
-      child = new XMLCData(this, value);
-      this.children.push(child);
-      return this;
-    };
-
-    XMLNode.prototype.comment = function(value) {
-      var XMLComment, child;
-      XMLComment = require('./XMLComment');
-      child = new XMLComment(this, value);
-      this.children.push(child);
-      return this;
-    };
-
-    XMLNode.prototype.raw = function(value) {
-      var XMLRaw, child;
-      XMLRaw = require('./XMLRaw');
-      child = new XMLRaw(this, value);
-      this.children.push(child);
-      return this;
-    };
-
-    XMLNode.prototype.declaration = function(version, encoding, standalone) {
-      var XMLDeclaration, doc, xmldec;
-      doc = this.document();
-      XMLDeclaration = require('./XMLDeclaration');
-      xmldec = new XMLDeclaration(doc, version, encoding, standalone);
-      doc.xmldec = xmldec;
-      return doc.root();
-    };
-
-    XMLNode.prototype.doctype = function(pubID, sysID) {
-      var XMLDocType, doc, doctype;
-      doc = this.document();
-      XMLDocType = require('./XMLDocType');
-      doctype = new XMLDocType(doc, pubID, sysID);
-      doc.doctype = doctype;
-      return doctype;
-    };
-
-    XMLNode.prototype.up = function() {
-      if (this.isRoot) {
-        throw new Error("The root node has no parent. Use doc() if you need to get the document object.");
-      }
-      return this.parent;
-    };
-
-    XMLNode.prototype.root = function() {
-      var child;
-      if (this.isRoot) {
-        return this;
-      }
-      child = this.parent;
-      while (!child.isRoot) {
-        child = child.parent;
-      }
-      return child;
-    };
-
-    XMLNode.prototype.document = function() {
-      return this.root().documentObject;
-    };
-
-    XMLNode.prototype.end = function(options) {
-      return this.document().toString(options);
-    };
-
-    XMLNode.prototype.prev = function() {
-      var i;
-      if (this.isRoot) {
-        throw new Error("Root node has no siblings");
-      }
-      i = this.parent.children.indexOf(this);
-      if (i < 1) {
-        throw new Error("Already at the first node");
-      }
-      return this.parent.children[i - 1];
-    };
-
-    XMLNode.prototype.next = function() {
-      var i;
-      if (this.isRoot) {
-        throw new Error("Root node has no siblings");
-      }
-      i = this.parent.children.indexOf(this);
-      if (i === -1 || i === this.parent.children.length - 1) {
-        throw new Error("Already at the last node");
-      }
-      return this.parent.children[i + 1];
-    };
-
-    XMLNode.prototype.importXMLBuilder = function(xmlbuilder) {
-      var clonedRoot;
-      clonedRoot = xmlbuilder.root().clone();
-      clonedRoot.parent = this;
-      clonedRoot.isRoot = false;
-      this.children.push(clonedRoot);
-      return this;
-    };
-
-    XMLNode.prototype.ele = function(name, attributes, text) {
-      return this.element(name, attributes, text);
-    };
-
-    XMLNode.prototype.nod = function(name, attributes, text) {
-      return this.node(name, attributes, text);
-    };
-
-    XMLNode.prototype.txt = function(value) {
-      return this.text(value);
-    };
-
-    XMLNode.prototype.dat = function(value) {
-      return this.cdata(value);
-    };
-
-    XMLNode.prototype.com = function(value) {
-      return this.comment(value);
-    };
-
-    XMLNode.prototype.doc = function() {
-      return this.document();
-    };
-
-    XMLNode.prototype.dec = function(version, encoding, standalone) {
-      return this.declaration(version, encoding, standalone);
-    };
-
-    XMLNode.prototype.dtd = function(pubID, sysID) {
-      return this.doctype(pubID, sysID);
-    };
-
-    XMLNode.prototype.e = function(name, attributes, text) {
-      return this.element(name, attributes, text);
-    };
-
-    XMLNode.prototype.n = function(name, attributes, text) {
-      return this.node(name, attributes, text);
-    };
-
-    XMLNode.prototype.t = function(value) {
-      return this.text(value);
-    };
-
-    XMLNode.prototype.d = function(value) {
-      return this.cdata(value);
-    };
-
-    XMLNode.prototype.c = function(value) {
-      return this.comment(value);
-    };
-
-    XMLNode.prototype.r = function(value) {
-      return this.raw(value);
-    };
-
-    XMLNode.prototype.u = function() {
-      return this.up();
-    };
-
-    return XMLNode;
-
-  })();
-
-}).call(this);
-
-},{"./XMLCData":12,"./XMLComment":13,"./XMLDeclaration":18,"./XMLDocType":19,"./XMLElement":20,"./XMLRaw":23,"./XMLText":25,"lodash-node":100}],22:[function(require,module,exports){
-// Generated by CoffeeScript 1.6.3
-(function() {
-  var XMLProcessingInstruction, _;
-
-  _ = require('lodash-node');
-
-  module.exports = XMLProcessingInstruction = (function() {
-    function XMLProcessingInstruction(parent, target, value) {
-      this.stringify = parent.stringify;
-      if (target == null) {
-        throw new Error("Missing instruction target");
-      }
-      this.target = this.stringify.insTarget(target);
-      if (value) {
-        this.value = this.stringify.insValue(value);
-      }
-    }
-
-    XMLProcessingInstruction.prototype.clone = function() {
-      return _.create(XMLProcessingInstruction.prototype, this);
-    };
-
-    XMLProcessingInstruction.prototype.toString = function(options, level) {
-      var indent, newline, pretty, r, space;
-      pretty = (options != null ? options.pretty : void 0) || false;
-      indent = (options != null ? options.indent : void 0) || '  ';
-      newline = (options != null ? options.newline : void 0) || '\n';
-      level || (level = 0);
-      space = new Array(level + 1).join(indent);
-      r = '';
-      if (pretty) {
-        r += space;
-      }
-      r += '<?';
-      r += this.target;
-      if (this.value) {
-        r += ' ' + this.value;
-      }
-      r += '?>';
-      if (pretty) {
-        r += newline;
-      }
-      return r;
-    };
-
-    return XMLProcessingInstruction;
-
-  })();
-
-}).call(this);
-
-},{"lodash-node":100}],23:[function(require,module,exports){
-// Generated by CoffeeScript 1.6.3
-(function() {
-  var XMLNode, XMLRaw, _,
-    __hasProp = {}.hasOwnProperty,
-    __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
-
-  _ = require('lodash-node');
-
-  XMLNode = require('./XMLNode');
-
-  module.exports = XMLRaw = (function(_super) {
-    __extends(XMLRaw, _super);
-
-    function XMLRaw(parent, text) {
-      XMLRaw.__super__.constructor.call(this, parent);
-      if (text == null) {
-        throw new Error("Missing raw text");
-      }
-      this.value = this.stringify.raw(text);
-    }
-
-    XMLRaw.prototype.clone = function() {
-      return _.create(XMLRaw.prototype, this);
-    };
-
-    XMLRaw.prototype.toString = function(options, level) {
-      var indent, newline, pretty, r, space;
-      pretty = (options != null ? options.pretty : void 0) || false;
-      indent = (options != null ? options.indent : void 0) || '  ';
-      newline = (options != null ? options.newline : void 0) || '\n';
-      level || (level = 0);
-      space = new Array(level + 1).join(indent);
-      r = '';
-      if (pretty) {
-        r += space;
-      }
-      r += this.value;
-      if (pretty) {
-        r += newline;
-      }
-      return r;
-    };
-
-    return XMLRaw;
-
-  })(XMLNode);
-
-}).call(this);
-
-},{"./XMLNode":21,"lodash-node":100}],24:[function(require,module,exports){
-// Generated by CoffeeScript 1.6.3
-(function() {
-  var XMLStringifier,
-    __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },
-    __hasProp = {}.hasOwnProperty;
-
-  module.exports = XMLStringifier = (function() {
-    function XMLStringifier(options) {
-      this.assertLegalChar = __bind(this.assertLegalChar, this);
-      var key, value, _ref;
-      this.allowSurrogateChars = options != null ? options.allowSurrogateChars : void 0;
-      _ref = (options != null ? options.stringify : void 0) || {};
-      for (key in _ref) {
-        if (!__hasProp.call(_ref, key)) continue;
-        value = _ref[key];
-        this[key] = value;
-      }
-    }
-
-    XMLStringifier.prototype.eleName = function(val) {
-      val = '' + val || '';
-      return this.assertLegalChar(val);
-    };
-
-    XMLStringifier.prototype.eleText = function(val) {
-      val = '' + val || '';
-      return this.assertLegalChar(this.escape(val));
-    };
-
-    XMLStringifier.prototype.cdata = function(val) {
-      val = '' + val || '';
-      if (val.match(/]]>/)) {
-        throw new Error("Invalid CDATA text: " + val);
-      }
-      return this.assertLegalChar(val);
-    };
-
-    XMLStringifier.prototype.comment = function(val) {
-      val = '' + val || '';
-      if (val.match(/--/)) {
-        throw new Error("Comment text cannot contain double-hypen: " + val);
-      }
-      return this.assertLegalChar(this.escape(val));
-    };
-
-    XMLStringifier.prototype.raw = function(val) {
-      return '' + val || '';
-    };
-
-    XMLStringifier.prototype.attName = function(val) {
-      return '' + val || '';
-    };
-
-    XMLStringifier.prototype.attValue = function(val) {
-      val = '' + val || '';
-      return this.escape(val);
-    };
-
-    XMLStringifier.prototype.insTarget = function(val) {
-      return '' + val || '';
-    };
-
-    XMLStringifier.prototype.insValue = function(val) {
-      val = '' + val || '';
-      if (val.match(/\?>/)) {
-        throw new Error("Invalid processing instruction value: " + val);
-      }
-      return val;
-    };
-
-    XMLStringifier.prototype.xmlVersion = function(val) {
-      val = '' + val || '';
-      if (!val.match(/1\.[0-9]+/)) {
-        throw new Error("Invalid version number: " + val);
-      }
-      return val;
-    };
-
-    XMLStringifier.prototype.xmlEncoding = function(val) {
-      val = '' + val || '';
-      if (!val.match(/[A-Za-z](?:[A-Za-z0-9._-]|-)*/)) {
-        throw new Error("Invalid encoding: " + options.val);
-      }
-      return val;
-    };
-
-    XMLStringifier.prototype.xmlStandalone = function(val) {
-      if (val) {
-        return "yes";
-      } else {
-        return "no";
-      }
-    };
-
-    XMLStringifier.prototype.dtdPubID = function(val) {
-      return '' + val || '';
-    };
-
-    XMLStringifier.prototype.dtdSysID = function(val) {
-      return '' + val || '';
-    };
-
-    XMLStringifier.prototype.dtdElementValue = function(val) {
-      return '' + val || '';
-    };
-
-    XMLStringifier.prototype.dtdAttType = function(val) {
-      return '' + val || '';
-    };
-
-    XMLStringifier.prototype.dtdAttDefault = function(val) {
-      if (val != null) {
-        return '' + val || '';
-      } else {
-        return val;
-      }
-    };
-
-    XMLStringifier.prototype.dtdEntityValue = function(val) {
-      return '' + val || '';
-    };
-
-    XMLStringifier.prototype.dtdNData = function(val) {
-      return '' + val || '';
-    };
-
-    XMLStringifier.prototype.convertAttKey = '@';
-
-    XMLStringifier.prototype.convertPIKey = '?';
-
-    XMLStringifier.prototype.convertTextKey = '#text';
-
-    XMLStringifier.prototype.convertCDataKey = '#cdata';
-
-    XMLStringifier.prototype.convertCommentKey = '#comment';
-
-    XMLStringifier.prototype.convertRawKey = '#raw';
-
-    XMLStringifier.prototype.convertListKey = '#list';
-
-    XMLStringifier.prototype.assertLegalChar = function(str) {
-      var chars, chr;
-      if (this.allowSurrogateChars) {
-        chars = /[\u0000-\u0008\u000B-\u000C\u000E-\u001F\uFFFE-\uFFFF]/;
-      } else {
-        chars = /[\u0000-\u0008\u000B-\u000C\u000E-\u001F\uD800-\uDFFF\uFFFE-\uFFFF]/;
-      }
-      chr = str.match(chars);
-      if (chr) {
-        throw new Error("Invalid character (" + chr + ") in string: " + str + " at index " + chr.index);
-      }
-      return str;
-    };
-
-    XMLStringifier.prototype.escape = function(str) {
-      return str.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/'/g, '&apos;').replace(/"/g, '&quot;');
-    };
-
-    return XMLStringifier;
-
-  })();
-
-}).call(this);
-
-},{}],25:[function(require,module,exports){
-// Generated by CoffeeScript 1.6.3
-(function() {
-  var XMLNode, XMLText, _,
-    __hasProp = {}.hasOwnProperty,
-    __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
-
-  _ = require('lodash-node');
-
-  XMLNode = require('./XMLNode');
-
-  module.exports = XMLText = (function(_super) {
-    __extends(XMLText, _super);
-
-    function XMLText(parent, text) {
-      this.parent = parent;
-      XMLText.__super__.constructor.call(this, parent);
-      if (text == null) {
-        throw new Error("Missing element text");
-      }
-      this.value = this.stringify.eleText(text);
-    }
-
-    XMLText.prototype.clone = function() {
-      return _.create(XMLText.prototype, this);
-    };
-
-    XMLText.prototype.toString = function(options, level) {
-      var indent, newline, pretty, r, space;
-      pretty = (options != null ? options.pretty : void 0) || false;
-      indent = (options != null ? options.indent : void 0) || '  ';
-      newline = (options != null ? options.newline : void 0) || '\n';
-      level || (level = 0);
-      space = new Array(level + 1).join(indent);
-      r = '';
-      if (pretty) {
-        r += space;
-      }
-      r += this.value;
-      if (pretty) {
-        r += newline;
-      }
-      return r;
-    };
-
-    return XMLText;
-
-  })(XMLNode);
-
-}).call(this);
-
-},{"./XMLNode":21,"lodash-node":100}],26:[function(require,module,exports){
-// Generated by CoffeeScript 1.6.3
-(function() {
-  var XMLBuilder, _;
-
-  _ = require('lodash-node');
-
-  XMLBuilder = require('./XMLBuilder');
-
-  module.exports.create = function(name, xmldec, doctype, options) {
-    options = _.extend({}, xmldec, doctype, options);
-    return new XMLBuilder(name, options).root();
-  };
-
-}).call(this);
-
-},{"./XMLBuilder":11,"lodash-node":100}],27:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-module.exports = {
-  'compact': require('./arrays/compact'),
-  'difference': require('./arrays/difference'),
-  'drop': require('./arrays/rest'),
-  'findIndex': require('./arrays/findIndex'),
-  'findLastIndex': require('./arrays/findLastIndex'),
-  'first': require('./arrays/first'),
-  'flatten': require('./arrays/flatten'),
-  'head': require('./arrays/first'),
-  'indexOf': require('./arrays/indexOf'),
-  'initial': require('./arrays/initial'),
-  'intersection': require('./arrays/intersection'),
-  'last': require('./arrays/last'),
-  'lastIndexOf': require('./arrays/lastIndexOf'),
-  'object': require('./arrays/zipObject'),
-  'pull': require('./arrays/pull'),
-  'range': require('./arrays/range'),
-  'remove': require('./arrays/remove'),
-  'rest': require('./arrays/rest'),
-  'sortedIndex': require('./arrays/sortedIndex'),
-  'tail': require('./arrays/rest'),
-  'take': require('./arrays/first'),
-  'union': require('./arrays/union'),
-  'uniq': require('./arrays/uniq'),
-  'unique': require('./arrays/uniq'),
-  'unzip': require('./arrays/zip'),
-  'without': require('./arrays/without'),
-  'xor': require('./arrays/xor'),
-  'zip': require('./arrays/zip'),
-  'zipObject': require('./arrays/zipObject')
-};
-
-},{"./arrays/compact":28,"./arrays/difference":29,"./arrays/findIndex":30,"./arrays/findLastIndex":31,"./arrays/first":32,"./arrays/flatten":33,"./arrays/indexOf":34,"./arrays/initial":35,"./arrays/intersection":36,"./arrays/last":37,"./arrays/lastIndexOf":38,"./arrays/pull":39,"./arrays/range":40,"./arrays/remove":41,"./arrays/rest":42,"./arrays/sortedIndex":43,"./arrays/union":44,"./arrays/uniq":45,"./arrays/without":46,"./arrays/xor":47,"./arrays/zip":48,"./arrays/zipObject":49}],28:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * Creates an array with all falsey values removed. The values `false`, `null`,
- * `0`, `""`, `undefined`, and `NaN` are all falsey.
- *
- * @static
- * @memberOf _
- * @category Arrays
- * @param {Array} array The array to compact.
- * @returns {Array} Returns a new array of filtered values.
- * @example
- *
- * _.compact([0, 1, false, 2, '', 3]);
- * // => [1, 2, 3]
- */
-function compact(array) {
-  var index = -1,
-      length = array ? array.length : 0,
-      result = [];
-
-  while (++index < length) {
-    var value = array[index];
-    if (value) {
-      result.push(value);
-    }
-  }
-  return result;
-}
-
-module.exports = compact;
-
-},{}],29:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseDifference = require('../internals/baseDifference'),
-    baseFlatten = require('../internals/baseFlatten');
-
-/**
- * Creates an array excluding all values of the provided arrays using strict
- * equality for comparisons, i.e. `===`.
- *
- * @static
- * @memberOf _
- * @category Arrays
- * @param {Array} array The array to process.
- * @param {...Array} [values] The arrays of values to exclude.
- * @returns {Array} Returns a new array of filtered values.
- * @example
- *
- * _.difference([1, 2, 3, 4, 5], [5, 2, 10]);
- * // => [1, 3, 4]
- */
-function difference(array) {
-  return baseDifference(array, baseFlatten(arguments, true, true, 1));
-}
-
-module.exports = difference;
-
-},{"../internals/baseDifference":107,"../internals/baseFlatten":108}],30:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback');
-
-/**
- * This method is like `_.find` except that it returns the index of the first
- * element that passes the callback check, instead of the element itself.
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @category Arrays
- * @param {Array} array The array to search.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {number} Returns the index of the found element, else `-1`.
- * @example
- *
- * var characters = [
- *   { 'name': 'barney',  'age': 36, 'blocked': false },
- *   { 'name': 'fred',    'age': 40, 'blocked': true },
- *   { 'name': 'pebbles', 'age': 1,  'blocked': false }
- * ];
- *
- * _.findIndex(characters, function(chr) {
- *   return chr.age < 20;
- * });
- * // => 2
- *
- * // using "_.where" callback shorthand
- * _.findIndex(characters, { 'age': 36 });
- * // => 0
- *
- * // using "_.pluck" callback shorthand
- * _.findIndex(characters, 'blocked');
- * // => 1
- */
-function findIndex(array, callback, thisArg) {
-  var index = -1,
-      length = array ? array.length : 0;
-
-  callback = createCallback(callback, thisArg, 3);
-  while (++index < length) {
-    if (callback(array[index], index, array)) {
-      return index;
-    }
-  }
-  return -1;
-}
-
-module.exports = findIndex;
-
-},{"../functions/createCallback":89}],31:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback');
-
-/**
- * This method is like `_.findIndex` except that it iterates over elements
- * of a `collection` from right to left.
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @category Arrays
- * @param {Array} array The array to search.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {number} Returns the index of the found element, else `-1`.
- * @example
- *
- * var characters = [
- *   { 'name': 'barney',  'age': 36, 'blocked': true },
- *   { 'name': 'fred',    'age': 40, 'blocked': false },
- *   { 'name': 'pebbles', 'age': 1,  'blocked': true }
- * ];
- *
- * _.findLastIndex(characters, function(chr) {
- *   return chr.age > 30;
- * });
- * // => 1
- *
- * // using "_.where" callback shorthand
- * _.findLastIndex(characters, { 'age': 36 });
- * // => 0
- *
- * // using "_.pluck" callback shorthand
- * _.findLastIndex(characters, 'blocked');
- * // => 2
- */
-function findLastIndex(array, callback, thisArg) {
-  var length = array ? array.length : 0;
-  callback = createCallback(callback, thisArg, 3);
-  while (length--) {
-    if (callback(array[length], length, array)) {
-      return length;
-    }
-  }
-  return -1;
-}
-
-module.exports = findLastIndex;
-
-},{"../functions/createCallback":89}],32:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback'),
-    slice = require('../internals/slice');
-
-/* Native method shortcuts for methods with the same name as other `lodash` methods */
-var nativeMax = Math.max,
-    nativeMin = Math.min;
-
-/**
- * Gets the first element or first `n` elements of an array. If a callback
- * is provided elements at the beginning of the array are returned as long
- * as the callback returns truey. The callback is bound to `thisArg` and
- * invoked with three arguments; (value, index, array).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @alias head, take
- * @category Arrays
- * @param {Array} array The array to query.
- * @param {Function|Object|number|string} [callback] The function called
- *  per element or the number of elements to return. If a property name or
- *  object is provided it will be used to create a "_.pluck" or "_.where"
- *  style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {*} Returns the first element(s) of `array`.
- * @example
- *
- * _.first([1, 2, 3]);
- * // => 1
- *
- * _.first([1, 2, 3], 2);
- * // => [1, 2]
- *
- * _.first([1, 2, 3], function(num) {
- *   return num < 3;
- * });
- * // => [1, 2]
- *
- * var characters = [
- *   { 'name': 'barney',  'blocked': true,  'employer': 'slate' },
- *   { 'name': 'fred',    'blocked': false, 'employer': 'slate' },
- *   { 'name': 'pebbles', 'blocked': true,  'employer': 'na' }
- * ];
- *
- * // using "_.pluck" callback shorthand
- * _.first(characters, 'blocked');
- * // => [{ 'name': 'barney', 'blocked': true, 'employer': 'slate' }]
- *
- * // using "_.where" callback shorthand
- * _.pluck(_.first(characters, { 'employer': 'slate' }), 'name');
- * // => ['barney', 'fred']
- */
-function first(array, callback, thisArg) {
-  var n = 0,
-      length = array ? array.length : 0;
-
-  if (typeof callback != 'number' && callback != null) {
-    var index = -1;
-    callback = createCallback(callback, thisArg, 3);
-    while (++index < length && callback(array[index], index, array)) {
-      n++;
-    }
-  } else {
-    n = callback;
-    if (n == null || thisArg) {
-      return array ? array[0] : undefined;
-    }
-  }
-  return slice(array, 0, nativeMin(nativeMax(0, n), length));
-}
-
-module.exports = first;
-
-},{"../functions/createCallback":89,"../internals/slice":142}],33:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseFlatten = require('../internals/baseFlatten'),
-    map = require('../collections/map');
-
-/**
- * Flattens a nested array (the nesting can be to any depth). If `isShallow`
- * is truey, the array will only be flattened a single level. If a callback
- * is provided each element of the array is passed through the callback before
- * flattening. The callback is bound to `thisArg` and invoked with three
- * arguments; (value, index, array).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @category Arrays
- * @param {Array} array The array to flatten.
- * @param {boolean} [isShallow=false] A flag to restrict flattening to a single level.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Array} Returns a new flattened array.
- * @example
- *
- * _.flatten([1, [2], [3, [[4]]]]);
- * // => [1, 2, 3, 4];
- *
- * _.flatten([1, [2], [3, [[4]]]], true);
- * // => [1, 2, 3, [[4]]];
- *
- * var characters = [
- *   { 'name': 'barney', 'age': 30, 'pets': ['hoppy'] },
- *   { 'name': 'fred',   'age': 40, 'pets': ['baby puss', 'dino'] }
- * ];
- *
- * // using "_.pluck" callback shorthand
- * _.flatten(characters, 'pets');
- * // => ['hoppy', 'baby puss', 'dino']
- */
-function flatten(array, isShallow, callback, thisArg) {
-  // juggle arguments
-  if (typeof isShallow != 'boolean' && isShallow != null) {
-    thisArg = callback;
-    callback = (typeof isShallow != 'function' && thisArg && thisArg[isShallow] === array) ? null : isShallow;
-    isShallow = false;
-  }
-  if (callback != null) {
-    array = map(array, callback, thisArg);
-  }
-  return baseFlatten(array, isShallow);
-}
-
-module.exports = flatten;
-
-},{"../collections/map":69,"../internals/baseFlatten":108}],34:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseIndexOf = require('../internals/baseIndexOf'),
-    sortedIndex = require('./sortedIndex');
-
-/* Native method shortcuts for methods with the same name as other `lodash` methods */
-var nativeMax = Math.max;
-
-/**
- * Gets the index at which the first occurrence of `value` is found using
- * strict equality for comparisons, i.e. `===`. If the array is already sorted
- * providing `true` for `fromIndex` will run a faster binary search.
- *
- * @static
- * @memberOf _
- * @category Arrays
- * @param {Array} array The array to search.
- * @param {*} value The value to search for.
- * @param {boolean|number} [fromIndex=0] The index to search from or `true`
- *  to perform a binary search on a sorted array.
- * @returns {number} Returns the index of the matched value or `-1`.
- * @example
- *
- * _.indexOf([1, 2, 3, 1, 2, 3], 2);
- * // => 1
- *
- * _.indexOf([1, 2, 3, 1, 2, 3], 2, 3);
- * // => 4
- *
- * _.indexOf([1, 1, 2, 2, 3, 3], 2, true);
- * // => 2
- */
-function indexOf(array, value, fromIndex) {
-  if (typeof fromIndex == 'number') {
-    var length = array ? array.length : 0;
-    fromIndex = (fromIndex < 0 ? nativeMax(0, length + fromIndex) : fromIndex || 0);
-  } else if (fromIndex) {
-    var index = sortedIndex(array, value);
-    return array[index] === value ? index : -1;
-  }
-  return baseIndexOf(array, value, fromIndex);
-}
-
-module.exports = indexOf;
-
-},{"../internals/baseIndexOf":109,"./sortedIndex":43}],35:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback'),
-    slice = require('../internals/slice');
-
-/* Native method shortcuts for methods with the same name as other `lodash` methods */
-var nativeMax = Math.max,
-    nativeMin = Math.min;
-
-/**
- * Gets all but the last element or last `n` elements of an array. If a
- * callback is provided elements at the end of the array are excluded from
- * the result as long as the callback returns truey. The callback is bound
- * to `thisArg` and invoked with three arguments; (value, index, array).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @category Arrays
- * @param {Array} array The array to query.
- * @param {Function|Object|number|string} [callback=1] The function called
- *  per element or the number of elements to exclude. If a property name or
- *  object is provided it will be used to create a "_.pluck" or "_.where"
- *  style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Array} Returns a slice of `array`.
- * @example
- *
- * _.initial([1, 2, 3]);
- * // => [1, 2]
- *
- * _.initial([1, 2, 3], 2);
- * // => [1]
- *
- * _.initial([1, 2, 3], function(num) {
- *   return num > 1;
- * });
- * // => [1]
- *
- * var characters = [
- *   { 'name': 'barney',  'blocked': false, 'employer': 'slate' },
- *   { 'name': 'fred',    'blocked': true,  'employer': 'slate' },
- *   { 'name': 'pebbles', 'blocked': true,  'employer': 'na' }
- * ];
- *
- * // using "_.pluck" callback shorthand
- * _.initial(characters, 'blocked');
- * // => [{ 'name': 'barney',  'blocked': false, 'employer': 'slate' }]
- *
- * // using "_.where" callback shorthand
- * _.pluck(_.initial(characters, { 'employer': 'na' }), 'name');
- * // => ['barney', 'fred']
- */
-function initial(array, callback, thisArg) {
-  var n = 0,
-      length = array ? array.length : 0;
-
-  if (typeof callback != 'number' && callback != null) {
-    var index = length;
-    callback = createCallback(callback, thisArg, 3);
-    while (index-- && callback(array[index], index, array)) {
-      n++;
-    }
-  } else {
-    n = (callback == null || thisArg) ? 1 : callback || n;
-  }
-  return slice(array, 0, nativeMin(nativeMax(0, length - n), length));
-}
-
-module.exports = initial;
-
-},{"../functions/createCallback":89,"../internals/slice":142}],36:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseIndexOf = require('../internals/baseIndexOf'),
-    cacheIndexOf = require('../internals/cacheIndexOf'),
-    createCache = require('../internals/createCache'),
-    getArray = require('../internals/getArray'),
-    isArguments = require('../objects/isArguments'),
-    isArray = require('../objects/isArray'),
-    largeArraySize = require('../internals/largeArraySize'),
-    releaseArray = require('../internals/releaseArray'),
-    releaseObject = require('../internals/releaseObject');
-
-/**
- * Creates an array of unique values present in all provided arrays using
- * strict equality for comparisons, i.e. `===`.
- *
- * @static
- * @memberOf _
- * @category Arrays
- * @param {...Array} [array] The arrays to inspect.
- * @returns {Array} Returns an array of shared values.
- * @example
- *
- * _.intersection([1, 2, 3], [5, 2, 1, 4], [2, 1]);
- * // => [1, 2]
- */
-function intersection() {
-  var args = [],
-      argsIndex = -1,
-      argsLength = arguments.length,
-      caches = getArray(),
-      indexOf = baseIndexOf,
-      trustIndexOf = indexOf === baseIndexOf,
-      seen = getArray();
-
-  while (++argsIndex < argsLength) {
-    var value = arguments[argsIndex];
-    if (isArray(value) || isArguments(value)) {
-      args.push(value);
-      caches.push(trustIndexOf && value.length >= largeArraySize &&
-        createCache(argsIndex ? args[argsIndex] : seen));
-    }
-  }
-  var array = args[0],
-      index = -1,
-      length = array ? array.length : 0,
-      result = [];
-
-  outer:
-  while (++index < length) {
-    var cache = caches[0];
-    value = array[index];
-
-    if ((cache ? cacheIndexOf(cache, value) : indexOf(seen, value)) < 0) {
-      argsIndex = argsLength;
-      (cache || seen).push(value);
-      while (--argsIndex) {
-        cache = caches[argsIndex];
-        if ((cache ? cacheIndexOf(cache, value) : indexOf(args[argsIndex], value)) < 0) {
-          continue outer;
-        }
-      }
-      result.push(value);
-    }
-  }
-  while (argsLength--) {
-    cache = caches[argsLength];
-    if (cache) {
-      releaseObject(cache);
-    }
-  }
-  releaseArray(caches);
-  releaseArray(seen);
-  return result;
-}
-
-module.exports = intersection;
-
-},{"../internals/baseIndexOf":109,"../internals/cacheIndexOf":114,"../internals/createCache":119,"../internals/getArray":123,"../internals/largeArraySize":129,"../internals/releaseArray":137,"../internals/releaseObject":138,"../objects/isArguments":159,"../objects/isArray":160}],37:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback'),
-    slice = require('../internals/slice');
-
-/* Native method shortcuts for methods with the same name as other `lodash` methods */
-var nativeMax = Math.max;
-
-/**
- * Gets the last element or last `n` elements of an array. If a callback is
- * provided elements at the end of the array are returned as long as the
- * callback returns truey. The callback is bound to `thisArg` and invoked
- * with three arguments; (value, index, array).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @category Arrays
- * @param {Array} array The array to query.
- * @param {Function|Object|number|string} [callback] The function called
- *  per element or the number of elements to return. If a property name or
- *  object is provided it will be used to create a "_.pluck" or "_.where"
- *  style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {*} Returns the last element(s) of `array`.
- * @example
- *
- * _.last([1, 2, 3]);
- * // => 3
- *
- * _.last([1, 2, 3], 2);
- * // => [2, 3]
- *
- * _.last([1, 2, 3], function(num) {
- *   return num > 1;
- * });
- * // => [2, 3]
- *
- * var characters = [
- *   { 'name': 'barney',  'blocked': false, 'employer': 'slate' },
- *   { 'name': 'fred',    'blocked': true,  'employer': 'slate' },
- *   { 'name': 'pebbles', 'blocked': true,  'employer': 'na' }
- * ];
- *
- * // using "_.pluck" callback shorthand
- * _.pluck(_.last(characters, 'blocked'), 'name');
- * // => ['fred', 'pebbles']
- *
- * // using "_.where" callback shorthand
- * _.last(characters, { 'employer': 'na' });
- * // => [{ 'name': 'pebbles', 'blocked': true, 'employer': 'na' }]
- */
-function last(array, callback, thisArg) {
-  var n = 0,
-      length = array ? array.length : 0;
-
-  if (typeof callback != 'number' && callback != null) {
-    var index = length;
-    callback = createCallback(callback, thisArg, 3);
-    while (index-- && callback(array[index], index, array)) {
-      n++;
-    }
-  } else {
-    n = callback;
-    if (n == null || thisArg) {
-      return array ? array[length - 1] : undefined;
-    }
-  }
-  return slice(array, nativeMax(0, length - n));
-}
-
-module.exports = last;
-
-},{"../functions/createCallback":89,"../internals/slice":142}],38:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/* Native method shortcuts for methods with the same name as other `lodash` methods */
-var nativeMax = Math.max,
-    nativeMin = Math.min;
-
-/**
- * Gets the index at which the last occurrence of `value` is found using strict
- * equality for comparisons, i.e. `===`. If `fromIndex` is negative, it is used
- * as the offset from the end of the collection.
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @category Arrays
- * @param {Array} array The array to search.
- * @param {*} value The value to search for.
- * @param {number} [fromIndex=array.length-1] The index to search from.
- * @returns {number} Returns the index of the matched value or `-1`.
- * @example
- *
- * _.lastIndexOf([1, 2, 3, 1, 2, 3], 2);
- * // => 4
- *
- * _.lastIndexOf([1, 2, 3, 1, 2, 3], 2, 3);
- * // => 1
- */
-function lastIndexOf(array, value, fromIndex) {
-  var index = array ? array.length : 0;
-  if (typeof fromIndex == 'number') {
-    index = (fromIndex < 0 ? nativeMax(0, index + fromIndex) : nativeMin(fromIndex, index - 1)) + 1;
-  }
-  while (index--) {
-    if (array[index] === value) {
-      return index;
-    }
-  }
-  return -1;
-}
-
-module.exports = lastIndexOf;
-
-},{}],39:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * Used for `Array` method references.
- *
- * Normally `Array.prototype` would suffice, however, using an array literal
- * avoids issues in Narwhal.
- */
-var arrayRef = [];
-
-/** Native method shortcuts */
-var splice = arrayRef.splice;
-
-/**
- * Removes all provided values from the given array using strict equality for
- * comparisons, i.e. `===`.
- *
- * @static
- * @memberOf _
- * @category Arrays
- * @param {Array} array The array to modify.
- * @param {...*} [value] The values to remove.
- * @returns {Array} Returns `array`.
- * @example
- *
- * var array = [1, 2, 3, 1, 2, 3];
- * _.pull(array, 2, 3);
- * console.log(array);
- * // => [1, 1]
- */
-function pull(array) {
-  var args = arguments,
-      argsIndex = 0,
-      argsLength = args.length,
-      length = array ? array.length : 0;
-
-  while (++argsIndex < argsLength) {
-    var index = -1,
-        value = args[argsIndex];
-    while (++index < length) {
-      if (array[index] === value) {
-        splice.call(array, index--, 1);
-        length--;
-      }
-    }
-  }
-  return array;
-}
-
-module.exports = pull;
-
-},{}],40:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** Native method shortcuts */
-var ceil = Math.ceil;
-
-/* Native method shortcuts for methods with the same name as other `lodash` methods */
-var nativeMax = Math.max;
-
-/**
- * Creates an array of numbers (positive and/or negative) progressing from
- * `start` up to but not including `end`. If `start` is less than `stop` a
- * zero-length range is created unless a negative `step` is specified.
- *
- * @static
- * @memberOf _
- * @category Arrays
- * @param {number} [start=0] The start of the range.
- * @param {number} end The end of the range.
- * @param {number} [step=1] The value to increment or decrement by.
- * @returns {Array} Returns a new range array.
- * @example
- *
- * _.range(4);
- * // => [0, 1, 2, 3]
- *
- * _.range(1, 5);
- * // => [1, 2, 3, 4]
- *
- * _.range(0, 20, 5);
- * // => [0, 5, 10, 15]
- *
- * _.range(0, -4, -1);
- * // => [0, -1, -2, -3]
- *
- * _.range(1, 4, 0);
- * // => [1, 1, 1]
- *
- * _.range(0);
- * // => []
- */
-function range(start, end, step) {
-  start = +start || 0;
-  step = typeof step == 'number' ? step : (+step || 1);
-
-  if (end == null) {
-    end = start;
-    start = 0;
-  }
-  // use `Array(length)` so engines like Chakra and V8 avoid slower modes
-  // http://youtu.be/XAqIpGU8ZZk#t=17m25s
-  var index = -1,
-      length = nativeMax(0, ceil((end - start) / (step || 1))),
-      result = Array(length);
-
-  while (++index < length) {
-    result[index] = start;
-    start += step;
-  }
-  return result;
-}
-
-module.exports = range;
-
-},{}],41:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback');
-
-/**
- * Used for `Array` method references.
- *
- * Normally `Array.prototype` would suffice, however, using an array literal
- * avoids issues in Narwhal.
- */
-var arrayRef = [];
-
-/** Native method shortcuts */
-var splice = arrayRef.splice;
-
-/**
- * Removes all elements from an array that the callback returns truey for
- * and returns an array of removed elements. The callback is bound to `thisArg`
- * and invoked with three arguments; (value, index, array).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @category Arrays
- * @param {Array} array The array to modify.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Array} Returns a new array of removed elements.
- * @example
- *
- * var array = [1, 2, 3, 4, 5, 6];
- * var evens = _.remove(array, function(num) { return num % 2 == 0; });
- *
- * console.log(array);
- * // => [1, 3, 5]
- *
- * console.log(evens);
- * // => [2, 4, 6]
- */
-function remove(array, callback, thisArg) {
-  var index = -1,
-      length = array ? array.length : 0,
-      result = [];
-
-  callback = createCallback(callback, thisArg, 3);
-  while (++index < length) {
-    var value = array[index];
-    if (callback(value, index, array)) {
-      result.push(value);
-      splice.call(array, index--, 1);
-      length--;
-    }
-  }
-  return result;
-}
-
-module.exports = remove;
-
-},{"../functions/createCallback":89}],42:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback'),
-    slice = require('../internals/slice');
-
-/* Native method shortcuts for methods with the same name as other `lodash` methods */
-var nativeMax = Math.max;
-
-/**
- * The opposite of `_.initial` this method gets all but the first element or
- * first `n` elements of an array. If a callback function is provided elements
- * at the beginning of the array are excluded from the result as long as the
- * callback returns truey. The callback is bound to `thisArg` and invoked
- * with three arguments; (value, index, array).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @alias drop, tail
- * @category Arrays
- * @param {Array} array The array to query.
- * @param {Function|Object|number|string} [callback=1] The function called
- *  per element or the number of elements to exclude. If a property name or
- *  object is provided it will be used to create a "_.pluck" or "_.where"
- *  style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Array} Returns a slice of `array`.
- * @example
- *
- * _.rest([1, 2, 3]);
- * // => [2, 3]
- *
- * _.rest([1, 2, 3], 2);
- * // => [3]
- *
- * _.rest([1, 2, 3], function(num) {
- *   return num < 3;
- * });
- * // => [3]
- *
- * var characters = [
- *   { 'name': 'barney',  'blocked': true,  'employer': 'slate' },
- *   { 'name': 'fred',    'blocked': false,  'employer': 'slate' },
- *   { 'name': 'pebbles', 'blocked': true, 'employer': 'na' }
- * ];
- *
- * // using "_.pluck" callback shorthand
- * _.pluck(_.rest(characters, 'blocked'), 'name');
- * // => ['fred', 'pebbles']
- *
- * // using "_.where" callback shorthand
- * _.rest(characters, { 'employer': 'slate' });
- * // => [{ 'name': 'pebbles', 'blocked': true, 'employer': 'na' }]
- */
-function rest(array, callback, thisArg) {
-  if (typeof callback != 'number' && callback != null) {
-    var n = 0,
-        index = -1,
-        length = array ? array.length : 0;
-
-    callback = createCallback(callback, thisArg, 3);
-    while (++index < length && callback(array[index], index, array)) {
-      n++;
-    }
-  } else {
-    n = (callback == null || thisArg) ? 1 : nativeMax(0, callback);
-  }
-  return slice(array, n);
-}
-
-module.exports = rest;
-
-},{"../functions/createCallback":89,"../internals/slice":142}],43:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback'),
-    identity = require('../utilities/identity');
-
-/**
- * Uses a binary search to determine the smallest index at which a value
- * should be inserted into a given sorted array in order to maintain the sort
- * order of the array. If a callback is provided it will be executed for
- * `value` and each element of `array` to compute their sort ranking. The
- * callback is bound to `thisArg` and invoked with one argument; (value).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @category Arrays
- * @param {Array} array The array to inspect.
- * @param {*} value The value to evaluate.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {number} Returns the index at which `value` should be inserted
- *  into `array`.
- * @example
- *
- * _.sortedIndex([20, 30, 50], 40);
- * // => 2
- *
- * // using "_.pluck" callback shorthand
- * _.sortedIndex([{ 'x': 20 }, { 'x': 30 }, { 'x': 50 }], { 'x': 40 }, 'x');
- * // => 2
- *
- * var dict = {
- *   'wordToNumber': { 'twenty': 20, 'thirty': 30, 'fourty': 40, 'fifty': 50 }
- * };
- *
- * _.sortedIndex(['twenty', 'thirty', 'fifty'], 'fourty', function(word) {
- *   return dict.wordToNumber[word];
- * });
- * // => 2
- *
- * _.sortedIndex(['twenty', 'thirty', 'fifty'], 'fourty', function(word) {
- *   return this.wordToNumber[word];
- * }, dict);
- * // => 2
- */
-function sortedIndex(array, value, callback, thisArg) {
-  var low = 0,
-      high = array ? array.length : low;
-
-  // explicitly reference `identity` for better inlining in Firefox
-  callback = callback ? createCallback(callback, thisArg, 1) : identity;
-  value = callback(value);
-
-  while (low < high) {
-    var mid = (low + high) >>> 1;
-    (callback(array[mid]) < value)
-      ? low = mid + 1
-      : high = mid;
-  }
-  return low;
-}
-
-module.exports = sortedIndex;
-
-},{"../functions/createCallback":89,"../utilities/identity":188}],44:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseFlatten = require('../internals/baseFlatten'),
-    baseUniq = require('../internals/baseUniq');
-
-/**
- * Creates an array of unique values, in order, of the provided arrays using
- * strict equality for comparisons, i.e. `===`.
- *
- * @static
- * @memberOf _
- * @category Arrays
- * @param {...Array} [array] The arrays to inspect.
- * @returns {Array} Returns an array of combined values.
- * @example
- *
- * _.union([1, 2, 3], [5, 2, 1, 4], [2, 1]);
- * // => [1, 2, 3, 5, 4]
- */
-function union() {
-  return baseUniq(baseFlatten(arguments, true, true));
-}
-
-module.exports = union;
-
-},{"../internals/baseFlatten":108,"../internals/baseUniq":113}],45:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseUniq = require('../internals/baseUniq'),
-    createCallback = require('../functions/createCallback');
-
-/**
- * Creates a duplicate-value-free version of an array using strict equality
- * for comparisons, i.e. `===`. If the array is sorted, providing
- * `true` for `isSorted` will use a faster algorithm. If a callback is provided
- * each element of `array` is passed through the callback before uniqueness
- * is computed. The callback is bound to `thisArg` and invoked with three
- * arguments; (value, index, array).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @alias unique
- * @category Arrays
- * @param {Array} array The array to process.
- * @param {boolean} [isSorted=false] A flag to indicate that `array` is sorted.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Array} Returns a duplicate-value-free array.
- * @example
- *
- * _.uniq([1, 2, 1, 3, 1]);
- * // => [1, 2, 3]
- *
- * _.uniq([1, 1, 2, 2, 3], true);
- * // => [1, 2, 3]
- *
- * _.uniq(['A', 'b', 'C', 'a', 'B', 'c'], function(letter) { return letter.toLowerCase(); });
- * // => ['A', 'b', 'C']
- *
- * _.uniq([1, 2.5, 3, 1.5, 2, 3.5], function(num) { return this.floor(num); }, Math);
- * // => [1, 2.5, 3]
- *
- * // using "_.pluck" callback shorthand
- * _.uniq([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');
- * // => [{ 'x': 1 }, { 'x': 2 }]
- */
-function uniq(array, isSorted, callback, thisArg) {
-  // juggle arguments
-  if (typeof isSorted != 'boolean' && isSorted != null) {
-    thisArg = callback;
-    callback = (typeof isSorted != 'function' && thisArg && thisArg[isSorted] === array) ? null : isSorted;
-    isSorted = false;
-  }
-  if (callback != null) {
-    callback = createCallback(callback, thisArg, 3);
-  }
-  return baseUniq(array, isSorted, callback);
-}
-
-module.exports = uniq;
-
-},{"../functions/createCallback":89,"../internals/baseUniq":113}],46:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseDifference = require('../internals/baseDifference'),
-    slice = require('../internals/slice');
-
-/**
- * Creates an array excluding all provided values using strict equality for
- * comparisons, i.e. `===`.
- *
- * @static
- * @memberOf _
- * @category Arrays
- * @param {Array} array The array to filter.
- * @param {...*} [value] The values to exclude.
- * @returns {Array} Returns a new array of filtered values.
- * @example
- *
- * _.without([1, 2, 1, 0, 3, 1, 4], 0, 1);
- * // => [2, 3, 4]
- */
-function without(array) {
-  return baseDifference(array, slice(arguments, 1));
-}
-
-module.exports = without;
-
-},{"../internals/baseDifference":107,"../internals/slice":142}],47:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseDifference = require('../internals/baseDifference'),
-    baseUniq = require('../internals/baseUniq'),
-    isArguments = require('../objects/isArguments'),
-    isArray = require('../objects/isArray');
-
-/**
- * Creates an array that is the symmetric difference of the provided arrays.
- * See http://en.wikipedia.org/wiki/Symmetric_difference.
- *
- * @static
- * @memberOf _
- * @category Arrays
- * @param {...Array} [array] The arrays to inspect.
- * @returns {Array} Returns an array of values.
- * @example
- *
- * _.xor([1, 2, 3], [5, 2, 1, 4]);
- * // => [3, 5, 4]
- *
- * _.xor([1, 2, 5], [2, 3, 5], [3, 4, 5]);
- * // => [1, 4, 5]
- */
-function xor() {
-  var index = -1,
-      length = arguments.length;
-
-  while (++index < length) {
-    var array = arguments[index];
-    if (isArray(array) || isArguments(array)) {
-      var result = result
-        ? baseUniq(baseDifference(result, array).concat(baseDifference(array, result)))
-        : array;
-    }
-  }
-  return result || [];
-}
-
-module.exports = xor;
-
-},{"../internals/baseDifference":107,"../internals/baseUniq":113,"../objects/isArguments":159,"../objects/isArray":160}],48:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var max = require('../collections/max'),
-    pluck = require('../collections/pluck');
-
-/**
- * Creates an array of grouped elements, the first of which contains the first
- * elements of the given arrays, the second of which contains the second
- * elements of the given arrays, and so on.
- *
- * @static
- * @memberOf _
- * @alias unzip
- * @category Arrays
- * @param {...Array} [array] Arrays to process.
- * @returns {Array} Returns a new array of grouped elements.
- * @example
- *
- * _.zip(['fred', 'barney'], [30, 40], [true, false]);
- * // => [['fred', 30, true], ['barney', 40, false]]
- */
-function zip() {
-  var array = arguments.length > 1 ? arguments : arguments[0],
-      index = -1,
-      length = array ? max(pluck(array, 'length')) : 0,
-      result = Array(length < 0 ? 0 : length);
-
-  while (++index < length) {
-    result[index] = pluck(array, index);
-  }
-  return result;
-}
-
-module.exports = zip;
-
-},{"../collections/max":70,"../collections/pluck":72}],49:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isArray = require('../objects/isArray');
-
-/**
- * Creates an object composed from arrays of `keys` and `values`. Provide
- * either a single two dimensional array, i.e. `[[key1, value1], [key2, value2]]`
- * or two arrays, one of `keys` and one of corresponding `values`.
- *
- * @static
- * @memberOf _
- * @alias object
- * @category Arrays
- * @param {Array} keys The array of keys.
- * @param {Array} [values=[]] The array of values.
- * @returns {Object} Returns an object composed of the given keys and
- *  corresponding values.
- * @example
- *
- * _.zipObject(['fred', 'barney'], [30, 40]);
- * // => { 'fred': 30, 'barney': 40 }
- */
-function zipObject(keys, values) {
-  var index = -1,
-      length = keys ? keys.length : 0,
-      result = {};
-
-  if (!values && length && !isArray(keys[0])) {
-    values = [];
-  }
-  while (++index < length) {
-    var key = keys[index];
-    if (values) {
-      result[key] = values[index];
-    } else if (key) {
-      result[key[0]] = key[1];
-    }
-  }
-  return result;
-}
-
-module.exports = zipObject;
-
-},{"../objects/isArray":160}],50:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-module.exports = {
-  'chain': require('./chaining/chain'),
-  'tap': require('./chaining/tap'),
-  'value': require('./chaining/wrapperValueOf'),
-  'wrapperChain': require('./chaining/wrapperChain'),
-  'wrapperToString': require('./chaining/wrapperToString'),
-  'wrapperValueOf': require('./chaining/wrapperValueOf')
-};
-
-},{"./chaining/chain":51,"./chaining/tap":52,"./chaining/wrapperChain":53,"./chaining/wrapperToString":54,"./chaining/wrapperValueOf":55}],51:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var lodashWrapper = require('../internals/lodashWrapper');
-
-/**
- * Creates a `lodash` object that wraps the given value with explicit
- * method chaining enabled.
- *
- * @static
- * @memberOf _
- * @category Chaining
- * @param {*} value The value to wrap.
- * @returns {Object} Returns the wrapper object.
- * @example
- *
- * var characters = [
- *   { 'name': 'barney',  'age': 36 },
- *   { 'name': 'fred',    'age': 40 },
- *   { 'name': 'pebbles', 'age': 1 }
- * ];
- *
- * var youngest = _.chain(characters)
- *     .sortBy('age')
- *     .map(function(chr) { return chr.name + ' is ' + chr.age; })
- *     .first()
- *     .value();
- * // => 'pebbles is 1'
- */
-function chain(value) {
-  value = new lodashWrapper(value);
-  value.__chain__ = true;
-  return value;
-}
-
-module.exports = chain;
-
-},{"../internals/lodashWrapper":130}],52:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * Invokes `interceptor` with the `value` as the first argument and then
- * returns `value`. The purpose of this method is to "tap into" a method
- * chain in order to perform operations on intermediate results within
- * the chain.
- *
- * @static
- * @memberOf _
- * @category Chaining
- * @param {*} value The value to provide to `interceptor`.
- * @param {Function} interceptor The function to invoke.
- * @returns {*} Returns `value`.
- * @example
- *
- * _([1, 2, 3, 4])
- *  .tap(function(array) { array.pop(); })
- *  .reverse()
- *  .value();
- * // => [3, 2, 1]
- */
-function tap(value, interceptor) {
-  interceptor(value);
-  return value;
-}
-
-module.exports = tap;
-
-},{}],53:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * Enables explicit method chaining on the wrapper object.
- *
- * @name chain
- * @memberOf _
- * @category Chaining
- * @returns {*} Returns the wrapper object.
- * @example
- *
- * var characters = [
- *   { 'name': 'barney', 'age': 36 },
- *   { 'name': 'fred',   'age': 40 }
- * ];
- *
- * // without explicit chaining
- * _(characters).first();
- * // => { 'name': 'barney', 'age': 36 }
- *
- * // with explicit chaining
- * _(characters).chain()
- *   .first()
- *   .pick('age')
- *   .value();
- * // => { 'age': 36 }
- */
-function wrapperChain() {
-  this.__chain__ = true;
-  return this;
-}
-
-module.exports = wrapperChain;
-
-},{}],54:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * Produces the `toString` result of the wrapped value.
- *
- * @name toString
- * @memberOf _
- * @category Chaining
- * @returns {string} Returns the string result.
- * @example
- *
- * _([1, 2, 3]).toString();
- * // => '1,2,3'
- */
-function wrapperToString() {
-  return String(this.__wrapped__);
-}
-
-module.exports = wrapperToString;
-
-},{}],55:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var forEach = require('../collections/forEach'),
-    support = require('../support');
-
-/**
- * Extracts the wrapped value.
- *
- * @name valueOf
- * @memberOf _
- * @alias value
- * @category Chaining
- * @returns {*} Returns the wrapped value.
- * @example
- *
- * _([1, 2, 3]).valueOf();
- * // => [1, 2, 3]
- */
-function wrapperValueOf() {
-  return this.__wrapped__;
-}
-
-module.exports = wrapperValueOf;
-
-},{"../collections/forEach":64,"../support":184}],56:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-module.exports = {
-  'all': require('./collections/every'),
-  'any': require('./collections/some'),
-  'at': require('./collections/at'),
-  'collect': require('./collections/map'),
-  'contains': require('./collections/contains'),
-  'countBy': require('./collections/countBy'),
-  'detect': require('./collections/find'),
-  'each': require('./collections/forEach'),
-  'eachRight': require('./collections/forEachRight'),
-  'every': require('./collections/every'),
-  'filter': require('./collections/filter'),
-  'find': require('./collections/find'),
-  'findLast': require('./collections/findLast'),
-  'findWhere': require('./collections/find'),
-  'foldl': require('./collections/reduce'),
-  'foldr': require('./collections/reduceRight'),
-  'forEach': require('./collections/forEach'),
-  'forEachRight': require('./collections/forEachRight'),
-  'groupBy': require('./collections/groupBy'),
-  'include': require('./collections/contains'),
-  'indexBy': require('./collections/indexBy'),
-  'inject': require('./collections/reduce'),
-  'invoke': require('./collections/invoke'),
-  'map': require('./collections/map'),
-  'max': require('./collections/max'),
-  'min': require('./collections/min'),
-  'pluck': require('./collections/pluck'),
-  'reduce': require('./collections/reduce'),
-  'reduceRight': require('./collections/reduceRight'),
-  'reject': require('./collections/reject'),
-  'sample': require('./collections/sample'),
-  'select': require('./collections/filter'),
-  'shuffle': require('./collections/shuffle'),
-  'size': require('./collections/size'),
-  'some': require('./collections/some'),
-  'sortBy': require('./collections/sortBy'),
-  'toArray': require('./collections/toArray'),
-  'where': require('./collections/where')
-};
-
-},{"./collections/at":57,"./collections/contains":58,"./collections/countBy":59,"./collections/every":60,"./collections/filter":61,"./collections/find":62,"./collections/findLast":63,"./collections/forEach":64,"./collections/forEachRight":65,"./collections/groupBy":66,"./collections/indexBy":67,"./collections/invoke":68,"./collections/map":69,"./collections/max":70,"./collections/min":71,"./collections/pluck":72,"./collections/reduce":73,"./collections/reduceRight":74,"./collections/reject":75,"./collections/sample":76,"./collections/shuffle":77,"./collections/size":78,"./collections/some":79,"./collections/sortBy":80,"./collections/toArray":81,"./collections/where":82}],57:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseFlatten = require('../internals/baseFlatten'),
-    isString = require('../objects/isString');
-
-/**
- * Creates an array of elements from the specified indexes, or keys, of the
- * `collection`. Indexes may be specified as individual arguments or as arrays
- * of indexes.
- *
- * @static
- * @memberOf _
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {...(number|number[]|string|string[])} [index] The indexes of `collection`
- *   to retrieve, specified as individual indexes or arrays of indexes.
- * @returns {Array} Returns a new array of elements corresponding to the
- *  provided indexes.
- * @example
- *
- * _.at(['a', 'b', 'c', 'd', 'e'], [0, 2, 4]);
- * // => ['a', 'c', 'e']
- *
- * _.at(['fred', 'barney', 'pebbles'], 0, 2);
- * // => ['fred', 'pebbles']
- */
-function at(collection) {
-  var args = arguments,
-      index = -1,
-      props = baseFlatten(args, true, false, 1),
-      length = (args[2] && args[2][args[1]] === collection) ? 1 : props.length,
-      result = Array(length);
-
-  while(++index < length) {
-    result[index] = collection[props[index]];
-  }
-  return result;
-}
-
-module.exports = at;
-
-},{"../internals/baseFlatten":108,"../objects/isString":174}],58:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseIndexOf = require('../internals/baseIndexOf'),
-    forOwn = require('../objects/forOwn'),
-    isArray = require('../objects/isArray'),
-    isString = require('../objects/isString');
-
-/* Native method shortcuts for methods with the same name as other `lodash` methods */
-var nativeMax = Math.max;
-
-/**
- * Checks if a given value is present in a collection using strict equality
- * for comparisons, i.e. `===`. If `fromIndex` is negative, it is used as the
- * offset from the end of the collection.
- *
- * @static
- * @memberOf _
- * @alias include
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {*} target The value to check for.
- * @param {number} [fromIndex=0] The index to search from.
- * @returns {boolean} Returns `true` if the `target` element is found, else `false`.
- * @example
- *
- * _.contains([1, 2, 3], 1);
- * // => true
- *
- * _.contains([1, 2, 3], 1, 2);
- * // => false
- *
- * _.contains({ 'name': 'fred', 'age': 40 }, 'fred');
- * // => true
- *
- * _.contains('pebbles', 'eb');
- * // => true
- */
-function contains(collection, target, fromIndex) {
-  var index = -1,
-      indexOf = baseIndexOf,
-      length = collection ? collection.length : 0,
-      result = false;
-
-  fromIndex = (fromIndex < 0 ? nativeMax(0, length + fromIndex) : fromIndex) || 0;
-  if (isArray(collection)) {
-    result = indexOf(collection, target, fromIndex) > -1;
-  } else if (typeof length == 'number') {
-    result = (isString(collection) ? collection.indexOf(target, fromIndex) : indexOf(collection, target, fromIndex)) > -1;
-  } else {
-    forOwn(collection, function(value) {
-      if (++index >= fromIndex) {
-        return !(result = value === target);
-      }
-    });
-  }
-  return result;
-}
-
-module.exports = contains;
-
-},{"../internals/baseIndexOf":109,"../objects/forOwn":154,"../objects/isArray":160,"../objects/isString":174}],59:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createAggregator = require('../internals/createAggregator');
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Native method shortcuts */
-var hasOwnProperty = objectProto.hasOwnProperty;
-
-/**
- * Creates an object composed of keys generated from the results of running
- * each element of `collection` through the callback. The corresponding value
- * of each key is the number of times the key was returned by the callback.
- * The callback is bound to `thisArg` and invoked with three arguments;
- * (value, index|key, collection).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Object} Returns the composed aggregate object.
- * @example
- *
- * _.countBy([4.3, 6.1, 6.4], function(num) { return Math.floor(num); });
- * // => { '4': 1, '6': 2 }
- *
- * _.countBy([4.3, 6.1, 6.4], function(num) { return this.floor(num); }, Math);
- * // => { '4': 1, '6': 2 }
- *
- * _.countBy(['one', 'two', 'three'], 'length');
- * // => { '3': 2, '5': 1 }
- */
-var countBy = createAggregator(function(result, value, key) {
-  (hasOwnProperty.call(result, key) ? result[key]++ : result[key] = 1);
-});
-
-module.exports = countBy;
-
-},{"../internals/createAggregator":118}],60:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback'),
-    forOwn = require('../objects/forOwn');
-
-/**
- * Checks if the given callback returns truey value for **all** elements of
- * a collection. The callback is bound to `thisArg` and invoked with three
- * arguments; (value, index|key, collection).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @alias all
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {boolean} Returns `true` if all elements passed the callback check,
- *  else `false`.
- * @example
- *
- * _.every([true, 1, null, 'yes']);
- * // => false
- *
- * var characters = [
- *   { 'name': 'barney', 'age': 36 },
- *   { 'name': 'fred',   'age': 40 }
- * ];
- *
- * // using "_.pluck" callback shorthand
- * _.every(characters, 'age');
- * // => true
- *
- * // using "_.where" callback shorthand
- * _.every(characters, { 'age': 36 });
- * // => false
- */
-function every(collection, callback, thisArg) {
-  var result = true;
-  callback = createCallback(callback, thisArg, 3);
-
-  var index = -1,
-      length = collection ? collection.length : 0;
-
-  if (typeof length == 'number') {
-    while (++index < length) {
-      if (!(result = !!callback(collection[index], index, collection))) {
-        break;
-      }
-    }
-  } else {
-    forOwn(collection, function(value, index, collection) {
-      return (result = !!callback(value, index, collection));
-    });
-  }
-  return result;
-}
-
-module.exports = every;
-
-},{"../functions/createCallback":89,"../objects/forOwn":154}],61:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback'),
-    forOwn = require('../objects/forOwn');
-
-/**
- * Iterates over elements of a collection, returning an array of all elements
- * the callback returns truey for. The callback is bound to `thisArg` and
- * invoked with three arguments; (value, index|key, collection).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @alias select
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Array} Returns a new array of elements that passed the callback check.
- * @example
- *
- * var evens = _.filter([1, 2, 3, 4, 5, 6], function(num) { return num % 2 == 0; });
- * // => [2, 4, 6]
- *
- * var characters = [
- *   { 'name': 'barney', 'age': 36, 'blocked': false },
- *   { 'name': 'fred',   'age': 40, 'blocked': true }
- * ];
- *
- * // using "_.pluck" callback shorthand
- * _.filter(characters, 'blocked');
- * // => [{ 'name': 'fred', 'age': 40, 'blocked': true }]
- *
- * // using "_.where" callback shorthand
- * _.filter(characters, { 'age': 36 });
- * // => [{ 'name': 'barney', 'age': 36, 'blocked': false }]
- */
-function filter(collection, callback, thisArg) {
-  var result = [];
-  callback = createCallback(callback, thisArg, 3);
-
-  var index = -1,
-      length = collection ? collection.length : 0;
-
-  if (typeof length == 'number') {
-    while (++index < length) {
-      var value = collection[index];
-      if (callback(value, index, collection)) {
-        result.push(value);
-      }
-    }
-  } else {
-    forOwn(collection, function(value, index, collection) {
-      if (callback(value, index, collection)) {
-        result.push(value);
-      }
-    });
-  }
-  return result;
-}
-
-module.exports = filter;
-
-},{"../functions/createCallback":89,"../objects/forOwn":154}],62:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback'),
-    forOwn = require('../objects/forOwn');
-
-/**
- * Iterates over elements of a collection, returning the first element that
- * the callback returns truey for. The callback is bound to `thisArg` and
- * invoked with three arguments; (value, index|key, collection).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @alias detect, findWhere
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {*} Returns the found element, else `undefined`.
- * @example
- *
- * var characters = [
- *   { 'name': 'barney',  'age': 36, 'blocked': false },
- *   { 'name': 'fred',    'age': 40, 'blocked': true },
- *   { 'name': 'pebbles', 'age': 1,  'blocked': false }
- * ];
- *
- * _.find(characters, function(chr) {
- *   return chr.age < 40;
- * });
- * // => { 'name': 'barney', 'age': 36, 'blocked': false }
- *
- * // using "_.where" callback shorthand
- * _.find(characters, { 'age': 1 });
- * // =>  { 'name': 'pebbles', 'age': 1, 'blocked': false }
- *
- * // using "_.pluck" callback shorthand
- * _.find(characters, 'blocked');
- * // => { 'name': 'fred', 'age': 40, 'blocked': true }
- */
-function find(collection, callback, thisArg) {
-  callback = createCallback(callback, thisArg, 3);
-
-  var index = -1,
-      length = collection ? collection.length : 0;
-
-  if (typeof length == 'number') {
-    while (++index < length) {
-      var value = collection[index];
-      if (callback(value, index, collection)) {
-        return value;
-      }
-    }
-  } else {
-    var result;
-    forOwn(collection, function(value, index, collection) {
-      if (callback(value, index, collection)) {
-        result = value;
-        return false;
-      }
-    });
-    return result;
-  }
-}
-
-module.exports = find;
-
-},{"../functions/createCallback":89,"../objects/forOwn":154}],63:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback'),
-    forEachRight = require('./forEachRight');
-
-/**
- * This method is like `_.find` except that it iterates over elements
- * of a `collection` from right to left.
- *
- * @static
- * @memberOf _
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {*} Returns the found element, else `undefined`.
- * @example
- *
- * _.findLast([1, 2, 3, 4], function(num) {
- *   return num % 2 == 1;
- * });
- * // => 3
- */
-function findLast(collection, callback, thisArg) {
-  var result;
-  callback = createCallback(callback, thisArg, 3);
-  forEachRight(collection, function(value, index, collection) {
-    if (callback(value, index, collection)) {
-      result = value;
-      return false;
-    }
-  });
-  return result;
-}
-
-module.exports = findLast;
-
-},{"../functions/createCallback":89,"./forEachRight":65}],64:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseCreateCallback = require('../internals/baseCreateCallback'),
-    forOwn = require('../objects/forOwn');
-
-/**
- * Iterates over elements of a collection, executing the callback for each
- * element. The callback is bound to `thisArg` and invoked with three arguments;
- * (value, index|key, collection). Callbacks may exit iteration early by
- * explicitly returning `false`.
- *
- * Note: As with other "Collections" methods, objects with a `length` property
- * are iterated like arrays. To avoid this behavior `_.forIn` or `_.forOwn`
- * may be used for object iteration.
- *
- * @static
- * @memberOf _
- * @alias each
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function} [callback=identity] The function called per iteration.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Array|Object|string} Returns `collection`.
- * @example
- *
- * _([1, 2, 3]).forEach(function(num) { console.log(num); }).join(',');
- * // => logs each number and returns '1,2,3'
- *
- * _.forEach({ 'one': 1, 'two': 2, 'three': 3 }, function(num) { console.log(num); });
- * // => logs each number and returns the object (property order is not guaranteed across environments)
- */
-function forEach(collection, callback, thisArg) {
-  var index = -1,
-      length = collection ? collection.length : 0;
-
-  callback = callback && typeof thisArg == 'undefined' ? callback : baseCreateCallback(callback, thisArg, 3);
-  if (typeof length == 'number') {
-    while (++index < length) {
-      if (callback(collection[index], index, collection) === false) {
-        break;
-      }
-    }
-  } else {
-    forOwn(collection, callback);
-  }
-  return collection;
-}
-
-module.exports = forEach;
-
-},{"../internals/baseCreateCallback":105,"../objects/forOwn":154}],65:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseCreateCallback = require('../internals/baseCreateCallback'),
-    forOwn = require('../objects/forOwn'),
-    isArray = require('../objects/isArray'),
-    isString = require('../objects/isString'),
-    keys = require('../objects/keys');
-
-/**
- * This method is like `_.forEach` except that it iterates over elements
- * of a `collection` from right to left.
- *
- * @static
- * @memberOf _
- * @alias eachRight
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function} [callback=identity] The function called per iteration.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Array|Object|string} Returns `collection`.
- * @example
- *
- * _([1, 2, 3]).forEachRight(function(num) { console.log(num); }).join(',');
- * // => logs each number from right to left and returns '3,2,1'
- */
-function forEachRight(collection, callback, thisArg) {
-  var length = collection ? collection.length : 0;
-  callback = callback && typeof thisArg == 'undefined' ? callback : baseCreateCallback(callback, thisArg, 3);
-  if (typeof length == 'number') {
-    while (length--) {
-      if (callback(collection[length], length, collection) === false) {
-        break;
-      }
-    }
-  } else {
-    var props = keys(collection);
-    length = props.length;
-    forOwn(collection, function(value, key, collection) {
-      key = props ? props[--length] : --length;
-      return callback(collection[key], key, collection);
-    });
-  }
-  return collection;
-}
-
-module.exports = forEachRight;
-
-},{"../internals/baseCreateCallback":105,"../objects/forOwn":154,"../objects/isArray":160,"../objects/isString":174,"../objects/keys":176}],66:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createAggregator = require('../internals/createAggregator');
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Native method shortcuts */
-var hasOwnProperty = objectProto.hasOwnProperty;
-
-/**
- * Creates an object composed of keys generated from the results of running
- * each element of a collection through the callback. The corresponding value
- * of each key is an array of the elements responsible for generating the key.
- * The callback is bound to `thisArg` and invoked with three arguments;
- * (value, index|key, collection).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`
- *
- * @static
- * @memberOf _
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Object} Returns the composed aggregate object.
- * @example
- *
- * _.groupBy([4.2, 6.1, 6.4], function(num) { return Math.floor(num); });
- * // => { '4': [4.2], '6': [6.1, 6.4] }
- *
- * _.groupBy([4.2, 6.1, 6.4], function(num) { return this.floor(num); }, Math);
- * // => { '4': [4.2], '6': [6.1, 6.4] }
- *
- * // using "_.pluck" callback shorthand
- * _.groupBy(['one', 'two', 'three'], 'length');
- * // => { '3': ['one', 'two'], '5': ['three'] }
- */
-var groupBy = createAggregator(function(result, value, key) {
-  (hasOwnProperty.call(result, key) ? result[key] : result[key] = []).push(value);
-});
-
-module.exports = groupBy;
-
-},{"../internals/createAggregator":118}],67:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createAggregator = require('../internals/createAggregator');
-
-/**
- * Creates an object composed of keys generated from the results of running
- * each element of the collection through the given callback. The corresponding
- * value of each key is the last element responsible for generating the key.
- * The callback is bound to `thisArg` and invoked with three arguments;
- * (value, index|key, collection).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Object} Returns the composed aggregate object.
- * @example
- *
- * var keys = [
- *   { 'dir': 'left', 'code': 97 },
- *   { 'dir': 'right', 'code': 100 }
- * ];
- *
- * _.indexBy(keys, 'dir');
- * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }
- *
- * _.indexBy(keys, function(key) { return String.fromCharCode(key.code); });
- * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }
- *
- * _.indexBy(characters, function(key) { this.fromCharCode(key.code); }, String);
- * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }
- */
-var indexBy = createAggregator(function(result, value, key) {
-  result[key] = value;
-});
-
-module.exports = indexBy;
-
-},{"../internals/createAggregator":118}],68:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var forEach = require('./forEach'),
-    slice = require('../internals/slice');
-
-/**
- * Invokes the method named by `methodName` on each element in the `collection`
- * returning an array of the results of each invoked method. Additional arguments
- * will be provided to each invoked method. If `methodName` is a function it
- * will be invoked for, and `this` bound to, each element in the `collection`.
- *
- * @static
- * @memberOf _
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function|string} methodName The name of the method to invoke or
- *  the function invoked per iteration.
- * @param {...*} [arg] Arguments to invoke the method with.
- * @returns {Array} Returns a new array of the results of each invoked method.
- * @example
- *
- * _.invoke([[5, 1, 7], [3, 2, 1]], 'sort');
- * // => [[1, 5, 7], [1, 2, 3]]
- *
- * _.invoke([123, 456], String.prototype.split, '');
- * // => [['1', '2', '3'], ['4', '5', '6']]
- */
-function invoke(collection, methodName) {
-  var args = slice(arguments, 2),
-      index = -1,
-      isFunc = typeof methodName == 'function',
-      length = collection ? collection.length : 0,
-      result = Array(typeof length == 'number' ? length : 0);
-
-  forEach(collection, function(value) {
-    result[++index] = (isFunc ? methodName : value[methodName]).apply(value, args);
-  });
-  return result;
-}
-
-module.exports = invoke;
-
-},{"../internals/slice":142,"./forEach":64}],69:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback'),
-    forOwn = require('../objects/forOwn');
-
-/**
- * Creates an array of values by running each element in the collection
- * through the callback. The callback is bound to `thisArg` and invoked with
- * three arguments; (value, index|key, collection).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @alias collect
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Array} Returns a new array of the results of each `callback` execution.
- * @example
- *
- * _.map([1, 2, 3], function(num) { return num * 3; });
- * // => [3, 6, 9]
- *
- * _.map({ 'one': 1, 'two': 2, 'three': 3 }, function(num) { return num * 3; });
- * // => [3, 6, 9] (property order is not guaranteed across environments)
- *
- * var characters = [
- *   { 'name': 'barney', 'age': 36 },
- *   { 'name': 'fred',   'age': 40 }
- * ];
- *
- * // using "_.pluck" callback shorthand
- * _.map(characters, 'name');
- * // => ['barney', 'fred']
- */
-function map(collection, callback, thisArg) {
-  var index = -1,
-      length = collection ? collection.length : 0;
-
-  callback = createCallback(callback, thisArg, 3);
-  if (typeof length == 'number') {
-    var result = Array(length);
-    while (++index < length) {
-      result[index] = callback(collection[index], index, collection);
-    }
-  } else {
-    result = [];
-    forOwn(collection, function(value, key, collection) {
-      result[++index] = callback(value, key, collection);
-    });
-  }
-  return result;
-}
-
-module.exports = map;
-
-},{"../functions/createCallback":89,"../objects/forOwn":154}],70:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var charAtCallback = require('../internals/charAtCallback'),
-    createCallback = require('../functions/createCallback'),
-    forEach = require('./forEach'),
-    forOwn = require('../objects/forOwn'),
-    isArray = require('../objects/isArray'),
-    isString = require('../objects/isString');
-
-/**
- * Retrieves the maximum value of a collection. If the collection is empty or
- * falsey `-Infinity` is returned. If a callback is provided it will be executed
- * for each value in the collection to generate the criterion by which the value
- * is ranked. The callback is bound to `thisArg` and invoked with three
- * arguments; (value, index, collection).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {*} Returns the maximum value.
- * @example
- *
- * _.max([4, 2, 8, 6]);
- * // => 8
- *
- * var characters = [
- *   { 'name': 'barney', 'age': 36 },
- *   { 'name': 'fred',   'age': 40 }
- * ];
- *
- * _.max(characters, function(chr) { return chr.age; });
- * // => { 'name': 'fred', 'age': 40 };
- *
- * // using "_.pluck" callback shorthand
- * _.max(characters, 'age');
- * // => { 'name': 'fred', 'age': 40 };
- */
-function max(collection, callback, thisArg) {
-  var computed = -Infinity,
-      result = computed;
-
-  // allows working with functions like `_.map` without using
-  // their `index` argument as a callback
-  if (typeof callback != 'function' && thisArg && thisArg[callback] === collection) {
-    callback = null;
-  }
-  if (callback == null && isArray(collection)) {
-    var index = -1,
-        length = collection.length;
-
-    while (++index < length) {
-      var value = collection[index];
-      if (value > result) {
-        result = value;
-      }
-    }
-  } else {
-    callback = (callback == null && isString(collection))
-      ? charAtCallback
-      : createCallback(callback, thisArg, 3);
-
-    forEach(collection, function(value, index, collection) {
-      var current = callback(value, index, collection);
-      if (current > computed) {
-        computed = current;
-        result = value;
-      }
-    });
-  }
-  return result;
-}
-
-module.exports = max;
-
-},{"../functions/createCallback":89,"../internals/charAtCallback":116,"../objects/forOwn":154,"../objects/isArray":160,"../objects/isString":174,"./forEach":64}],71:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var charAtCallback = require('../internals/charAtCallback'),
-    createCallback = require('../functions/createCallback'),
-    forEach = require('./forEach'),
-    forOwn = require('../objects/forOwn'),
-    isArray = require('../objects/isArray'),
-    isString = require('../objects/isString');
-
-/**
- * Retrieves the minimum value of a collection. If the collection is empty or
- * falsey `Infinity` is returned. If a callback is provided it will be executed
- * for each value in the collection to generate the criterion by which the value
- * is ranked. The callback is bound to `thisArg` and invoked with three
- * arguments; (value, index, collection).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {*} Returns the minimum value.
- * @example
- *
- * _.min([4, 2, 8, 6]);
- * // => 2
- *
- * var characters = [
- *   { 'name': 'barney', 'age': 36 },
- *   { 'name': 'fred',   'age': 40 }
- * ];
- *
- * _.min(characters, function(chr) { return chr.age; });
- * // => { 'name': 'barney', 'age': 36 };
- *
- * // using "_.pluck" callback shorthand
- * _.min(characters, 'age');
- * // => { 'name': 'barney', 'age': 36 };
- */
-function min(collection, callback, thisArg) {
-  var computed = Infinity,
-      result = computed;
-
-  // allows working with functions like `_.map` without using
-  // their `index` argument as a callback
-  if (typeof callback != 'function' && thisArg && thisArg[callback] === collection) {
-    callback = null;
-  }
-  if (callback == null && isArray(collection)) {
-    var index = -1,
-        length = collection.length;
-
-    while (++index < length) {
-      var value = collection[index];
-      if (value < result) {
-        result = value;
-      }
-    }
-  } else {
-    callback = (callback == null && isString(collection))
-      ? charAtCallback
-      : createCallback(callback, thisArg, 3);
-
-    forEach(collection, function(value, index, collection) {
-      var current = callback(value, index, collection);
-      if (current < computed) {
-        computed = current;
-        result = value;
-      }
-    });
-  }
-  return result;
-}
-
-module.exports = min;
-
-},{"../functions/createCallback":89,"../internals/charAtCallback":116,"../objects/forOwn":154,"../objects/isArray":160,"../objects/isString":174,"./forEach":64}],72:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var map = require('./map');
-
-/**
- * Retrieves the value of a specified property from all elements in the collection.
- *
- * @static
- * @memberOf _
- * @type Function
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {string} property The name of the property to pluck.
- * @returns {Array} Returns a new array of property values.
- * @example
- *
- * var characters = [
- *   { 'name': 'barney', 'age': 36 },
- *   { 'name': 'fred',   'age': 40 }
- * ];
- *
- * _.pluck(characters, 'name');
- * // => ['barney', 'fred']
- */
-var pluck = map;
-
-module.exports = pluck;
-
-},{"./map":69}],73:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback'),
-    forOwn = require('../objects/forOwn');
-
-/**
- * Reduces a collection to a value which is the accumulated result of running
- * each element in the collection through the callback, where each successive
- * callback execution consumes the return value of the previous execution. If
- * `accumulator` is not provided the first element of the collection will be
- * used as the initial `accumulator` value. The callback is bound to `thisArg`
- * and invoked with four arguments; (accumulator, value, index|key, collection).
- *
- * @static
- * @memberOf _
- * @alias foldl, inject
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function} [callback=identity] The function called per iteration.
- * @param {*} [accumulator] Initial value of the accumulator.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {*} Returns the accumulated value.
- * @example
- *
- * var sum = _.reduce([1, 2, 3], function(sum, num) {
- *   return sum + num;
- * });
- * // => 6
- *
- * var mapped = _.reduce({ 'a': 1, 'b': 2, 'c': 3 }, function(result, num, key) {
- *   result[key] = num * 3;
- *   return result;
- * }, {});
- * // => { 'a': 3, 'b': 6, 'c': 9 }
- */
-function reduce(collection, callback, accumulator, thisArg) {
-  if (!collection) return accumulator;
-  var noaccum = arguments.length < 3;
-  callback = createCallback(callback, thisArg, 4);
-
-  var index = -1,
-      length = collection.length;
-
-  if (typeof length == 'number') {
-    if (noaccum) {
-      accumulator = collection[++index];
-    }
-    while (++index < length) {
-      accumulator = callback(accumulator, collection[index], index, collection);
-    }
-  } else {
-    forOwn(collection, function(value, index, collection) {
-      accumulator = noaccum
-        ? (noaccum = false, value)
-        : callback(accumulator, value, index, collection)
-    });
-  }
-  return accumulator;
-}
-
-module.exports = reduce;
-
-},{"../functions/createCallback":89,"../objects/forOwn":154}],74:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback'),
-    forEachRight = require('./forEachRight');
-
-/**
- * This method is like `_.reduce` except that it iterates over elements
- * of a `collection` from right to left.
- *
- * @static
- * @memberOf _
- * @alias foldr
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function} [callback=identity] The function called per iteration.
- * @param {*} [accumulator] Initial value of the accumulator.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {*} Returns the accumulated value.
- * @example
- *
- * var list = [[0, 1], [2, 3], [4, 5]];
- * var flat = _.reduceRight(list, function(a, b) { return a.concat(b); }, []);
- * // => [4, 5, 2, 3, 0, 1]
- */
-function reduceRight(collection, callback, accumulator, thisArg) {
-  var noaccum = arguments.length < 3;
-  callback = createCallback(callback, thisArg, 4);
-  forEachRight(collection, function(value, index, collection) {
-    accumulator = noaccum
-      ? (noaccum = false, value)
-      : callback(accumulator, value, index, collection);
-  });
-  return accumulator;
-}
-
-module.exports = reduceRight;
-
-},{"../functions/createCallback":89,"./forEachRight":65}],75:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback'),
-    filter = require('./filter');
-
-/**
- * The opposite of `_.filter` this method returns the elements of a
- * collection that the callback does **not** return truey for.
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Array} Returns a new array of elements that failed the callback check.
- * @example
- *
- * var odds = _.reject([1, 2, 3, 4, 5, 6], function(num) { return num % 2 == 0; });
- * // => [1, 3, 5]
- *
- * var characters = [
- *   { 'name': 'barney', 'age': 36, 'blocked': false },
- *   { 'name': 'fred',   'age': 40, 'blocked': true }
- * ];
- *
- * // using "_.pluck" callback shorthand
- * _.reject(characters, 'blocked');
- * // => [{ 'name': 'barney', 'age': 36, 'blocked': false }]
- *
- * // using "_.where" callback shorthand
- * _.reject(characters, { 'age': 36 });
- * // => [{ 'name': 'fred', 'age': 40, 'blocked': true }]
- */
-function reject(collection, callback, thisArg) {
-  callback = createCallback(callback, thisArg, 3);
-  return filter(collection, function(value, index, collection) {
-    return !callback(value, index, collection);
-  });
-}
-
-module.exports = reject;
-
-},{"../functions/createCallback":89,"./filter":61}],76:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseRandom = require('../internals/baseRandom'),
-    isString = require('../objects/isString'),
-    shuffle = require('./shuffle'),
-    values = require('../objects/values');
-
-/* Native method shortcuts for methods with the same name as other `lodash` methods */
-var nativeMax = Math.max,
-    nativeMin = Math.min;
-
-/**
- * Retrieves a random element or `n` random elements from a collection.
- *
- * @static
- * @memberOf _
- * @category Collections
- * @param {Array|Object|string} collection The collection to sample.
- * @param {number} [n] The number of elements to sample.
- * @param- {Object} [guard] Allows working with functions like `_.map`
- *  without using their `index` arguments as `n`.
- * @returns {Array} Returns the random sample(s) of `collection`.
- * @example
- *
- * _.sample([1, 2, 3, 4]);
- * // => 2
- *
- * _.sample([1, 2, 3, 4], 2);
- * // => [3, 1]
- */
-function sample(collection, n, guard) {
-  if (collection && typeof collection.length != 'number') {
-    collection = values(collection);
-  }
-  if (n == null || guard) {
-    return collection ? collection[baseRandom(0, collection.length - 1)] : undefined;
-  }
-  var result = shuffle(collection);
-  result.length = nativeMin(nativeMax(0, n), result.length);
-  return result;
-}
-
-module.exports = sample;
-
-},{"../internals/baseRandom":112,"../objects/isString":174,"../objects/values":183,"./shuffle":77}],77:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseRandom = require('../internals/baseRandom'),
-    forEach = require('./forEach');
-
-/**
- * Creates an array of shuffled values, using a version of the Fisher-Yates
- * shuffle. See http://en.wikipedia.org/wiki/Fisher-Yates_shuffle.
- *
- * @static
- * @memberOf _
- * @category Collections
- * @param {Array|Object|string} collection The collection to shuffle.
- * @returns {Array} Returns a new shuffled collection.
- * @example
- *
- * _.shuffle([1, 2, 3, 4, 5, 6]);
- * // => [4, 1, 6, 3, 5, 2]
- */
-function shuffle(collection) {
-  var index = -1,
-      length = collection ? collection.length : 0,
-      result = Array(typeof length == 'number' ? length : 0);
-
-  forEach(collection, function(value) {
-    var rand = baseRandom(0, ++index);
-    result[index] = result[rand];
-    result[rand] = value;
-  });
-  return result;
-}
-
-module.exports = shuffle;
-
-},{"../internals/baseRandom":112,"./forEach":64}],78:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var keys = require('../objects/keys');
-
-/**
- * Gets the size of the `collection` by returning `collection.length` for arrays
- * and array-like objects or the number of own enumerable properties for objects.
- *
- * @static
- * @memberOf _
- * @category Collections
- * @param {Array|Object|string} collection The collection to inspect.
- * @returns {number} Returns `collection.length` or number of own enumerable properties.
- * @example
- *
- * _.size([1, 2]);
- * // => 2
- *
- * _.size({ 'one': 1, 'two': 2, 'three': 3 });
- * // => 3
- *
- * _.size('pebbles');
- * // => 7
- */
-function size(collection) {
-  var length = collection ? collection.length : 0;
-  return typeof length == 'number' ? length : keys(collection).length;
-}
-
-module.exports = size;
-
-},{"../objects/keys":176}],79:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback'),
-    forOwn = require('../objects/forOwn'),
-    isArray = require('../objects/isArray');
-
-/**
- * Checks if the callback returns a truey value for **any** element of a
- * collection. The function returns as soon as it finds a passing value and
- * does not iterate over the entire collection. The callback is bound to
- * `thisArg` and invoked with three arguments; (value, index|key, collection).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @alias any
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {boolean} Returns `true` if any element passed the callback check,
- *  else `false`.
- * @example
- *
- * _.some([null, 0, 'yes', false], Boolean);
- * // => true
- *
- * var characters = [
- *   { 'name': 'barney', 'age': 36, 'blocked': false },
- *   { 'name': 'fred',   'age': 40, 'blocked': true }
- * ];
- *
- * // using "_.pluck" callback shorthand
- * _.some(characters, 'blocked');
- * // => true
- *
- * // using "_.where" callback shorthand
- * _.some(characters, { 'age': 1 });
- * // => false
- */
-function some(collection, callback, thisArg) {
-  var result;
-  callback = createCallback(callback, thisArg, 3);
-
-  var index = -1,
-      length = collection ? collection.length : 0;
-
-  if (typeof length == 'number') {
-    while (++index < length) {
-      if ((result = callback(collection[index], index, collection))) {
-        break;
-      }
-    }
-  } else {
-    forOwn(collection, function(value, index, collection) {
-      return !(result = callback(value, index, collection));
-    });
-  }
-  return !!result;
-}
-
-module.exports = some;
-
-},{"../functions/createCallback":89,"../objects/forOwn":154,"../objects/isArray":160}],80:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var compareAscending = require('../internals/compareAscending'),
-    createCallback = require('../functions/createCallback'),
-    forEach = require('./forEach'),
-    getArray = require('../internals/getArray'),
-    getObject = require('../internals/getObject'),
-    isArray = require('../objects/isArray'),
-    map = require('./map'),
-    releaseArray = require('../internals/releaseArray'),
-    releaseObject = require('../internals/releaseObject');
-
-/**
- * Creates an array of elements, sorted in ascending order by the results of
- * running each element in a collection through the callback. This method
- * performs a stable sort, that is, it will preserve the original sort order
- * of equal elements. The callback is bound to `thisArg` and invoked with
- * three arguments; (value, index|key, collection).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an array of property names is provided for `callback` the collection
- * will be sorted by each property value.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Array|Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Array} Returns a new array of sorted elements.
- * @example
- *
- * _.sortBy([1, 2, 3], function(num) { return Math.sin(num); });
- * // => [3, 1, 2]
- *
- * _.sortBy([1, 2, 3], function(num) { return this.sin(num); }, Math);
- * // => [3, 1, 2]
- *
- * var characters = [
- *   { 'name': 'barney',  'age': 36 },
- *   { 'name': 'fred',    'age': 40 },
- *   { 'name': 'barney',  'age': 26 },
- *   { 'name': 'fred',    'age': 30 }
- * ];
- *
- * // using "_.pluck" callback shorthand
- * _.map(_.sortBy(characters, 'age'), _.values);
- * // => [['barney', 26], ['fred', 30], ['barney', 36], ['fred', 40]]
- *
- * // sorting by multiple properties
- * _.map(_.sortBy(characters, ['name', 'age']), _.values);
- * // = > [['barney', 26], ['barney', 36], ['fred', 30], ['fred', 40]]
- */
-function sortBy(collection, callback, thisArg) {
-  var index = -1,
-      isArr = isArray(callback),
-      length = collection ? collection.length : 0,
-      result = Array(typeof length == 'number' ? length : 0);
-
-  if (!isArr) {
-    callback = createCallback(callback, thisArg, 3);
-  }
-  forEach(collection, function(value, key, collection) {
-    var object = result[++index] = getObject();
-    if (isArr) {
-      object.criteria = map(callback, function(key) { return value[key]; });
-    } else {
-      (object.criteria = getArray())[0] = callback(value, key, collection);
-    }
-    object.index = index;
-    object.value = value;
-  });
-
-  length = result.length;
-  result.sort(compareAscending);
-  while (length--) {
-    var object = result[length];
-    result[length] = object.value;
-    if (!isArr) {
-      releaseArray(object.criteria);
-    }
-    releaseObject(object);
-  }
-  return result;
-}
-
-module.exports = sortBy;
-
-},{"../functions/createCallback":89,"../internals/compareAscending":117,"../internals/getArray":123,"../internals/getObject":124,"../internals/releaseArray":137,"../internals/releaseObject":138,"../objects/isArray":160,"./forEach":64,"./map":69}],81:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isString = require('../objects/isString'),
-    slice = require('../internals/slice'),
-    values = require('../objects/values');
-
-/**
- * Converts the `collection` to an array.
- *
- * @static
- * @memberOf _
- * @category Collections
- * @param {Array|Object|string} collection The collection to convert.
- * @returns {Array} Returns the new converted array.
- * @example
- *
- * (function() { return _.toArray(arguments).slice(1); })(1, 2, 3, 4);
- * // => [2, 3, 4]
- */
-function toArray(collection) {
-  if (collection && typeof collection.length == 'number') {
-    return slice(collection);
-  }
-  return values(collection);
-}
-
-module.exports = toArray;
-
-},{"../internals/slice":142,"../objects/isString":174,"../objects/values":183}],82:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var filter = require('./filter');
-
-/**
- * Performs a deep comparison of each element in a `collection` to the given
- * `properties` object, returning an array of all elements that have equivalent
- * property values.
- *
- * @static
- * @memberOf _
- * @type Function
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Object} props The object of property values to filter by.
- * @returns {Array} Returns a new array of elements that have the given properties.
- * @example
- *
- * var characters = [
- *   { 'name': 'barney', 'age': 36, 'pets': ['hoppy'] },
- *   { 'name': 'fred',   'age': 40, 'pets': ['baby puss', 'dino'] }
- * ];
- *
- * _.where(characters, { 'age': 36 });
- * // => [{ 'name': 'barney', 'age': 36, 'pets': ['hoppy'] }]
- *
- * _.where(characters, { 'pets': ['dino'] });
- * // => [{ 'name': 'fred', 'age': 40, 'pets': ['baby puss', 'dino'] }]
- */
-var where = filter;
-
-module.exports = where;
-
-},{"./filter":61}],83:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-module.exports = {
-  'after': require('./functions/after'),
-  'bind': require('./functions/bind'),
-  'bindAll': require('./functions/bindAll'),
-  'bindKey': require('./functions/bindKey'),
-  'compose': require('./functions/compose'),
-  'createCallback': require('./functions/createCallback'),
-  'curry': require('./functions/curry'),
-  'debounce': require('./functions/debounce'),
-  'defer': require('./functions/defer'),
-  'delay': require('./functions/delay'),
-  'memoize': require('./functions/memoize'),
-  'once': require('./functions/once'),
-  'partial': require('./functions/partial'),
-  'partialRight': require('./functions/partialRight'),
-  'throttle': require('./functions/throttle'),
-  'wrap': require('./functions/wrap')
-};
-
-},{"./functions/after":84,"./functions/bind":85,"./functions/bindAll":86,"./functions/bindKey":87,"./functions/compose":88,"./functions/createCallback":89,"./functions/curry":90,"./functions/debounce":91,"./functions/defer":92,"./functions/delay":93,"./functions/memoize":94,"./functions/once":95,"./functions/partial":96,"./functions/partialRight":97,"./functions/throttle":98,"./functions/wrap":99}],84:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isFunction = require('../objects/isFunction');
-
-/**
- * Creates a function that executes `func`, with  the `this` binding and
- * arguments of the created function, only after being called `n` times.
- *
- * @static
- * @memberOf _
- * @category Functions
- * @param {number} n The number of times the function must be called before
- *  `func` is executed.
- * @param {Function} func The function to restrict.
- * @returns {Function} Returns the new restricted function.
- * @example
- *
- * var saves = ['profile', 'settings'];
- *
- * var done = _.after(saves.length, function() {
- *   console.log('Done saving!');
- * });
- *
- * _.forEach(saves, function(type) {
- *   asyncSave({ 'type': type, 'complete': done });
- * });
- * // => logs 'Done saving!', after all saves have completed
- */
-function after(n, func) {
-  if (!isFunction(func)) {
-    throw new TypeError;
-  }
-  return function() {
-    if (--n < 1) {
-      return func.apply(this, arguments);
-    }
-  };
-}
-
-module.exports = after;
-
-},{"../objects/isFunction":167}],85:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createWrapper = require('../internals/createWrapper'),
-    slice = require('../internals/slice');
-
-/**
- * Creates a function that, when called, invokes `func` with the `this`
- * binding of `thisArg` and prepends any additional `bind` arguments to those
- * provided to the bound function.
- *
- * @static
- * @memberOf _
- * @category Functions
- * @param {Function} func The function to bind.
- * @param {*} [thisArg] The `this` binding of `func`.
- * @param {...*} [arg] Arguments to be partially applied.
- * @returns {Function} Returns the new bound function.
- * @example
- *
- * var func = function(greeting) {
- *   return greeting + ' ' + this.name;
- * };
- *
- * func = _.bind(func, { 'name': 'fred' }, 'hi');
- * func();
- * // => 'hi fred'
- */
-function bind(func, thisArg) {
-  return arguments.length > 2
-    ? createWrapper(func, 17, slice(arguments, 2), null, thisArg)
-    : createWrapper(func, 1, null, null, thisArg);
-}
-
-module.exports = bind;
-
-},{"../internals/createWrapper":120,"../internals/slice":142}],86:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseFlatten = require('../internals/baseFlatten'),
-    createWrapper = require('../internals/createWrapper'),
-    functions = require('../objects/functions');
-
-/**
- * Binds methods of an object to the object itself, overwriting the existing
- * method. Method names may be specified as individual arguments or as arrays
- * of method names. If no method names are provided all the function properties
- * of `object` will be bound.
- *
- * @static
- * @memberOf _
- * @category Functions
- * @param {Object} object The object to bind and assign the bound methods to.
- * @param {...string} [methodName] The object method names to
- *  bind, specified as individual method names or arrays of method names.
- * @returns {Object} Returns `object`.
- * @example
- *
- * var view = {
- *   'label': 'docs',
- *   'onClick': function() { console.log('clicked ' + this.label); }
- * };
- *
- * _.bindAll(view);
- * jQuery('#docs').on('click', view.onClick);
- * // => logs 'clicked docs', when the button is clicked
- */
-function bindAll(object) {
-  var funcs = arguments.length > 1 ? baseFlatten(arguments, true, false, 1) : functions(object),
-      index = -1,
-      length = funcs.length;
-
-  while (++index < length) {
-    var key = funcs[index];
-    object[key] = createWrapper(object[key], 1, null, null, object);
-  }
-  return object;
-}
-
-module.exports = bindAll;
-
-},{"../internals/baseFlatten":108,"../internals/createWrapper":120,"../objects/functions":156}],87:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createWrapper = require('../internals/createWrapper'),
-    slice = require('../internals/slice');
-
-/**
- * Creates a function that, when called, invokes the method at `object[key]`
- * and prepends any additional `bindKey` arguments to those provided to the bound
- * function. This method differs from `_.bind` by allowing bound functions to
- * reference methods that will be redefined or don't yet exist.
- * See http://michaux.ca/articles/lazy-function-definition-pattern.
- *
- * @static
- * @memberOf _
- * @category Functions
- * @param {Object} object The object the method belongs to.
- * @param {string} key The key of the method.
- * @param {...*} [arg] Arguments to be partially applied.
- * @returns {Function} Returns the new bound function.
- * @example
- *
- * var object = {
- *   'name': 'fred',
- *   'greet': function(greeting) {
- *     return greeting + ' ' + this.name;
- *   }
- * };
- *
- * var func = _.bindKey(object, 'greet', 'hi');
- * func();
- * // => 'hi fred'
- *
- * object.greet = function(greeting) {
- *   return greeting + 'ya ' + this.name + '!';
- * };
- *
- * func();
- * // => 'hiya fred!'
- */
-function bindKey(object, key) {
-  return arguments.length > 2
-    ? createWrapper(key, 19, slice(arguments, 2), null, object)
-    : createWrapper(key, 3, null, null, object);
-}
-
-module.exports = bindKey;
-
-},{"../internals/createWrapper":120,"../internals/slice":142}],88:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isFunction = require('../objects/isFunction');
-
-/**
- * Creates a function that is the composition of the provided functions,
- * where each function consumes the return value of the function that follows.
- * For example, composing the functions `f()`, `g()`, and `h()` produces `f(g(h()))`.
- * Each function is executed with the `this` binding of the composed function.
- *
- * @static
- * @memberOf _
- * @category Functions
- * @param {...Function} [func] Functions to compose.
- * @returns {Function} Returns the new composed function.
- * @example
- *
- * var realNameMap = {
- *   'pebbles': 'penelope'
- * };
- *
- * var format = function(name) {
- *   name = realNameMap[name.toLowerCase()] || name;
- *   return name.charAt(0).toUpperCase() + name.slice(1).toLowerCase();
- * };
- *
- * var greet = function(formatted) {
- *   return 'Hiya ' + formatted + '!';
- * };
- *
- * var welcome = _.compose(greet, format);
- * welcome('pebbles');
- * // => 'Hiya Penelope!'
- */
-function compose() {
-  var funcs = arguments,
-      length = funcs.length;
-
-  while (length--) {
-    if (!isFunction(funcs[length])) {
-      throw new TypeError;
-    }
-  }
-  return function() {
-    var args = arguments,
-        length = funcs.length;
-
-    while (length--) {
-      args = [funcs[length].apply(this, args)];
-    }
-    return args[0];
-  };
-}
-
-module.exports = compose;
-
-},{"../objects/isFunction":167}],89:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseCreateCallback = require('../internals/baseCreateCallback'),
-    baseIsEqual = require('../internals/baseIsEqual'),
-    isObject = require('../objects/isObject'),
-    keys = require('../objects/keys'),
-    property = require('../utilities/property');
-
-/**
- * Produces a callback bound to an optional `thisArg`. If `func` is a property
- * name the created callback will return the property value for a given element.
- * If `func` is an object the created callback will return `true` for elements
- * that contain the equivalent object properties, otherwise it will return `false`.
- *
- * @static
- * @memberOf _
- * @category Utilities
- * @param {*} [func=identity] The value to convert to a callback.
- * @param {*} [thisArg] The `this` binding of the created callback.
- * @param {number} [argCount] The number of arguments the callback accepts.
- * @returns {Function} Returns a callback function.
- * @example
- *
- * var characters = [
- *   { 'name': 'barney', 'age': 36 },
- *   { 'name': 'fred',   'age': 40 }
- * ];
- *
- * // wrap to create custom callback shorthands
- * _.createCallback = _.wrap(_.createCallback, function(func, callback, thisArg) {
- *   var match = /^(.+?)__([gl]t)(.+)$/.exec(callback);
- *   return !match ? func(callback, thisArg) : function(object) {
- *     return match[2] == 'gt' ? object[match[1]] > match[3] : object[match[1]] < match[3];
- *   };
- * });
- *
- * _.filter(characters, 'age__gt38');
- * // => [{ 'name': 'fred', 'age': 40 }]
- */
-function createCallback(func, thisArg, argCount) {
-  var type = typeof func;
-  if (func == null || type == 'function') {
-    return baseCreateCallback(func, thisArg, argCount);
-  }
-  // handle "_.pluck" style callback shorthands
-  if (type != 'object') {
-    return property(func);
-  }
-  var props = keys(func),
-      key = props[0],
-      a = func[key];
-
-  // handle "_.where" style callback shorthands
-  if (props.length == 1 && a === a && !isObject(a)) {
-    // fast path the common case of providing an object with a single
-    // property containing a primitive value
-    return function(object) {
-      var b = object[key];
-      return a === b && (a !== 0 || (1 / a == 1 / b));
-    };
-  }
-  return function(object) {
-    var length = props.length,
-        result = false;
-
-    while (length--) {
-      if (!(result = baseIsEqual(object[props[length]], func[props[length]], null, true))) {
-        break;
-      }
-    }
-    return result;
-  };
-}
-
-module.exports = createCallback;
-
-},{"../internals/baseCreateCallback":105,"../internals/baseIsEqual":110,"../objects/isObject":171,"../objects/keys":176,"../utilities/property":194}],90:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createWrapper = require('../internals/createWrapper');
-
-/**
- * Creates a function which accepts one or more arguments of `func` that when
- * invoked either executes `func` returning its result, if all `func` arguments
- * have been provided, or returns a function that accepts one or more of the
- * remaining `func` arguments, and so on. The arity of `func` can be specified
- * if `func.length` is not sufficient.
- *
- * @static
- * @memberOf _
- * @category Functions
- * @param {Function} func The function to curry.
- * @param {number} [arity=func.length] The arity of `func`.
- * @returns {Function} Returns the new curried function.
- * @example
- *
- * var curried = _.curry(function(a, b, c) {
- *   console.log(a + b + c);
- * });
- *
- * curried(1)(2)(3);
- * // => 6
- *
- * curried(1, 2)(3);
- * // => 6
- *
- * curried(1, 2, 3);
- * // => 6
- */
-function curry(func, arity) {
-  arity = typeof arity == 'number' ? arity : (+arity || func.length);
-  return createWrapper(func, 4, null, null, null, arity);
-}
-
-module.exports = curry;
-
-},{"../internals/createWrapper":120}],91:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isFunction = require('../objects/isFunction'),
-    isObject = require('../objects/isObject'),
-    now = require('../utilities/now');
-
-/* Native method shortcuts for methods with the same name as other `lodash` methods */
-var nativeMax = Math.max;
-
-/**
- * Creates a function that will delay the execution of `func` until after
- * `wait` milliseconds have elapsed since the last time it was invoked.
- * Provide an options object to indicate that `func` should be invoked on
- * the leading and/or trailing edge of the `wait` timeout. Subsequent calls
- * to the debounced function will return the result of the last `func` call.
- *
- * Note: If `leading` and `trailing` options are `true` `func` will be called
- * on the trailing edge of the timeout only if the the debounced function is
- * invoked more than once during the `wait` timeout.
- *
- * @static
- * @memberOf _
- * @category Functions
- * @param {Function} func The function to debounce.
- * @param {number} wait The number of milliseconds to delay.
- * @param {Object} [options] The options object.
- * @param {boolean} [options.leading=false] Specify execution on the leading edge of the timeout.
- * @param {number} [options.maxWait] The maximum time `func` is allowed to be delayed before it's called.
- * @param {boolean} [options.trailing=true] Specify execution on the trailing edge of the timeout.
- * @returns {Function} Returns the new debounced function.
- * @example
- *
- * // avoid costly calculations while the window size is in flux
- * var lazyLayout = _.debounce(calculateLayout, 150);
- * jQuery(window).on('resize', lazyLayout);
- *
- * // execute `sendMail` when the click event is fired, debouncing subsequent calls
- * jQuery('#postbox').on('click', _.debounce(sendMail, 300, {
- *   'leading': true,
- *   'trailing': false
- * });
- *
- * // ensure `batchLog` is executed once after 1 second of debounced calls
- * var source = new EventSource('/stream');
- * source.addEventListener('message', _.debounce(batchLog, 250, {
- *   'maxWait': 1000
- * }, false);
- */
-function debounce(func, wait, options) {
-  var args,
-      maxTimeoutId,
-      result,
-      stamp,
-      thisArg,
-      timeoutId,
-      trailingCall,
-      lastCalled = 0,
-      maxWait = false,
-      trailing = true;
-
-  if (!isFunction(func)) {
-    throw new TypeError;
-  }
-  wait = nativeMax(0, wait) || 0;
-  if (options === true) {
-    var leading = true;
-    trailing = false;
-  } else if (isObject(options)) {
-    leading = options.leading;
-    maxWait = 'maxWait' in options && (nativeMax(wait, options.maxWait) || 0);
-    trailing = 'trailing' in options ? options.trailing : trailing;
-  }
-  var delayed = function() {
-    var remaining = wait - (now() - stamp);
-    if (remaining <= 0) {
-      if (maxTimeoutId) {
-        clearTimeout(maxTimeoutId);
-      }
-      var isCalled = trailingCall;
-      maxTimeoutId = timeoutId = trailingCall = undefined;
-      if (isCalled) {
-        lastCalled = now();
-        result = func.apply(thisArg, args);
-        if (!timeoutId && !maxTimeoutId) {
-          args = thisArg = null;
-        }
-      }
-    } else {
-      timeoutId = setTimeout(delayed, remaining);
-    }
-  };
-
-  var maxDelayed = function() {
-    if (timeoutId) {
-      clearTimeout(timeoutId);
-    }
-    maxTimeoutId = timeoutId = trailingCall = undefined;
-    if (trailing || (maxWait !== wait)) {
-      lastCalled = now();
-      result = func.apply(thisArg, args);
-      if (!timeoutId && !maxTimeoutId) {
-        args = thisArg = null;
-      }
-    }
-  };
-
-  return function() {
-    args = arguments;
-    stamp = now();
-    thisArg = this;
-    trailingCall = trailing && (timeoutId || !leading);
-
-    if (maxWait === false) {
-      var leadingCall = leading && !timeoutId;
-    } else {
-      if (!maxTimeoutId && !leading) {
-        lastCalled = stamp;
-      }
-      var remaining = maxWait - (stamp - lastCalled),
-          isCalled = remaining <= 0;
-
-      if (isCalled) {
-        if (maxTimeoutId) {
-          maxTimeoutId = clearTimeout(maxTimeoutId);
-        }
-        lastCalled = stamp;
-        result = func.apply(thisArg, args);
-      }
-      else if (!maxTimeoutId) {
-        maxTimeoutId = setTimeout(maxDelayed, remaining);
-      }
-    }
-    if (isCalled && timeoutId) {
-      timeoutId = clearTimeout(timeoutId);
-    }
-    else if (!timeoutId && wait !== maxWait) {
-      timeoutId = setTimeout(delayed, wait);
-    }
-    if (leadingCall) {
-      isCalled = true;
-      result = func.apply(thisArg, args);
-    }
-    if (isCalled && !timeoutId && !maxTimeoutId) {
-      args = thisArg = null;
-    }
-    return result;
-  };
-}
-
-module.exports = debounce;
-
-},{"../objects/isFunction":167,"../objects/isObject":171,"../utilities/now":192}],92:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isFunction = require('../objects/isFunction'),
-    slice = require('../internals/slice');
-
-/**
- * Defers executing the `func` function until the current call stack has cleared.
- * Additional arguments will be provided to `func` when it is invoked.
- *
- * @static
- * @memberOf _
- * @category Functions
- * @param {Function} func The function to defer.
- * @param {...*} [arg] Arguments to invoke the function with.
- * @returns {number} Returns the timer id.
- * @example
- *
- * _.defer(function(text) { console.log(text); }, 'deferred');
- * // logs 'deferred' after one or more milliseconds
- */
-function defer(func) {
-  if (!isFunction(func)) {
-    throw new TypeError;
-  }
-  var args = slice(arguments, 1);
-  return setTimeout(function() { func.apply(undefined, args); }, 1);
-}
-
-module.exports = defer;
-
-},{"../internals/slice":142,"../objects/isFunction":167}],93:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isFunction = require('../objects/isFunction'),
-    slice = require('../internals/slice');
-
-/**
- * Executes the `func` function after `wait` milliseconds. Additional arguments
- * will be provided to `func` when it is invoked.
- *
- * @static
- * @memberOf _
- * @category Functions
- * @param {Function} func The function to delay.
- * @param {number} wait The number of milliseconds to delay execution.
- * @param {...*} [arg] Arguments to invoke the function with.
- * @returns {number} Returns the timer id.
- * @example
- *
- * _.delay(function(text) { console.log(text); }, 1000, 'later');
- * // => logs 'later' after one second
- */
-function delay(func, wait) {
-  if (!isFunction(func)) {
-    throw new TypeError;
-  }
-  var args = slice(arguments, 2);
-  return setTimeout(function() { func.apply(undefined, args); }, wait);
-}
-
-module.exports = delay;
-
-},{"../internals/slice":142,"../objects/isFunction":167}],94:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isFunction = require('../objects/isFunction'),
-    keyPrefix = require('../internals/keyPrefix');
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Native method shortcuts */
-var hasOwnProperty = objectProto.hasOwnProperty;
-
-/**
- * Creates a function that memoizes the result of `func`. If `resolver` is
- * provided it will be used to determine the cache key for storing the result
- * based on the arguments provided to the memoized function. By default, the
- * first argument provided to the memoized function is used as the cache key.
- * The `func` is executed with the `this` binding of the memoized function.
- * The result cache is exposed as the `cache` property on the memoized function.
- *
- * @static
- * @memberOf _
- * @category Functions
- * @param {Function} func The function to have its output memoized.
- * @param {Function} [resolver] A function used to resolve the cache key.
- * @returns {Function} Returns the new memoizing function.
- * @example
- *
- * var fibonacci = _.memoize(function(n) {
- *   return n < 2 ? n : fibonacci(n - 1) + fibonacci(n - 2);
- * });
- *
- * fibonacci(9)
- * // => 34
- *
- * var data = {
- *   'fred': { 'name': 'fred', 'age': 40 },
- *   'pebbles': { 'name': 'pebbles', 'age': 1 }
- * };
- *
- * // modifying the result cache
- * var get = _.memoize(function(name) { return data[name]; }, _.identity);
- * get('pebbles');
- * // => { 'name': 'pebbles', 'age': 1 }
- *
- * get.cache.pebbles.name = 'penelope';
- * get('pebbles');
- * // => { 'name': 'penelope', 'age': 1 }
- */
-function memoize(func, resolver) {
-  if (!isFunction(func)) {
-    throw new TypeError;
-  }
-  var memoized = function() {
-    var cache = memoized.cache,
-        key = resolver ? resolver.apply(this, arguments) : keyPrefix + arguments[0];
-
-    return hasOwnProperty.call(cache, key)
-      ? cache[key]
-      : (cache[key] = func.apply(this, arguments));
-  }
-  memoized.cache = {};
-  return memoized;
-}
-
-module.exports = memoize;
-
-},{"../internals/keyPrefix":128,"../objects/isFunction":167}],95:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isFunction = require('../objects/isFunction');
-
-/**
- * Creates a function that is restricted to execute `func` once. Repeat calls to
- * the function will return the value of the first call. The `func` is executed
- * with the `this` binding of the created function.
- *
- * @static
- * @memberOf _
- * @category Functions
- * @param {Function} func The function to restrict.
- * @returns {Function} Returns the new restricted function.
- * @example
- *
- * var initialize = _.once(createApplication);
- * initialize();
- * initialize();
- * // `initialize` executes `createApplication` once
- */
-function once(func) {
-  var ran,
-      result;
-
-  if (!isFunction(func)) {
-    throw new TypeError;
-  }
-  return function() {
-    if (ran) {
-      return result;
-    }
-    ran = true;
-    result = func.apply(this, arguments);
-
-    // clear the `func` variable so the function may be garbage collected
-    func = null;
-    return result;
-  };
-}
-
-module.exports = once;
-
-},{"../objects/isFunction":167}],96:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createWrapper = require('../internals/createWrapper'),
-    slice = require('../internals/slice');
-
-/**
- * Creates a function that, when called, invokes `func` with any additional
- * `partial` arguments prepended to those provided to the new function. This
- * method is similar to `_.bind` except it does **not** alter the `this` binding.
- *
- * @static
- * @memberOf _
- * @category Functions
- * @param {Function} func The function to partially apply arguments to.
- * @param {...*} [arg] Arguments to be partially applied.
- * @returns {Function} Returns the new partially applied function.
- * @example
- *
- * var greet = function(greeting, name) { return greeting + ' ' + name; };
- * var hi = _.partial(greet, 'hi');
- * hi('fred');
- * // => 'hi fred'
- */
-function partial(func) {
-  return createWrapper(func, 16, slice(arguments, 1));
-}
-
-module.exports = partial;
-
-},{"../internals/createWrapper":120,"../internals/slice":142}],97:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createWrapper = require('../internals/createWrapper'),
-    slice = require('../internals/slice');
-
-/**
- * This method is like `_.partial` except that `partial` arguments are
- * appended to those provided to the new function.
- *
- * @static
- * @memberOf _
- * @category Functions
- * @param {Function} func The function to partially apply arguments to.
- * @param {...*} [arg] Arguments to be partially applied.
- * @returns {Function} Returns the new partially applied function.
- * @example
- *
- * var defaultsDeep = _.partialRight(_.merge, _.defaults);
- *
- * var options = {
- *   'variable': 'data',
- *   'imports': { 'jq': $ }
- * };
- *
- * defaultsDeep(options, _.templateSettings);
- *
- * options.variable
- * // => 'data'
- *
- * options.imports
- * // => { '_': _, 'jq': $ }
- */
-function partialRight(func) {
-  return createWrapper(func, 32, null, slice(arguments, 1));
-}
-
-module.exports = partialRight;
-
-},{"../internals/createWrapper":120,"../internals/slice":142}],98:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var debounce = require('./debounce'),
-    isFunction = require('../objects/isFunction'),
-    isObject = require('../objects/isObject');
-
-/** Used as an internal `_.debounce` options object */
-var debounceOptions = {
-  'leading': false,
-  'maxWait': 0,
-  'trailing': false
-};
-
-/**
- * Creates a function that, when executed, will only call the `func` function
- * at most once per every `wait` milliseconds. Provide an options object to
- * indicate that `func` should be invoked on the leading and/or trailing edge
- * of the `wait` timeout. Subsequent calls to the throttled function will
- * return the result of the last `func` call.
- *
- * Note: If `leading` and `trailing` options are `true` `func` will be called
- * on the trailing edge of the timeout only if the the throttled function is
- * invoked more than once during the `wait` timeout.
- *
- * @static
- * @memberOf _
- * @category Functions
- * @param {Function} func The function to throttle.
- * @param {number} wait The number of milliseconds to throttle executions to.
- * @param {Object} [options] The options object.
- * @param {boolean} [options.leading=true] Specify execution on the leading edge of the timeout.
- * @param {boolean} [options.trailing=true] Specify execution on the trailing edge of the timeout.
- * @returns {Function} Returns the new throttled function.
- * @example
- *
- * // avoid excessively updating the position while scrolling
- * var throttled = _.throttle(updatePosition, 100);
- * jQuery(window).on('scroll', throttled);
- *
- * // execute `renewToken` when the click event is fired, but not more than once every 5 minutes
- * jQuery('.interactive').on('click', _.throttle(renewToken, 300000, {
- *   'trailing': false
- * }));
- */
-function throttle(func, wait, options) {
-  var leading = true,
-      trailing = true;
-
-  if (!isFunction(func)) {
-    throw new TypeError;
-  }
-  if (options === false) {
-    leading = false;
-  } else if (isObject(options)) {
-    leading = 'leading' in options ? options.leading : leading;
-    trailing = 'trailing' in options ? options.trailing : trailing;
-  }
-  debounceOptions.leading = leading;
-  debounceOptions.maxWait = wait;
-  debounceOptions.trailing = trailing;
-
-  return debounce(func, wait, debounceOptions);
-}
-
-module.exports = throttle;
-
-},{"../objects/isFunction":167,"../objects/isObject":171,"./debounce":91}],99:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createWrapper = require('../internals/createWrapper');
-
-/**
- * Creates a function that provides `value` to the wrapper function as its
- * first argument. Additional arguments provided to the function are appended
- * to those provided to the wrapper function. The wrapper is executed with
- * the `this` binding of the created function.
- *
- * @static
- * @memberOf _
- * @category Functions
- * @param {*} value The value to wrap.
- * @param {Function} wrapper The wrapper function.
- * @returns {Function} Returns the new function.
- * @example
- *
- * var p = _.wrap(_.escape, function(func, text) {
- *   return '<p>' + func(text) + '</p>';
- * });
- *
- * p('Fred, Wilma, & Pebbles');
- * // => '<p>Fred, Wilma, &amp; Pebbles</p>'
- */
-function wrap(value, wrapper) {
-  return createWrapper(wrapper, 16, [value]);
-}
-
-module.exports = wrap;
-
-},{"../internals/createWrapper":120}],100:[function(require,module,exports){
-/**
- * @license
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var arrays = require('./arrays'),
-    chaining = require('./chaining'),
-    collections = require('./collections'),
-    functions = require('./functions'),
-    objects = require('./objects'),
-    utilities = require('./utilities'),
-    forEach = require('./collections/forEach'),
-    forOwn = require('./objects/forOwn'),
-    isArray = require('./objects/isArray'),
-    lodashWrapper = require('./internals/lodashWrapper'),
-    mixin = require('./utilities/mixin'),
-    support = require('./support'),
-    templateSettings = require('./utilities/templateSettings');
-
-/**
- * Used for `Array` method references.
- *
- * Normally `Array.prototype` would suffice, however, using an array literal
- * avoids issues in Narwhal.
- */
-var arrayRef = [];
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Native method shortcuts */
-var hasOwnProperty = objectProto.hasOwnProperty;
-
-/**
- * Creates a `lodash` object which wraps the given value to enable intuitive
- * method chaining.
- *
- * In addition to Lo-Dash methods, wrappers also have the following `Array` methods:
- * `concat`, `join`, `pop`, `push`, `reverse`, `shift`, `slice`, `sort`, `splice`,
- * and `unshift`
- *
- * Chaining is supported in custom builds as long as the `value` method is
- * implicitly or explicitly included in the build.
- *
- * The chainable wrapper functions are:
- * `after`, `assign`, `bind`, `bindAll`, `bindKey`, `chain`, `compact`,
- * `compose`, `concat`, `countBy`, `create`, `createCallback`, `curry`,
- * `debounce`, `defaults`, `defer`, `delay`, `difference`, `filter`, `flatten`,
- * `forEach`, `forEachRight`, `forIn`, `forInRight`, `forOwn`, `forOwnRight`,
- * `functions`, `groupBy`, `indexBy`, `initial`, `intersection`, `invert`,
- * `invoke`, `keys`, `map`, `max`, `memoize`, `merge`, `min`, `object`, `omit`,
- * `once`, `pairs`, `partial`, `partialRight`, `pick`, `pluck`, `pull`, `push`,
- * `range`, `reject`, `remove`, `rest`, `reverse`, `shuffle`, `slice`, `sort`,
- * `sortBy`, `splice`, `tap`, `throttle`, `times`, `toArray`, `transform`,
- * `union`, `uniq`, `unshift`, `unzip`, `values`, `where`, `without`, `wrap`,
- * and `zip`
- *
- * The non-chainable wrapper functions are:
- * `clone`, `cloneDeep`, `contains`, `escape`, `every`, `find`, `findIndex`,
- * `findKey`, `findLast`, `findLastIndex`, `findLastKey`, `has`, `identity`,
- * `indexOf`, `isArguments`, `isArray`, `isBoolean`, `isDate`, `isElement`,
- * `isEmpty`, `isEqual`, `isFinite`, `isFunction`, `isNaN`, `isNull`, `isNumber`,
- * `isObject`, `isPlainObject`, `isRegExp`, `isString`, `isUndefined`, `join`,
- * `lastIndexOf`, `mixin`, `noConflict`, `parseInt`, `pop`, `random`, `reduce`,
- * `reduceRight`, `result`, `shift`, `size`, `some`, `sortedIndex`, `runInContext`,
- * `template`, `unescape`, `uniqueId`, and `value`
- *
- * The wrapper functions `first` and `last` return wrapped values when `n` is
- * provided, otherwise they return unwrapped values.
- *
- * Explicit chaining can be enabled by using the `_.chain` method.
- *
- * @name _
- * @constructor
- * @category Chaining
- * @param {*} value The value to wrap in a `lodash` instance.
- * @returns {Object} Returns a `lodash` instance.
- * @example
- *
- * var wrapped = _([1, 2, 3]);
- *
- * // returns an unwrapped value
- * wrapped.reduce(function(sum, num) {
- *   return sum + num;
- * });
- * // => 6
- *
- * // returns a wrapped value
- * var squares = wrapped.map(function(num) {
- *   return num * num;
- * });
- *
- * _.isArray(squares);
- * // => false
- *
- * _.isArray(squares.value());
- * // => true
- */
-function lodash(value) {
-  // don't wrap if already wrapped, even if wrapped by a different `lodash` constructor
-  return (value && typeof value == 'object' && !isArray(value) && hasOwnProperty.call(value, '__wrapped__'))
-   ? value
-   : new lodashWrapper(value);
-}
-// ensure `new lodashWrapper` is an instance of `lodash`
-lodashWrapper.prototype = lodash.prototype;
-
-// wrap `_.mixin` so it works when provided only one argument
-mixin = (function(fn) {
-  var functions = objects.functions;
-  return function(object, source, options) {
-    if (!source || (!options && !functions(source).length)) {
-      if (options == null) {
-        options = source;
-      }
-      source = object;
-      object = lodash;
-    }
-    return fn(object, source, options);
-  };
-}(mixin));
-
-// add functions that return wrapped values when chaining
-lodash.after = functions.after;
-lodash.assign = objects.assign;
-lodash.at = collections.at;
-lodash.bind = functions.bind;
-lodash.bindAll = functions.bindAll;
-lodash.bindKey = functions.bindKey;
-lodash.chain = chaining.chain;
-lodash.compact = arrays.compact;
-lodash.compose = functions.compose;
-lodash.constant = utilities.constant;
-lodash.countBy = collections.countBy;
-lodash.create = objects.create;
-lodash.createCallback = functions.createCallback;
-lodash.curry = functions.curry;
-lodash.debounce = functions.debounce;
-lodash.defaults = objects.defaults;
-lodash.defer = functions.defer;
-lodash.delay = functions.delay;
-lodash.difference = arrays.difference;
-lodash.filter = collections.filter;
-lodash.flatten = arrays.flatten;
-lodash.forEach = forEach;
-lodash.forEachRight = collections.forEachRight;
-lodash.forIn = objects.forIn;
-lodash.forInRight = objects.forInRight;
-lodash.forOwn = forOwn;
-lodash.forOwnRight = objects.forOwnRight;
-lodash.functions = objects.functions;
-lodash.groupBy = collections.groupBy;
-lodash.indexBy = collections.indexBy;
-lodash.initial = arrays.initial;
-lodash.intersection = arrays.intersection;
-lodash.invert = objects.invert;
-lodash.invoke = collections.invoke;
-lodash.keys = objects.keys;
-lodash.map = collections.map;
-lodash.mapValues = objects.mapValues;
-lodash.max = collections.max;
-lodash.memoize = functions.memoize;
-lodash.merge = objects.merge;
-lodash.min = collections.min;
-lodash.omit = objects.omit;
-lodash.once = functions.once;
-lodash.pairs = objects.pairs;
-lodash.partial = functions.partial;
-lodash.partialRight = functions.partialRight;
-lodash.pick = objects.pick;
-lodash.pluck = collections.pluck;
-lodash.property = utilities.property;
-lodash.pull = arrays.pull;
-lodash.range = arrays.range;
-lodash.reject = collections.reject;
-lodash.remove = arrays.remove;
-lodash.rest = arrays.rest;
-lodash.shuffle = collections.shuffle;
-lodash.sortBy = collections.sortBy;
-lodash.tap = chaining.tap;
-lodash.throttle = functions.throttle;
-lodash.times = utilities.times;
-lodash.toArray = collections.toArray;
-lodash.transform = objects.transform;
-lodash.union = arrays.union;
-lodash.uniq = arrays.uniq;
-lodash.values = objects.values;
-lodash.where = collections.where;
-lodash.without = arrays.without;
-lodash.wrap = functions.wrap;
-lodash.xor = arrays.xor;
-lodash.zip = arrays.zip;
-lodash.zipObject = arrays.zipObject;
-
-// add aliases
-lodash.collect = collections.map;
-lodash.drop = arrays.rest;
-lodash.each = forEach;
-lodash.eachRight = collections.forEachRight;
-lodash.extend = objects.assign;
-lodash.methods = objects.functions;
-lodash.object = arrays.zipObject;
-lodash.select = collections.filter;
-lodash.tail = arrays.rest;
-lodash.unique = arrays.uniq;
-lodash.unzip = arrays.zip;
-
-// add functions to `lodash.prototype`
-mixin(lodash);
-
-// add functions that return unwrapped values when chaining
-lodash.clone = objects.clone;
-lodash.cloneDeep = objects.cloneDeep;
-lodash.contains = collections.contains;
-lodash.escape = utilities.escape;
-lodash.every = collections.every;
-lodash.find = collections.find;
-lodash.findIndex = arrays.findIndex;
-lodash.findKey = objects.findKey;
-lodash.findLast = collections.findLast;
-lodash.findLastIndex = arrays.findLastIndex;
-lodash.findLastKey = objects.findLastKey;
-lodash.has = objects.has;
-lodash.identity = utilities.identity;
-lodash.indexOf = arrays.indexOf;
-lodash.isArguments = objects.isArguments;
-lodash.isArray = isArray;
-lodash.isBoolean = objects.isBoolean;
-lodash.isDate = objects.isDate;
-lodash.isElement = objects.isElement;
-lodash.isEmpty = objects.isEmpty;
-lodash.isEqual = objects.isEqual;
-lodash.isFinite = objects.isFinite;
-lodash.isFunction = objects.isFunction;
-lodash.isNaN = objects.isNaN;
-lodash.isNull = objects.isNull;
-lodash.isNumber = objects.isNumber;
-lodash.isObject = objects.isObject;
-lodash.isPlainObject = objects.isPlainObject;
-lodash.isRegExp = objects.isRegExp;
-lodash.isString = objects.isString;
-lodash.isUndefined = objects.isUndefined;
-lodash.lastIndexOf = arrays.lastIndexOf;
-lodash.mixin = mixin;
-lodash.noConflict = utilities.noConflict;
-lodash.noop = utilities.noop;
-lodash.now = utilities.now;
-lodash.parseInt = utilities.parseInt;
-lodash.random = utilities.random;
-lodash.reduce = collections.reduce;
-lodash.reduceRight = collections.reduceRight;
-lodash.result = utilities.result;
-lodash.size = collections.size;
-lodash.some = collections.some;
-lodash.sortedIndex = arrays.sortedIndex;
-lodash.template = utilities.template;
-lodash.unescape = utilities.unescape;
-lodash.uniqueId = utilities.uniqueId;
-
-// add aliases
-lodash.all = collections.every;
-lodash.any = collections.some;
-lodash.detect = collections.find;
-lodash.findWhere = collections.find;
-lodash.foldl = collections.reduce;
-lodash.foldr = collections.reduceRight;
-lodash.include = collections.contains;
-lodash.inject = collections.reduce;
-
-mixin(function() {
-  var source = {}
-  forOwn(lodash, function(func, methodName) {
-    if (!lodash.prototype[methodName]) {
-      source[methodName] = func;
-    }
-  });
-  return source;
-}(), false);
-
-// add functions capable of returning wrapped and unwrapped values when chaining
-lodash.first = arrays.first;
-lodash.last = arrays.last;
-lodash.sample = collections.sample;
-
-// add aliases
-lodash.take = arrays.first;
-lodash.head = arrays.first;
-
-forOwn(lodash, function(func, methodName) {
-  var callbackable = methodName !== 'sample';
-  if (!lodash.prototype[methodName]) {
-    lodash.prototype[methodName]= function(n, guard) {
-      var chainAll = this.__chain__,
-          result = func(this.__wrapped__, n, guard);
-
-      return !chainAll && (n == null || (guard && !(callbackable && typeof n == 'function')))
-        ? result
-        : new lodashWrapper(result, chainAll);
-    };
-  }
-});
-
-/**
- * The semantic version number.
- *
- * @static
- * @memberOf _
- * @type string
- */
-lodash.VERSION = '2.4.1';
-
-// add "Chaining" functions to the wrapper
-lodash.prototype.chain = chaining.wrapperChain;
-lodash.prototype.toString = chaining.wrapperToString;
-lodash.prototype.value = chaining.wrapperValueOf;
-lodash.prototype.valueOf = chaining.wrapperValueOf;
-
-// add `Array` functions that return unwrapped values
-forEach(['join', 'pop', 'shift'], function(methodName) {
-  var func = arrayRef[methodName];
-  lodash.prototype[methodName] = function() {
-    var chainAll = this.__chain__,
-        result = func.apply(this.__wrapped__, arguments);
-
-    return chainAll
-      ? new lodashWrapper(result, chainAll)
-      : result;
-  };
-});
-
-// add `Array` functions that return the existing wrapped value
-forEach(['push', 'reverse', 'sort', 'unshift'], function(methodName) {
-  var func = arrayRef[methodName];
-  lodash.prototype[methodName] = function() {
-    func.apply(this.__wrapped__, arguments);
-    return this;
-  };
-});
-
-// add `Array` functions that return new wrapped values
-forEach(['concat', 'slice', 'splice'], function(methodName) {
-  var func = arrayRef[methodName];
-  lodash.prototype[methodName] = function() {
-    return new lodashWrapper(func.apply(this.__wrapped__, arguments), this.__chain__);
-  };
-});
-
-lodash.support = support;
-(lodash.templateSettings = utilities.templateSettings).imports._ = lodash;
-module.exports = lodash;
-
-},{"./arrays":27,"./chaining":50,"./collections":56,"./collections/forEach":64,"./functions":83,"./internals/lodashWrapper":130,"./objects":144,"./objects/forOwn":154,"./objects/isArray":160,"./support":184,"./utilities":185,"./utilities/mixin":189,"./utilities/templateSettings":198}],101:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** Used to pool arrays and objects used internally */
-var arrayPool = [];
-
-module.exports = arrayPool;
-
-},{}],102:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseCreate = require('./baseCreate'),
-    isObject = require('../objects/isObject'),
-    setBindData = require('./setBindData'),
-    slice = require('./slice');
-
-/**
- * Used for `Array` method references.
- *
- * Normally `Array.prototype` would suffice, however, using an array literal
- * avoids issues in Narwhal.
- */
-var arrayRef = [];
-
-/** Native method shortcuts */
-var push = arrayRef.push;
-
-/**
- * The base implementation of `_.bind` that creates the bound function and
- * sets its meta data.
- *
- * @private
- * @param {Array} bindData The bind data array.
- * @returns {Function} Returns the new bound function.
- */
-function baseBind(bindData) {
-  var func = bindData[0],
-      partialArgs = bindData[2],
-      thisArg = bindData[4];
-
-  function bound() {
-    // `Function#bind` spec
-    // http://es5.github.io/#x15.3.4.5
-    if (partialArgs) {
-      // avoid `arguments` object deoptimizations by using `slice` instead
-      // of `Array.prototype.slice.call` and not assigning `arguments` to a
-      // variable as a ternary expression
-      var args = slice(partialArgs);
-      push.apply(args, arguments);
-    }
-    // mimic the constructor's `return` behavior
-    // http://es5.github.io/#x13.2.2
-    if (this instanceof bound) {
-      // ensure `new bound` is an instance of `func`
-      var thisBinding = baseCreate(func.prototype),
-          result = func.apply(thisBinding, args || arguments);
-      return isObject(result) ? result : thisBinding;
-    }
-    return func.apply(thisArg, args || arguments);
-  }
-  setBindData(bound, bindData);
-  return bound;
-}
-
-module.exports = baseBind;
-
-},{"../objects/isObject":171,"./baseCreate":104,"./setBindData":139,"./slice":142}],103:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var assign = require('../objects/assign'),
-    forEach = require('../collections/forEach'),
-    forOwn = require('../objects/forOwn'),
-    getArray = require('./getArray'),
-    isArray = require('../objects/isArray'),
-    isObject = require('../objects/isObject'),
-    releaseArray = require('./releaseArray'),
-    slice = require('./slice');
-
-/** Used to match regexp flags from their coerced string values */
-var reFlags = /\w*$/;
-
-/** `Object#toString` result shortcuts */
-var argsClass = '[object Arguments]',
-    arrayClass = '[object Array]',
-    boolClass = '[object Boolean]',
-    dateClass = '[object Date]',
-    funcClass = '[object Function]',
-    numberClass = '[object Number]',
-    objectClass = '[object Object]',
-    regexpClass = '[object RegExp]',
-    stringClass = '[object String]';
-
-/** Used to identify object classifications that `_.clone` supports */
-var cloneableClasses = {};
-cloneableClasses[funcClass] = false;
-cloneableClasses[argsClass] = cloneableClasses[arrayClass] =
-cloneableClasses[boolClass] = cloneableClasses[dateClass] =
-cloneableClasses[numberClass] = cloneableClasses[objectClass] =
-cloneableClasses[regexpClass] = cloneableClasses[stringClass] = true;
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Used to resolve the internal [[Class]] of values */
-var toString = objectProto.toString;
-
-/** Native method shortcuts */
-var hasOwnProperty = objectProto.hasOwnProperty;
-
-/** Used to lookup a built-in constructor by [[Class]] */
-var ctorByClass = {};
-ctorByClass[arrayClass] = Array;
-ctorByClass[boolClass] = Boolean;
-ctorByClass[dateClass] = Date;
-ctorByClass[funcClass] = Function;
-ctorByClass[objectClass] = Object;
-ctorByClass[numberClass] = Number;
-ctorByClass[regexpClass] = RegExp;
-ctorByClass[stringClass] = String;
-
-/**
- * The base implementation of `_.clone` without argument juggling or support
- * for `thisArg` binding.
- *
- * @private
- * @param {*} value The value to clone.
- * @param {boolean} [isDeep=false] Specify a deep clone.
- * @param {Function} [callback] The function to customize cloning values.
- * @param {Array} [stackA=[]] Tracks traversed source objects.
- * @param {Array} [stackB=[]] Associates clones with source counterparts.
- * @returns {*} Returns the cloned value.
- */
-function baseClone(value, isDeep, callback, stackA, stackB) {
-  if (callback) {
-    var result = callback(value);
-    if (typeof result != 'undefined') {
-      return result;
-    }
-  }
-  // inspect [[Class]]
-  var isObj = isObject(value);
-  if (isObj) {
-    var className = toString.call(value);
-    if (!cloneableClasses[className]) {
-      return value;
-    }
-    var ctor = ctorByClass[className];
-    switch (className) {
-      case boolClass:
-      case dateClass:
-        return new ctor(+value);
-
-      case numberClass:
-      case stringClass:
-        return new ctor(value);
-
-      case regexpClass:
-        result = ctor(value.source, reFlags.exec(value));
-        result.lastIndex = value.lastIndex;
-        return result;
-    }
-  } else {
-    return value;
-  }
-  var isArr = isArray(value);
-  if (isDeep) {
-    // check for circular references and return corresponding clone
-    var initedStack = !stackA;
-    stackA || (stackA = getArray());
-    stackB || (stackB = getArray());
-
-    var length = stackA.length;
-    while (length--) {
-      if (stackA[length] == value) {
-        return stackB[length];
-      }
-    }
-    result = isArr ? ctor(value.length) : {};
-  }
-  else {
-    result = isArr ? slice(value) : assign({}, value);
-  }
-  // add array properties assigned by `RegExp#exec`
-  if (isArr) {
-    if (hasOwnProperty.call(value, 'index')) {
-      result.index = value.index;
-    }
-    if (hasOwnProperty.call(value, 'input')) {
-      result.input = value.input;
-    }
-  }
-  // exit for shallow clone
-  if (!isDeep) {
-    return result;
-  }
-  // add the source value to the stack of traversed objects
-  // and associate it with its clone
-  stackA.push(value);
-  stackB.push(result);
-
-  // recursively populate clone (susceptible to call stack limits)
-  (isArr ? forEach : forOwn)(value, function(objValue, key) {
-    result[key] = baseClone(objValue, isDeep, callback, stackA, stackB);
-  });
-
-  if (initedStack) {
-    releaseArray(stackA);
-    releaseArray(stackB);
-  }
-  return result;
-}
-
-module.exports = baseClone;
-
-},{"../collections/forEach":64,"../objects/assign":145,"../objects/forOwn":154,"../objects/isArray":160,"../objects/isObject":171,"./getArray":123,"./releaseArray":137,"./slice":142}],104:[function(require,module,exports){
-(function (global){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isNative = require('./isNative'),
-    isObject = require('../objects/isObject'),
-    noop = require('../utilities/noop');
-
-/* Native method shortcuts for methods with the same name as other `lodash` methods */
-var nativeCreate = isNative(nativeCreate = Object.create) && nativeCreate;
-
-/**
- * The base implementation of `_.create` without support for assigning
- * properties to the created object.
- *
- * @private
- * @param {Object} prototype The object to inherit from.
- * @returns {Object} Returns the new object.
- */
-function baseCreate(prototype, properties) {
-  return isObject(prototype) ? nativeCreate(prototype) : {};
-}
-// fallback for browsers without `Object.create`
-if (!nativeCreate) {
-  baseCreate = (function() {
-    function Object() {}
-    return function(prototype) {
-      if (isObject(prototype)) {
-        Object.prototype = prototype;
-        var result = new Object;
-        Object.prototype = null;
-      }
-      return result || global.Object();
-    };
-  }());
-}
-
-module.exports = baseCreate;
-
-}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
-},{"../objects/isObject":171,"../utilities/noop":191,"./isNative":127}],105:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var bind = require('../functions/bind'),
-    identity = require('../utilities/identity'),
-    setBindData = require('./setBindData'),
-    support = require('../support');
-
-/** Used to detected named functions */
-var reFuncName = /^\s*function[ \n\r\t]+\w/;
-
-/** Used to detect functions containing a `this` reference */
-var reThis = /\bthis\b/;
-
-/** Native method shortcuts */
-var fnToString = Function.prototype.toString;
-
-/**
- * The base implementation of `_.createCallback` without support for creating
- * "_.pluck" or "_.where" style callbacks.
- *
- * @private
- * @param {*} [func=identity] The value to convert to a callback.
- * @param {*} [thisArg] The `this` binding of the created callback.
- * @param {number} [argCount] The number of arguments the callback accepts.
- * @returns {Function} Returns a callback function.
- */
-function baseCreateCallback(func, thisArg, argCount) {
-  if (typeof func != 'function') {
-    return identity;
-  }
-  // exit early for no `thisArg` or already bound by `Function#bind`
-  if (typeof thisArg == 'undefined' || !('prototype' in func)) {
-    return func;
-  }
-  var bindData = func.__bindData__;
-  if (typeof bindData == 'undefined') {
-    if (support.funcNames) {
-      bindData = !func.name;
-    }
-    bindData = bindData || !support.funcDecomp;
-    if (!bindData) {
-      var source = fnToString.call(func);
-      if (!support.funcNames) {
-        bindData = !reFuncName.test(source);
-      }
-      if (!bindData) {
-        // checks if `func` references the `this` keyword and stores the result
-        bindData = reThis.test(source);
-        setBindData(func, bindData);
-      }
-    }
-  }
-  // exit early if there are no `this` references or `func` is bound
-  if (bindData === false || (bindData !== true && bindData[1] & 1)) {
-    return func;
-  }
-  switch (argCount) {
-    case 1: return function(value) {
-      return func.call(thisArg, value);
-    };
-    case 2: return function(a, b) {
-      return func.call(thisArg, a, b);
-    };
-    case 3: return function(value, index, collection) {
-      return func.call(thisArg, value, index, collection);
-    };
-    case 4: return function(accumulator, value, index, collection) {
-      return func.call(thisArg, accumulator, value, index, collection);
-    };
-  }
-  return bind(func, thisArg);
-}
-
-module.exports = baseCreateCallback;
-
-},{"../functions/bind":85,"../support":184,"../utilities/identity":188,"./setBindData":139}],106:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseCreate = require('./baseCreate'),
-    isObject = require('../objects/isObject'),
-    setBindData = require('./setBindData'),
-    slice = require('./slice');
-
-/**
- * Used for `Array` method references.
- *
- * Normally `Array.prototype` would suffice, however, using an array literal
- * avoids issues in Narwhal.
- */
-var arrayRef = [];
-
-/** Native method shortcuts */
-var push = arrayRef.push;
-
-/**
- * The base implementation of `createWrapper` that creates the wrapper and
- * sets its meta data.
- *
- * @private
- * @param {Array} bindData The bind data array.
- * @returns {Function} Returns the new function.
- */
-function baseCreateWrapper(bindData) {
-  var func = bindData[0],
-      bitmask = bindData[1],
-      partialArgs = bindData[2],
-      partialRightArgs = bindData[3],
-      thisArg = bindData[4],
-      arity = bindData[5];
-
-  var isBind = bitmask & 1,
-      isBindKey = bitmask & 2,
-      isCurry = bitmask & 4,
-      isCurryBound = bitmask & 8,
-      key = func;
-
-  function bound() {
-    var thisBinding = isBind ? thisArg : this;
-    if (partialArgs) {
-      var args = slice(partialArgs);
-      push.apply(args, arguments);
-    }
-    if (partialRightArgs || isCurry) {
-      args || (args = slice(arguments));
-      if (partialRightArgs) {
-        push.apply(args, partialRightArgs);
-      }
-      if (isCurry && args.length < arity) {
-        bitmask |= 16 & ~32;
-        return baseCreateWrapper([func, (isCurryBound ? bitmask : bitmask & ~3), args, null, thisArg, arity]);
-      }
-    }
-    args || (args = arguments);
-    if (isBindKey) {
-      func = thisBinding[key];
-    }
-    if (this instanceof bound) {
-      thisBinding = baseCreate(func.prototype);
-      var result = func.apply(thisBinding, args);
-      return isObject(result) ? result : thisBinding;
-    }
-    return func.apply(thisBinding, args);
-  }
-  setBindData(bound, bindData);
-  return bound;
-}
-
-module.exports = baseCreateWrapper;
-
-},{"../objects/isObject":171,"./baseCreate":104,"./setBindData":139,"./slice":142}],107:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseIndexOf = require('./baseIndexOf'),
-    cacheIndexOf = require('./cacheIndexOf'),
-    createCache = require('./createCache'),
-    largeArraySize = require('./largeArraySize'),
-    releaseObject = require('./releaseObject');
-
-/**
- * The base implementation of `_.difference` that accepts a single array
- * of values to exclude.
- *
- * @private
- * @param {Array} array The array to process.
- * @param {Array} [values] The array of values to exclude.
- * @returns {Array} Returns a new array of filtered values.
- */
-function baseDifference(array, values) {
-  var index = -1,
-      indexOf = baseIndexOf,
-      length = array ? array.length : 0,
-      isLarge = length >= largeArraySize,
-      result = [];
-
-  if (isLarge) {
-    var cache = createCache(values);
-    if (cache) {
-      indexOf = cacheIndexOf;
-      values = cache;
-    } else {
-      isLarge = false;
-    }
-  }
-  while (++index < length) {
-    var value = array[index];
-    if (indexOf(values, value) < 0) {
-      result.push(value);
-    }
-  }
-  if (isLarge) {
-    releaseObject(values);
-  }
-  return result;
-}
-
-module.exports = baseDifference;
-
-},{"./baseIndexOf":109,"./cacheIndexOf":114,"./createCache":119,"./largeArraySize":129,"./releaseObject":138}],108:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isArguments = require('../objects/isArguments'),
-    isArray = require('../objects/isArray');
-
-/**
- * The base implementation of `_.flatten` without support for callback
- * shorthands or `thisArg` binding.
- *
- * @private
- * @param {Array} array The array to flatten.
- * @param {boolean} [isShallow=false] A flag to restrict flattening to a single level.
- * @param {boolean} [isStrict=false] A flag to restrict flattening to arrays and `arguments` objects.
- * @param {number} [fromIndex=0] The index to start from.
- * @returns {Array} Returns a new flattened array.
- */
-function baseFlatten(array, isShallow, isStrict, fromIndex) {
-  var index = (fromIndex || 0) - 1,
-      length = array ? array.length : 0,
-      result = [];
-
-  while (++index < length) {
-    var value = array[index];
-
-    if (value && typeof value == 'object' && typeof value.length == 'number'
-        && (isArray(value) || isArguments(value))) {
-      // recursively flatten arrays (susceptible to call stack limits)
-      if (!isShallow) {
-        value = baseFlatten(value, isShallow, isStrict);
-      }
-      var valIndex = -1,
-          valLength = value.length,
-          resIndex = result.length;
-
-      result.length += valLength;
-      while (++valIndex < valLength) {
-        result[resIndex++] = value[valIndex];
-      }
-    } else if (!isStrict) {
-      result.push(value);
-    }
-  }
-  return result;
-}
-
-module.exports = baseFlatten;
-
-},{"../objects/isArguments":159,"../objects/isArray":160}],109:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * The base implementation of `_.indexOf` without support for binary searches
- * or `fromIndex` constraints.
- *
- * @private
- * @param {Array} array The array to search.
- * @param {*} value The value to search for.
- * @param {number} [fromIndex=0] The index to search from.
- * @returns {number} Returns the index of the matched value or `-1`.
- */
-function baseIndexOf(array, value, fromIndex) {
-  var index = (fromIndex || 0) - 1,
-      length = array ? array.length : 0;
-
-  while (++index < length) {
-    if (array[index] === value) {
-      return index;
-    }
-  }
-  return -1;
-}
-
-module.exports = baseIndexOf;
-
-},{}],110:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var forIn = require('../objects/forIn'),
-    getArray = require('./getArray'),
-    isFunction = require('../objects/isFunction'),
-    objectTypes = require('./objectTypes'),
-    releaseArray = require('./releaseArray');
-
-/** `Object#toString` result shortcuts */
-var argsClass = '[object Arguments]',
-    arrayClass = '[object Array]',
-    boolClass = '[object Boolean]',
-    dateClass = '[object Date]',
-    numberClass = '[object Number]',
-    objectClass = '[object Object]',
-    regexpClass = '[object RegExp]',
-    stringClass = '[object String]';
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Used to resolve the internal [[Class]] of values */
-var toString = objectProto.toString;
-
-/** Native method shortcuts */
-var hasOwnProperty = objectProto.hasOwnProperty;
-
-/**
- * The base implementation of `_.isEqual`, without support for `thisArg` binding,
- * that allows partial "_.where" style comparisons.
- *
- * @private
- * @param {*} a The value to compare.
- * @param {*} b The other value to compare.
- * @param {Function} [callback] The function to customize comparing values.
- * @param {Function} [isWhere=false] A flag to indicate performing partial comparisons.
- * @param {Array} [stackA=[]] Tracks traversed `a` objects.
- * @param {Array} [stackB=[]] Tracks traversed `b` objects.
- * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
- */
-function baseIsEqual(a, b, callback, isWhere, stackA, stackB) {
-  // used to indicate that when comparing objects, `a` has at least the properties of `b`
-  if (callback) {
-    var result = callback(a, b);
-    if (typeof result != 'undefined') {
-      return !!result;
-    }
-  }
-  // exit early for identical values
-  if (a === b) {
-    // treat `+0` vs. `-0` as not equal
-    return a !== 0 || (1 / a == 1 / b);
-  }
-  var type = typeof a,
-      otherType = typeof b;
-
-  // exit early for unlike primitive values
-  if (a === a &&
-      !(a && objectTypes[type]) &&
-      !(b && objectTypes[otherType])) {
-    return false;
-  }
-  // exit early for `null` and `undefined` avoiding ES3's Function#call behavior
-  // http://es5.github.io/#x15.3.4.4
-  if (a == null || b == null) {
-    return a === b;
-  }
-  // compare [[Class]] names
-  var className = toString.call(a),
-      otherClass = toString.call(b);
-
-  if (className == argsClass) {
-    className = objectClass;
-  }
-  if (otherClass == argsClass) {
-    otherClass = objectClass;
-  }
-  if (className != otherClass) {
-    return false;
-  }
-  switch (className) {
-    case boolClass:
-    case dateClass:
-      // coerce dates and booleans to numbers, dates to milliseconds and booleans
-      // to `1` or `0` treating invalid dates coerced to `NaN` as not equal
-      return +a == +b;
-
-    case numberClass:
-      // treat `NaN` vs. `NaN` as equal
-      return (a != +a)
-        ? b != +b
-        // but treat `+0` vs. `-0` as not equal
-        : (a == 0 ? (1 / a == 1 / b) : a == +b);
-
-    case regexpClass:
-    case stringClass:
-      // coerce regexes to strings (http://es5.github.io/#x15.10.6.4)
-      // treat string primitives and their corresponding object instances as equal
-      return a == String(b);
-  }
-  var isArr = className == arrayClass;
-  if (!isArr) {
-    // unwrap any `lodash` wrapped values
-    var aWrapped = hasOwnProperty.call(a, '__wrapped__'),
-        bWrapped = hasOwnProperty.call(b, '__wrapped__');
-
-    if (aWrapped || bWrapped) {
-      return baseIsEqual(aWrapped ? a.__wrapped__ : a, bWrapped ? b.__wrapped__ : b, callback, isWhere, stackA, stackB);
-    }
-    // exit for functions and DOM nodes
-    if (className != objectClass) {
-      return false;
-    }
-    // in older versions of Opera, `arguments` objects have `Array` constructors
-    var ctorA = a.constructor,
-        ctorB = b.constructor;
-
-    // non `Object` object instances with different constructors are not equal
-    if (ctorA != ctorB &&
-          !(isFunction(ctorA) && ctorA instanceof ctorA && isFunction(ctorB) && ctorB instanceof ctorB) &&
-          ('constructor' in a && 'constructor' in b)
-        ) {
-      return false;
-    }
-  }
-  // assume cyclic structures are equal
-  // the algorithm for detecting cyclic structures is adapted from ES 5.1
-  // section 15.12.3, abstract operation `JO` (http://es5.github.io/#x15.12.3)
-  var initedStack = !stackA;
-  stackA || (stackA = getArray());
-  stackB || (stackB = getArray());
-
-  var length = stackA.length;
-  while (length--) {
-    if (stackA[length] == a) {
-      return stackB[length] == b;
-    }
-  }
-  var size = 0;
-  result = true;
-
-  // add `a` and `b` to the stack of traversed objects
-  stackA.push(a);
-  stackB.push(b);
-
-  // recursively compare objects and arrays (susceptible to call stack limits)
-  if (isArr) {
-    // compare lengths to determine if a deep comparison is necessary
-    length = a.length;
-    size = b.length;
-    result = size == length;
-
-    if (result || isWhere) {
-      // deep compare the contents, ignoring non-numeric properties
-      while (size--) {
-        var index = length,
-            value = b[size];
-
-        if (isWhere) {
-          while (index--) {
-            if ((result = baseIsEqual(a[index], value, callback, isWhere, stackA, stackB))) {
-              break;
-            }
-          }
-        } else if (!(result = baseIsEqual(a[size], value, callback, isWhere, stackA, stackB))) {
-          break;
-        }
-      }
-    }
-  }
-  else {
-    // deep compare objects using `forIn`, instead of `forOwn`, to avoid `Object.keys`
-    // which, in this case, is more costly
-    forIn(b, function(value, key, b) {
-      if (hasOwnProperty.call(b, key)) {
-        // count the number of properties.
-        size++;
-        // deep compare each property value.
-        return (result = hasOwnProperty.call(a, key) && baseIsEqual(a[key], value, callback, isWhere, stackA, stackB));
-      }
-    });
-
-    if (result && !isWhere) {
-      // ensure both objects have the same number of properties
-      forIn(a, function(value, key, a) {
-        if (hasOwnProperty.call(a, key)) {
-          // `size` will be `-1` if `a` has more properties than `b`
-          return (result = --size > -1);
-        }
-      });
-    }
-  }
-  stackA.pop();
-  stackB.pop();
-
-  if (initedStack) {
-    releaseArray(stackA);
-    releaseArray(stackB);
-  }
-  return result;
-}
-
-module.exports = baseIsEqual;
-
-},{"../objects/forIn":152,"../objects/isFunction":167,"./getArray":123,"./objectTypes":133,"./releaseArray":137}],111:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var forEach = require('../collections/forEach'),
-    forOwn = require('../objects/forOwn'),
-    isArray = require('../objects/isArray'),
-    isPlainObject = require('../objects/isPlainObject');
-
-/**
- * The base implementation of `_.merge` without argument juggling or support
- * for `thisArg` binding.
- *
- * @private
- * @param {Object} object The destination object.
- * @param {Object} source The source object.
- * @param {Function} [callback] The function to customize merging properties.
- * @param {Array} [stackA=[]] Tracks traversed source objects.
- * @param {Array} [stackB=[]] Associates values with source counterparts.
- */
-function baseMerge(object, source, callback, stackA, stackB) {
-  (isArray(source) ? forEach : forOwn)(source, function(source, key) {
-    var found,
-        isArr,
-        result = source,
-        value = object[key];
-
-    if (source && ((isArr = isArray(source)) || isPlainObject(source))) {
-      // avoid merging previously merged cyclic sources
-      var stackLength = stackA.length;
-      while (stackLength--) {
-        if ((found = stackA[stackLength] == source)) {
-          value = stackB[stackLength];
-          break;
-        }
-      }
-      if (!found) {
-        var isShallow;
-        if (callback) {
-          result = callback(value, source);
-          if ((isShallow = typeof result != 'undefined')) {
-            value = result;
-          }
-        }
-        if (!isShallow) {
-          value = isArr
-            ? (isArray(value) ? value : [])
-            : (isPlainObject(value) ? value : {});
-        }
-        // add `source` and associated `value` to the stack of traversed objects
-        stackA.push(source);
-        stackB.push(value);
-
-        // recursively merge objects and arrays (susceptible to call stack limits)
-        if (!isShallow) {
-          baseMerge(value, source, callback, stackA, stackB);
-        }
-      }
-    }
-    else {
-      if (callback) {
-        result = callback(value, source);
-        if (typeof result == 'undefined') {
-          result = source;
-        }
-      }
-      if (typeof result != 'undefined') {
-        value = result;
-      }
-    }
-    object[key] = value;
-  });
-}
-
-module.exports = baseMerge;
-
-},{"../collections/forEach":64,"../objects/forOwn":154,"../objects/isArray":160,"../objects/isPlainObject":172}],112:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** Native method shortcuts */
-var floor = Math.floor;
-
-/* Native method shortcuts for methods with the same name as other `lodash` methods */
-var nativeRandom = Math.random;
-
-/**
- * The base implementation of `_.random` without argument juggling or support
- * for returning floating-point numbers.
- *
- * @private
- * @param {number} min The minimum possible value.
- * @param {number} max The maximum possible value.
- * @returns {number} Returns a random number.
- */
-function baseRandom(min, max) {
-  return min + floor(nativeRandom() * (max - min + 1));
-}
-
-module.exports = baseRandom;
-
-},{}],113:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseIndexOf = require('./baseIndexOf'),
-    cacheIndexOf = require('./cacheIndexOf'),
-    createCache = require('./createCache'),
-    getArray = require('./getArray'),
-    largeArraySize = require('./largeArraySize'),
-    releaseArray = require('./releaseArray'),
-    releaseObject = require('./releaseObject');
-
-/**
- * The base implementation of `_.uniq` without support for callback shorthands
- * or `thisArg` binding.
- *
- * @private
- * @param {Array} array The array to process.
- * @param {boolean} [isSorted=false] A flag to indicate that `array` is sorted.
- * @param {Function} [callback] The function called per iteration.
- * @returns {Array} Returns a duplicate-value-free array.
- */
-function baseUniq(array, isSorted, callback) {
-  var index = -1,
-      indexOf = baseIndexOf,
-      length = array ? array.length : 0,
-      result = [];
-
-  var isLarge = !isSorted && length >= largeArraySize,
-      seen = (callback || isLarge) ? getArray() : result;
-
-  if (isLarge) {
-    var cache = createCache(seen);
-    indexOf = cacheIndexOf;
-    seen = cache;
-  }
-  while (++index < length) {
-    var value = array[index],
-        computed = callback ? callback(value, index, array) : value;
-
-    if (isSorted
-          ? !index || seen[seen.length - 1] !== computed
-          : indexOf(seen, computed) < 0
-        ) {
-      if (callback || isLarge) {
-        seen.push(computed);
-      }
-      result.push(value);
-    }
-  }
-  if (isLarge) {
-    releaseArray(seen.array);
-    releaseObject(seen);
-  } else if (callback) {
-    releaseArray(seen);
-  }
-  return result;
-}
-
-module.exports = baseUniq;
-
-},{"./baseIndexOf":109,"./cacheIndexOf":114,"./createCache":119,"./getArray":123,"./largeArraySize":129,"./releaseArray":137,"./releaseObject":138}],114:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseIndexOf = require('./baseIndexOf'),
-    keyPrefix = require('./keyPrefix');
-
-/**
- * An implementation of `_.contains` for cache objects that mimics the return
- * signature of `_.indexOf` by returning `0` if the value is found, else `-1`.
- *
- * @private
- * @param {Object} cache The cache object to inspect.
- * @param {*} value The value to search for.
- * @returns {number} Returns `0` if `value` is found, else `-1`.
- */
-function cacheIndexOf(cache, value) {
-  var type = typeof value;
-  cache = cache.cache;
-
-  if (type == 'boolean' || value == null) {
-    return cache[value] ? 0 : -1;
-  }
-  if (type != 'number' && type != 'string') {
-    type = 'object';
-  }
-  var key = type == 'number' ? value : keyPrefix + value;
-  cache = (cache = cache[type]) && cache[key];
-
-  return type == 'object'
-    ? (cache && baseIndexOf(cache, value) > -1 ? 0 : -1)
-    : (cache ? 0 : -1);
-}
-
-module.exports = cacheIndexOf;
-
-},{"./baseIndexOf":109,"./keyPrefix":128}],115:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var keyPrefix = require('./keyPrefix');
-
-/**
- * Adds a given value to the corresponding cache object.
- *
- * @private
- * @param {*} value The value to add to the cache.
- */
-function cachePush(value) {
-  var cache = this.cache,
-      type = typeof value;
-
-  if (type == 'boolean' || value == null) {
-    cache[value] = true;
-  } else {
-    if (type != 'number' && type != 'string') {
-      type = 'object';
-    }
-    var key = type == 'number' ? value : keyPrefix + value,
-        typeCache = cache[type] || (cache[type] = {});
-
-    if (type == 'object') {
-      (typeCache[key] || (typeCache[key] = [])).push(value);
-    } else {
-      typeCache[key] = true;
-    }
-  }
-}
-
-module.exports = cachePush;
-
-},{"./keyPrefix":128}],116:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * Used by `_.max` and `_.min` as the default callback when a given
- * collection is a string value.
- *
- * @private
- * @param {string} value The character to inspect.
- * @returns {number} Returns the code unit of given character.
- */
-function charAtCallback(value) {
-  return value.charCodeAt(0);
-}
-
-module.exports = charAtCallback;
-
-},{}],117:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * Used by `sortBy` to compare transformed `collection` elements, stable sorting
- * them in ascending order.
- *
- * @private
- * @param {Object} a The object to compare to `b`.
- * @param {Object} b The object to compare to `a`.
- * @returns {number} Returns the sort order indicator of `1` or `-1`.
- */
-function compareAscending(a, b) {
-  var ac = a.criteria,
-      bc = b.criteria,
-      index = -1,
-      length = ac.length;
-
-  while (++index < length) {
-    var value = ac[index],
-        other = bc[index];
-
-    if (value !== other) {
-      if (value > other || typeof value == 'undefined') {
-        return 1;
-      }
-      if (value < other || typeof other == 'undefined') {
-        return -1;
-      }
-    }
-  }
-  // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications
-  // that causes it, under certain circumstances, to return the same value for
-  // `a` and `b`. See https://github.com/jashkenas/underscore/pull/1247
-  //
-  // This also ensures a stable sort in V8 and other engines.
-  // See http://code.google.com/p/v8/issues/detail?id=90
-  return a.index - b.index;
-}
-
-module.exports = compareAscending;
-
-},{}],118:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback'),
-    forOwn = require('../objects/forOwn'),
-    isArray = require('../objects/isArray');
-
-/**
- * Creates a function that aggregates a collection, creating an object composed
- * of keys generated from the results of running each element of the collection
- * through a callback. The given `setter` function sets the keys and values
- * of the composed object.
- *
- * @private
- * @param {Function} setter The setter function.
- * @returns {Function} Returns the new aggregator function.
- */
-function createAggregator(setter) {
-  return function(collection, callback, thisArg) {
-    var result = {};
-    callback = createCallback(callback, thisArg, 3);
-
-    var index = -1,
-        length = collection ? collection.length : 0;
-
-    if (typeof length == 'number') {
-      while (++index < length) {
-        var value = collection[index];
-        setter(result, value, callback(value, index, collection), collection);
-      }
-    } else {
-      forOwn(collection, function(value, key, collection) {
-        setter(result, value, callback(value, key, collection), collection);
-      });
-    }
-    return result;
-  };
-}
-
-module.exports = createAggregator;
-
-},{"../functions/createCallback":89,"../objects/forOwn":154,"../objects/isArray":160}],119:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var cachePush = require('./cachePush'),
-    getObject = require('./getObject'),
-    releaseObject = require('./releaseObject');
-
-/**
- * Creates a cache object to optimize linear searches of large arrays.
- *
- * @private
- * @param {Array} [array=[]] The array to search.
- * @returns {null|Object} Returns the cache object or `null` if caching should not be used.
- */
-function createCache(array) {
-  var index = -1,
-      length = array.length,
-      first = array[0],
-      mid = array[(length / 2) | 0],
-      last = array[length - 1];
-
-  if (first && typeof first == 'object' &&
-      mid && typeof mid == 'object' && last && typeof last == 'object') {
-    return false;
-  }
-  var cache = getObject();
-  cache['false'] = cache['null'] = cache['true'] = cache['undefined'] = false;
-
-  var result = getObject();
-  result.array = array;
-  result.cache = cache;
-  result.push = cachePush;
-
-  while (++index < length) {
-    result.push(array[index]);
-  }
-  return result;
-}
-
-module.exports = createCache;
-
-},{"./cachePush":115,"./getObject":124,"./releaseObject":138}],120:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseBind = require('./baseBind'),
-    baseCreateWrapper = require('./baseCreateWrapper'),
-    isFunction = require('../objects/isFunction'),
-    slice = require('./slice');
-
-/**
- * Used for `Array` method references.
- *
- * Normally `Array.prototype` would suffice, however, using an array literal
- * avoids issues in Narwhal.
- */
-var arrayRef = [];
-
-/** Native method shortcuts */
-var push = arrayRef.push,
-    unshift = arrayRef.unshift;
-
-/**
- * Creates a function that, when called, either curries or invokes `func`
- * with an optional `this` binding and partially applied arguments.
- *
- * @private
- * @param {Function|string} func The function or method name to reference.
- * @param {number} bitmask The bitmask of method flags to compose.
- *  The bitmask may be composed of the following flags:
- *  1 - `_.bind`
- *  2 - `_.bindKey`
- *  4 - `_.curry`
- *  8 - `_.curry` (bound)
- *  16 - `_.partial`
- *  32 - `_.partialRight`
- * @param {Array} [partialArgs] An array of arguments to prepend to those
- *  provided to the new function.
- * @param {Array} [partialRightArgs] An array of arguments to append to those
- *  provided to the new function.
- * @param {*} [thisArg] The `this` binding of `func`.
- * @param {number} [arity] The arity of `func`.
- * @returns {Function} Returns the new function.
- */
-function createWrapper(func, bitmask, partialArgs, partialRightArgs, thisArg, arity) {
-  var isBind = bitmask & 1,
-      isBindKey = bitmask & 2,
-      isCurry = bitmask & 4,
-      isCurryBound = bitmask & 8,
-      isPartial = bitmask & 16,
-      isPartialRight = bitmask & 32;
-
-  if (!isBindKey && !isFunction(func)) {
-    throw new TypeError;
-  }
-  if (isPartial && !partialArgs.length) {
-    bitmask &= ~16;
-    isPartial = partialArgs = false;
-  }
-  if (isPartialRight && !partialRightArgs.length) {
-    bitmask &= ~32;
-    isPartialRight = partialRightArgs = false;
-  }
-  var bindData = func && func.__bindData__;
-  if (bindData && bindData !== true) {
-    // clone `bindData`
-    bindData = slice(bindData);
-    if (bindData[2]) {
-      bindData[2] = slice(bindData[2]);
-    }
-    if (bindData[3]) {
-      bindData[3] = slice(bindData[3]);
-    }
-    // set `thisBinding` is not previously bound
-    if (isBind && !(bindData[1] & 1)) {
-      bindData[4] = thisArg;
-    }
-    // set if previously bound but not currently (subsequent curried functions)
-    if (!isBind && bindData[1] & 1) {
-      bitmask |= 8;
-    }
-    // set curried arity if not yet set
-    if (isCurry && !(bindData[1] & 4)) {
-      bindData[5] = arity;
-    }
-    // append partial left arguments
-    if (isPartial) {
-      push.apply(bindData[2] || (bindData[2] = []), partialArgs);
-    }
-    // append partial right arguments
-    if (isPartialRight) {
-      unshift.apply(bindData[3] || (bindData[3] = []), partialRightArgs);
-    }
-    // merge flags
-    bindData[1] |= bitmask;
-    return createWrapper.apply(null, bindData);
-  }
-  // fast path for `_.bind`
-  var creater = (bitmask == 1 || bitmask === 17) ? baseBind : baseCreateWrapper;
-  return creater([func, bitmask, partialArgs, partialRightArgs, thisArg, arity]);
-}
-
-module.exports = createWrapper;
-
-},{"../objects/isFunction":167,"./baseBind":102,"./baseCreateWrapper":106,"./slice":142}],121:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var htmlEscapes = require('./htmlEscapes');
-
-/**
- * Used by `escape` to convert characters to HTML entities.
- *
- * @private
- * @param {string} match The matched character to escape.
- * @returns {string} Returns the escaped character.
- */
-function escapeHtmlChar(match) {
-  return htmlEscapes[match];
-}
-
-module.exports = escapeHtmlChar;
-
-},{"./htmlEscapes":125}],122:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** Used to escape characters for inclusion in compiled string literals */
-var stringEscapes = {
-  '\\': '\\',
-  "'": "'",
-  '\n': 'n',
-  '\r': 'r',
-  '\t': 't',
-  '\u2028': 'u2028',
-  '\u2029': 'u2029'
-};
-
-/**
- * Used by `template` to escape characters for inclusion in compiled
- * string literals.
- *
- * @private
- * @param {string} match The matched character to escape.
- * @returns {string} Returns the escaped character.
- */
-function escapeStringChar(match) {
-  return '\\' + stringEscapes[match];
-}
-
-module.exports = escapeStringChar;
-
-},{}],123:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var arrayPool = require('./arrayPool');
-
-/**
- * Gets an array from the array pool or creates a new one if the pool is empty.
- *
- * @private
- * @returns {Array} The array from the pool.
- */
-function getArray() {
-  return arrayPool.pop() || [];
-}
-
-module.exports = getArray;
-
-},{"./arrayPool":101}],124:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var objectPool = require('./objectPool');
-
-/**
- * Gets an object from the object pool or creates a new one if the pool is empty.
- *
- * @private
- * @returns {Object} The object from the pool.
- */
-function getObject() {
-  return objectPool.pop() || {
-    'array': null,
-    'cache': null,
-    'criteria': null,
-    'false': false,
-    'index': 0,
-    'null': false,
-    'number': null,
-    'object': null,
-    'push': null,
-    'string': null,
-    'true': false,
-    'undefined': false,
-    'value': null
-  };
-}
-
-module.exports = getObject;
-
-},{"./objectPool":132}],125:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * Used to convert characters to HTML entities:
- *
- * Though the `>` character is escaped for symmetry, characters like `>` and `/`
- * don't require escaping in HTML and have no special meaning unless they're part
- * of a tag or an unquoted attribute value.
- * http://mathiasbynens.be/notes/ambiguous-ampersands (under "semi-related fun fact")
- */
-var htmlEscapes = {
-  '&': '&amp;',
-  '<': '&lt;',
-  '>': '&gt;',
-  '"': '&quot;',
-  "'": '&#39;'
-};
-
-module.exports = htmlEscapes;
-
-},{}],126:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var htmlEscapes = require('./htmlEscapes'),
-    invert = require('../objects/invert');
-
-/** Used to convert HTML entities to characters */
-var htmlUnescapes = invert(htmlEscapes);
-
-module.exports = htmlUnescapes;
-
-},{"../objects/invert":158,"./htmlEscapes":125}],127:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Used to resolve the internal [[Class]] of values */
-var toString = objectProto.toString;
-
-/** Used to detect if a method is native */
-var reNative = RegExp('^' +
-  String(toString)
-    .replace(/[.*+?^${}()|[\]\\]/g, '\\$&')
-    .replace(/toString| for [^\]]+/g, '.*?') + '$'
-);
-
-/**
- * Checks if `value` is a native function.
- *
- * @private
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if the `value` is a native function, else `false`.
- */
-function isNative(value) {
-  return typeof value == 'function' && reNative.test(value);
-}
-
-module.exports = isNative;
-
-},{}],128:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** Used to prefix keys to avoid issues with `__proto__` and properties on `Object.prototype` */
-var keyPrefix = +new Date + '';
-
-module.exports = keyPrefix;
-
-},{}],129:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** Used as the size when optimizations are enabled for large arrays */
-var largeArraySize = 75;
-
-module.exports = largeArraySize;
-
-},{}],130:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * A fast path for creating `lodash` wrapper objects.
- *
- * @private
- * @param {*} value The value to wrap in a `lodash` instance.
- * @param {boolean} chainAll A flag to enable chaining for all methods
- * @returns {Object} Returns a `lodash` instance.
- */
-function lodashWrapper(value, chainAll) {
-  this.__chain__ = !!chainAll;
-  this.__wrapped__ = value;
-}
-
-module.exports = lodashWrapper;
-
-},{}],131:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** Used as the max size of the `arrayPool` and `objectPool` */
-var maxPoolSize = 40;
-
-module.exports = maxPoolSize;
-
-},{}],132:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** Used to pool arrays and objects used internally */
-var objectPool = [];
-
-module.exports = objectPool;
-
-},{}],133:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** Used to determine if values are of the language type Object */
-var objectTypes = {
-  'boolean': false,
-  'function': true,
-  'object': true,
-  'number': false,
-  'string': false,
-  'undefined': false
-};
-
-module.exports = objectTypes;
-
-},{}],134:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var htmlUnescapes = require('./htmlUnescapes'),
-    keys = require('../objects/keys');
-
-/** Used to match HTML entities and HTML characters */
-var reEscapedHtml = RegExp('(' + keys(htmlUnescapes).join('|') + ')', 'g');
-
-module.exports = reEscapedHtml;
-
-},{"../objects/keys":176,"./htmlUnescapes":126}],135:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** Used to match "interpolate" template delimiters */
-var reInterpolate = /<%=([\s\S]+?)%>/g;
-
-module.exports = reInterpolate;
-
-},{}],136:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var htmlEscapes = require('./htmlEscapes'),
-    keys = require('../objects/keys');
-
-/** Used to match HTML entities and HTML characters */
-var reUnescapedHtml = RegExp('[' + keys(htmlEscapes).join('') + ']', 'g');
-
-module.exports = reUnescapedHtml;
-
-},{"../objects/keys":176,"./htmlEscapes":125}],137:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var arrayPool = require('./arrayPool'),
-    maxPoolSize = require('./maxPoolSize');
-
-/**
- * Releases the given array back to the array pool.
- *
- * @private
- * @param {Array} [array] The array to release.
- */
-function releaseArray(array) {
-  array.length = 0;
-  if (arrayPool.length < maxPoolSize) {
-    arrayPool.push(array);
-  }
-}
-
-module.exports = releaseArray;
-
-},{"./arrayPool":101,"./maxPoolSize":131}],138:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var maxPoolSize = require('./maxPoolSize'),
-    objectPool = require('./objectPool');
-
-/**
- * Releases the given object back to the object pool.
- *
- * @private
- * @param {Object} [object] The object to release.
- */
-function releaseObject(object) {
-  var cache = object.cache;
-  if (cache) {
-    releaseObject(cache);
-  }
-  object.array = object.cache = object.criteria = object.object = object.number = object.string = object.value = null;
-  if (objectPool.length < maxPoolSize) {
-    objectPool.push(object);
-  }
-}
-
-module.exports = releaseObject;
-
-},{"./maxPoolSize":131,"./objectPool":132}],139:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isNative = require('./isNative'),
-    noop = require('../utilities/noop');
-
-/** Used as the property descriptor for `__bindData__` */
-var descriptor = {
-  'configurable': false,
-  'enumerable': false,
-  'value': null,
-  'writable': false
-};
-
-/** Used to set meta data on functions */
-var defineProperty = (function() {
-  // IE 8 only accepts DOM elements
-  try {
-    var o = {},
-        func = isNative(func = Object.defineProperty) && func,
-        result = func(o, o, o) && func;
-  } catch(e) { }
-  return result;
-}());
-
-/**
- * Sets `this` binding data on a given function.
- *
- * @private
- * @param {Function} func The function to set data on.
- * @param {Array} value The data array to set.
- */
-var setBindData = !defineProperty ? noop : function(func, value) {
-  descriptor.value = value;
-  defineProperty(func, '__bindData__', descriptor);
-};
-
-module.exports = setBindData;
-
-},{"../utilities/noop":191,"./isNative":127}],140:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var forIn = require('../objects/forIn'),
-    isFunction = require('../objects/isFunction');
-
-/** `Object#toString` result shortcuts */
-var objectClass = '[object Object]';
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Used to resolve the internal [[Class]] of values */
-var toString = objectProto.toString;
-
-/** Native method shortcuts */
-var hasOwnProperty = objectProto.hasOwnProperty;
-
-/**
- * A fallback implementation of `isPlainObject` which checks if a given value
- * is an object created by the `Object` constructor, assuming objects created
- * by the `Object` constructor have no inherited enumerable properties and that
- * there are no `Object.prototype` extensions.
- *
- * @private
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.
- */
-function shimIsPlainObject(value) {
-  var ctor,
-      result;
-
-  // avoid non Object objects, `arguments` objects, and DOM elements
-  if (!(value && toString.call(value) == objectClass) ||
-      (ctor = value.constructor, isFunction(ctor) && !(ctor instanceof ctor))) {
-    return false;
-  }
-  // In most environments an object's own properties are iterated before
-  // its inherited properties. If the last iterated property is an object's
-  // own property then there are no inherited enumerable properties.
-  forIn(value, function(value, key) {
-    result = key;
-  });
-  return typeof result == 'undefined' || hasOwnProperty.call(value, result);
-}
-
-module.exports = shimIsPlainObject;
-
-},{"../objects/forIn":152,"../objects/isFunction":167}],141:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var objectTypes = require('./objectTypes');
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Native method shortcuts */
-var hasOwnProperty = objectProto.hasOwnProperty;
-
-/**
- * A fallback implementation of `Object.keys` which produces an array of the
- * given object's own enumerable property names.
- *
- * @private
- * @type Function
- * @param {Object} object The object to inspect.
- * @returns {Array} Returns an array of property names.
- */
-var shimKeys = function(object) {
-  var index, iterable = object, result = [];
-  if (!iterable) return result;
-  if (!(objectTypes[typeof object])) return result;
-    for (index in iterable) {
-      if (hasOwnProperty.call(iterable, index)) {
-        result.push(index);
-      }
-    }
-  return result
-};
-
-module.exports = shimKeys;
-
-},{"./objectTypes":133}],142:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * Slices the `collection` from the `start` index up to, but not including,
- * the `end` index.
- *
- * Note: This function is used instead of `Array#slice` to support node lists
- * in IE < 9 and to ensure dense arrays are returned.
- *
- * @private
- * @param {Array|Object|string} collection The collection to slice.
- * @param {number} start The start index.
- * @param {number} end The end index.
- * @returns {Array} Returns the new array.
- */
-function slice(array, start, end) {
-  start || (start = 0);
-  if (typeof end == 'undefined') {
-    end = array ? array.length : 0;
-  }
-  var index = -1,
-      length = end - start || 0,
-      result = Array(length < 0 ? 0 : length);
-
-  while (++index < length) {
-    result[index] = array[start + index];
-  }
-  return result;
-}
-
-module.exports = slice;
-
-},{}],143:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var htmlUnescapes = require('./htmlUnescapes');
-
-/**
- * Used by `unescape` to convert HTML entities to characters.
- *
- * @private
- * @param {string} match The matched character to unescape.
- * @returns {string} Returns the unescaped character.
- */
-function unescapeHtmlChar(match) {
-  return htmlUnescapes[match];
-}
-
-module.exports = unescapeHtmlChar;
-
-},{"./htmlUnescapes":126}],144:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-module.exports = {
-  'assign': require('./objects/assign'),
-  'clone': require('./objects/clone'),
-  'cloneDeep': require('./objects/cloneDeep'),
-  'create': require('./objects/create'),
-  'defaults': require('./objects/defaults'),
-  'extend': require('./objects/assign'),
-  'findKey': require('./objects/findKey'),
-  'findLastKey': require('./objects/findLastKey'),
-  'forIn': require('./objects/forIn'),
-  'forInRight': require('./objects/forInRight'),
-  'forOwn': require('./objects/forOwn'),
-  'forOwnRight': require('./objects/forOwnRight'),
-  'functions': require('./objects/functions'),
-  'has': require('./objects/has'),
-  'invert': require('./objects/invert'),
-  'isArguments': require('./objects/isArguments'),
-  'isArray': require('./objects/isArray'),
-  'isBoolean': require('./objects/isBoolean'),
-  'isDate': require('./objects/isDate'),
-  'isElement': require('./objects/isElement'),
-  'isEmpty': require('./objects/isEmpty'),
-  'isEqual': require('./objects/isEqual'),
-  'isFinite': require('./objects/isFinite'),
-  'isFunction': require('./objects/isFunction'),
-  'isNaN': require('./objects/isNaN'),
-  'isNull': require('./objects/isNull'),
-  'isNumber': require('./objects/isNumber'),
-  'isObject': require('./objects/isObject'),
-  'isPlainObject': require('./objects/isPlainObject'),
-  'isRegExp': require('./objects/isRegExp'),
-  'isString': require('./objects/isString'),
-  'isUndefined': require('./objects/isUndefined'),
-  'keys': require('./objects/keys'),
-  'mapValues': require('./objects/mapValues'),
-  'merge': require('./objects/merge'),
-  'methods': require('./objects/functions'),
-  'omit': require('./objects/omit'),
-  'pairs': require('./objects/pairs'),
-  'pick': require('./objects/pick'),
-  'transform': require('./objects/transform'),
-  'values': require('./objects/values')
-};
-
-},{"./objects/assign":145,"./objects/clone":146,"./objects/cloneDeep":147,"./objects/create":148,"./objects/defaults":149,"./objects/findKey":150,"./objects/findLastKey":151,"./objects/forIn":152,"./objects/forInRight":153,"./objects/forOwn":154,"./objects/forOwnRight":155,"./objects/functions":156,"./objects/has":157,"./objects/invert":158,"./objects/isArguments":159,"./objects/isArray":160,"./objects/isBoolean":161,"./objects/isDate":162,"./objects/isElement":163,"./objects/isEmpty":164,"./objects/isEqual":165,"./objects/isFinite":166,"./objects/isFunction":167,"./objects/isNaN":168,"./objects/isNull":169,"./objects/isNumber":170,"./objects/isObject":171,"./objects/isPlainObject":172,"./objects/isRegExp":173,"./objects/isString":174,"./objects/isUndefined":175,"./objects/keys":176,"./objects/mapValues":177,"./objects/merge":178,"./objects/omit":179,"./objects/pairs":180,"./objects/pick":181,"./objects/transform":182,"./objects/values":183}],145:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseCreateCallback = require('../internals/baseCreateCallback'),
-    keys = require('./keys'),
-    objectTypes = require('../internals/objectTypes');
-
-/**
- * Assigns own enumerable properties of source object(s) to the destination
- * object. Subsequent sources will overwrite property assignments of previous
- * sources. If a callback is provided it will be executed to produce the
- * assigned values. The callback is bound to `thisArg` and invoked with two
- * arguments; (objectValue, sourceValue).
- *
- * @static
- * @memberOf _
- * @type Function
- * @alias extend
- * @category Objects
- * @param {Object} object The destination object.
- * @param {...Object} [source] The source objects.
- * @param {Function} [callback] The function to customize assigning values.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Object} Returns the destination object.
- * @example
- *
- * _.assign({ 'name': 'fred' }, { 'employer': 'slate' });
- * // => { 'name': 'fred', 'employer': 'slate' }
- *
- * var defaults = _.partialRight(_.assign, function(a, b) {
- *   return typeof a == 'undefined' ? b : a;
- * });
- *
- * var object = { 'name': 'barney' };
- * defaults(object, { 'name': 'fred', 'employer': 'slate' });
- * // => { 'name': 'barney', 'employer': 'slate' }
- */
-var assign = function(object, source, guard) {
-  var index, iterable = object, result = iterable;
-  if (!iterable) return result;
-  var args = arguments,
-      argsIndex = 0,
-      argsLength = typeof guard == 'number' ? 2 : args.length;
-  if (argsLength > 3 && typeof args[argsLength - 2] == 'function') {
-    var callback = baseCreateCallback(args[--argsLength - 1], args[argsLength--], 2);
-  } else if (argsLength > 2 && typeof args[argsLength - 1] == 'function') {
-    callback = args[--argsLength];
-  }
-  while (++argsIndex < argsLength) {
-    iterable = args[argsIndex];
-    if (iterable && objectTypes[typeof iterable]) {
-    var ownIndex = -1,
-        ownProps = objectTypes[typeof iterable] && keys(iterable),
-        length = ownProps ? ownProps.length : 0;
-
-    while (++ownIndex < length) {
-      index = ownProps[ownIndex];
-      result[index] = callback ? callback(result[index], iterable[index]) : iterable[index];
-    }
-    }
-  }
-  return result
-};
-
-module.exports = assign;
-
-},{"../internals/baseCreateCallback":105,"../internals/objectTypes":133,"./keys":176}],146:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseClone = require('../internals/baseClone'),
-    baseCreateCallback = require('../internals/baseCreateCallback');
-
-/**
- * Creates a clone of `value`. If `isDeep` is `true` nested objects will also
- * be cloned, otherwise they will be assigned by reference. If a callback
- * is provided it will be executed to produce the cloned values. If the
- * callback returns `undefined` cloning will be handled by the method instead.
- * The callback is bound to `thisArg` and invoked with one argument; (value).
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {*} value The value to clone.
- * @param {boolean} [isDeep=false] Specify a deep clone.
- * @param {Function} [callback] The function to customize cloning values.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {*} Returns the cloned value.
- * @example
- *
- * var characters = [
- *   { 'name': 'barney', 'age': 36 },
- *   { 'name': 'fred',   'age': 40 }
- * ];
- *
- * var shallow = _.clone(characters);
- * shallow[0] === characters[0];
- * // => true
- *
- * var deep = _.clone(characters, true);
- * deep[0] === characters[0];
- * // => false
- *
- * _.mixin({
- *   'clone': _.partialRight(_.clone, function(value) {
- *     return _.isElement(value) ? value.cloneNode(false) : undefined;
- *   })
- * });
- *
- * var clone = _.clone(document.body);
- * clone.childNodes.length;
- * // => 0
- */
-function clone(value, isDeep, callback, thisArg) {
-  // allows working with "Collections" methods without using their `index`
-  // and `collection` arguments for `isDeep` and `callback`
-  if (typeof isDeep != 'boolean' && isDeep != null) {
-    thisArg = callback;
-    callback = isDeep;
-    isDeep = false;
-  }
-  return baseClone(value, isDeep, typeof callback == 'function' && baseCreateCallback(callback, thisArg, 1));
-}
-
-module.exports = clone;
-
-},{"../internals/baseClone":103,"../internals/baseCreateCallback":105}],147:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseClone = require('../internals/baseClone'),
-    baseCreateCallback = require('../internals/baseCreateCallback');
-
-/**
- * Creates a deep clone of `value`. If a callback is provided it will be
- * executed to produce the cloned values. If the callback returns `undefined`
- * cloning will be handled by the method instead. The callback is bound to
- * `thisArg` and invoked with one argument; (value).
- *
- * Note: This method is loosely based on the structured clone algorithm. Functions
- * and DOM nodes are **not** cloned. The enumerable properties of `arguments` objects and
- * objects created by constructors other than `Object` are cloned to plain `Object` objects.
- * See http://www.w3.org/TR/html5/infrastructure.html#internal-structured-cloning-algorithm.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {*} value The value to deep clone.
- * @param {Function} [callback] The function to customize cloning values.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {*} Returns the deep cloned value.
- * @example
- *
- * var characters = [
- *   { 'name': 'barney', 'age': 36 },
- *   { 'name': 'fred',   'age': 40 }
- * ];
- *
- * var deep = _.cloneDeep(characters);
- * deep[0] === characters[0];
- * // => false
- *
- * var view = {
- *   'label': 'docs',
- *   'node': element
- * };
- *
- * var clone = _.cloneDeep(view, function(value) {
- *   return _.isElement(value) ? value.cloneNode(true) : undefined;
- * });
- *
- * clone.node == view.node;
- * // => false
- */
-function cloneDeep(value, callback, thisArg) {
-  return baseClone(value, true, typeof callback == 'function' && baseCreateCallback(callback, thisArg, 1));
-}
-
-module.exports = cloneDeep;
-
-},{"../internals/baseClone":103,"../internals/baseCreateCallback":105}],148:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var assign = require('./assign'),
-    baseCreate = require('../internals/baseCreate');
-
-/**
- * Creates an object that inherits from the given `prototype` object. If a
- * `properties` object is provided its own enumerable properties are assigned
- * to the created object.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {Object} prototype The object to inherit from.
- * @param {Object} [properties] The properties to assign to the object.
- * @returns {Object} Returns the new object.
- * @example
- *
- * function Shape() {
- *   this.x = 0;
- *   this.y = 0;
- * }
- *
- * function Circle() {
- *   Shape.call(this);
- * }
- *
- * Circle.prototype = _.create(Shape.prototype, { 'constructor': Circle });
- *
- * var circle = new Circle;
- * circle instanceof Circle;
- * // => true
- *
- * circle instanceof Shape;
- * // => true
- */
-function create(prototype, properties) {
-  var result = baseCreate(prototype);
-  return properties ? assign(result, properties) : result;
-}
-
-module.exports = create;
-
-},{"../internals/baseCreate":104,"./assign":145}],149:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var keys = require('./keys'),
-    objectTypes = require('../internals/objectTypes');
-
-/**
- * Assigns own enumerable properties of source object(s) to the destination
- * object for all destination properties that resolve to `undefined`. Once a
- * property is set, additional defaults of the same property will be ignored.
- *
- * @static
- * @memberOf _
- * @type Function
- * @category Objects
- * @param {Object} object The destination object.
- * @param {...Object} [source] The source objects.
- * @param- {Object} [guard] Allows working with `_.reduce` without using its
- *  `key` and `object` arguments as sources.
- * @returns {Object} Returns the destination object.
- * @example
- *
- * var object = { 'name': 'barney' };
- * _.defaults(object, { 'name': 'fred', 'employer': 'slate' });
- * // => { 'name': 'barney', 'employer': 'slate' }
- */
-var defaults = function(object, source, guard) {
-  var index, iterable = object, result = iterable;
-  if (!iterable) return result;
-  var args = arguments,
-      argsIndex = 0,
-      argsLength = typeof guard == 'number' ? 2 : args.length;
-  while (++argsIndex < argsLength) {
-    iterable = args[argsIndex];
-    if (iterable && objectTypes[typeof iterable]) {
-    var ownIndex = -1,
-        ownProps = objectTypes[typeof iterable] && keys(iterable),
-        length = ownProps ? ownProps.length : 0;
-
-    while (++ownIndex < length) {
-      index = ownProps[ownIndex];
-      if (typeof result[index] == 'undefined') result[index] = iterable[index];
-    }
-    }
-  }
-  return result
-};
-
-module.exports = defaults;
-
-},{"../internals/objectTypes":133,"./keys":176}],150:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback'),
-    forOwn = require('./forOwn');
-
-/**
- * This method is like `_.findIndex` except that it returns the key of the
- * first element that passes the callback check, instead of the element itself.
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {Object} object The object to search.
- * @param {Function|Object|string} [callback=identity] The function called per
- *  iteration. If a property name or object is provided it will be used to
- *  create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {string|undefined} Returns the key of the found element, else `undefined`.
- * @example
- *
- * var characters = {
- *   'barney': {  'age': 36, 'blocked': false },
- *   'fred': {    'age': 40, 'blocked': true },
- *   'pebbles': { 'age': 1,  'blocked': false }
- * };
- *
- * _.findKey(characters, function(chr) {
- *   return chr.age < 40;
- * });
- * // => 'barney' (property order is not guaranteed across environments)
- *
- * // using "_.where" callback shorthand
- * _.findKey(characters, { 'age': 1 });
- * // => 'pebbles'
- *
- * // using "_.pluck" callback shorthand
- * _.findKey(characters, 'blocked');
- * // => 'fred'
- */
-function findKey(object, callback, thisArg) {
-  var result;
-  callback = createCallback(callback, thisArg, 3);
-  forOwn(object, function(value, key, object) {
-    if (callback(value, key, object)) {
-      result = key;
-      return false;
-    }
-  });
-  return result;
-}
-
-module.exports = findKey;
-
-},{"../functions/createCallback":89,"./forOwn":154}],151:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback'),
-    forOwnRight = require('./forOwnRight');
-
-/**
- * This method is like `_.findKey` except that it iterates over elements
- * of a `collection` in the opposite order.
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {Object} object The object to search.
- * @param {Function|Object|string} [callback=identity] The function called per
- *  iteration. If a property name or object is provided it will be used to
- *  create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {string|undefined} Returns the key of the found element, else `undefined`.
- * @example
- *
- * var characters = {
- *   'barney': {  'age': 36, 'blocked': true },
- *   'fred': {    'age': 40, 'blocked': false },
- *   'pebbles': { 'age': 1,  'blocked': true }
- * };
- *
- * _.findLastKey(characters, function(chr) {
- *   return chr.age < 40;
- * });
- * // => returns `pebbles`, assuming `_.findKey` returns `barney`
- *
- * // using "_.where" callback shorthand
- * _.findLastKey(characters, { 'age': 40 });
- * // => 'fred'
- *
- * // using "_.pluck" callback shorthand
- * _.findLastKey(characters, 'blocked');
- * // => 'pebbles'
- */
-function findLastKey(object, callback, thisArg) {
-  var result;
-  callback = createCallback(callback, thisArg, 3);
-  forOwnRight(object, function(value, key, object) {
-    if (callback(value, key, object)) {
-      result = key;
-      return false;
-    }
-  });
-  return result;
-}
-
-module.exports = findLastKey;
-
-},{"../functions/createCallback":89,"./forOwnRight":155}],152:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseCreateCallback = require('../internals/baseCreateCallback'),
-    objectTypes = require('../internals/objectTypes');
-
-/**
- * Iterates over own and inherited enumerable properties of an object,
- * executing the callback for each property. The callback is bound to `thisArg`
- * and invoked with three arguments; (value, key, object). Callbacks may exit
- * iteration early by explicitly returning `false`.
- *
- * @static
- * @memberOf _
- * @type Function
- * @category Objects
- * @param {Object} object The object to iterate over.
- * @param {Function} [callback=identity] The function called per iteration.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Object} Returns `object`.
- * @example
- *
- * function Shape() {
- *   this.x = 0;
- *   this.y = 0;
- * }
- *
- * Shape.prototype.move = function(x, y) {
- *   this.x += x;
- *   this.y += y;
- * };
- *
- * _.forIn(new Shape, function(value, key) {
- *   console.log(key);
- * });
- * // => logs 'x', 'y', and 'move' (property order is not guaranteed across environments)
- */
-var forIn = function(collection, callback, thisArg) {
-  var index, iterable = collection, result = iterable;
-  if (!iterable) return result;
-  if (!objectTypes[typeof iterable]) return result;
-  callback = callback && typeof thisArg == 'undefined' ? callback : baseCreateCallback(callback, thisArg, 3);
-    for (index in iterable) {
-      if (callback(iterable[index], index, collection) === false) return result;
-    }
-  return result
-};
-
-module.exports = forIn;
-
-},{"../internals/baseCreateCallback":105,"../internals/objectTypes":133}],153:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseCreateCallback = require('../internals/baseCreateCallback'),
-    forIn = require('./forIn');
-
-/**
- * This method is like `_.forIn` except that it iterates over elements
- * of a `collection` in the opposite order.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {Object} object The object to iterate over.
- * @param {Function} [callback=identity] The function called per iteration.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Object} Returns `object`.
- * @example
- *
- * function Shape() {
- *   this.x = 0;
- *   this.y = 0;
- * }
- *
- * Shape.prototype.move = function(x, y) {
- *   this.x += x;
- *   this.y += y;
- * };
- *
- * _.forInRight(new Shape, function(value, key) {
- *   console.log(key);
- * });
- * // => logs 'move', 'y', and 'x' assuming `_.forIn ` logs 'x', 'y', and 'move'
- */
-function forInRight(object, callback, thisArg) {
-  var pairs = [];
-
-  forIn(object, function(value, key) {
-    pairs.push(key, value);
-  });
-
-  var length = pairs.length;
-  callback = baseCreateCallback(callback, thisArg, 3);
-  while (length--) {
-    if (callback(pairs[length--], pairs[length], object) === false) {
-      break;
-    }
-  }
-  return object;
-}
-
-module.exports = forInRight;
-
-},{"../internals/baseCreateCallback":105,"./forIn":152}],154:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseCreateCallback = require('../internals/baseCreateCallback'),
-    keys = require('./keys'),
-    objectTypes = require('../internals/objectTypes');
-
-/**
- * Iterates over own enumerable properties of an object, executing the callback
- * for each property. The callback is bound to `thisArg` and invoked with three
- * arguments; (value, key, object). Callbacks may exit iteration early by
- * explicitly returning `false`.
- *
- * @static
- * @memberOf _
- * @type Function
- * @category Objects
- * @param {Object} object The object to iterate over.
- * @param {Function} [callback=identity] The function called per iteration.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Object} Returns `object`.
- * @example
- *
- * _.forOwn({ '0': 'zero', '1': 'one', 'length': 2 }, function(num, key) {
- *   console.log(key);
- * });
- * // => logs '0', '1', and 'length' (property order is not guaranteed across environments)
- */
-var forOwn = function(collection, callback, thisArg) {
-  var index, iterable = collection, result = iterable;
-  if (!iterable) return result;
-  if (!objectTypes[typeof iterable]) return result;
-  callback = callback && typeof thisArg == 'undefined' ? callback : baseCreateCallback(callback, thisArg, 3);
-    var ownIndex = -1,
-        ownProps = objectTypes[typeof iterable] && keys(iterable),
-        length = ownProps ? ownProps.length : 0;
-
-    while (++ownIndex < length) {
-      index = ownProps[ownIndex];
-      if (callback(iterable[index], index, collection) === false) return result;
-    }
-  return result
-};
-
-module.exports = forOwn;
-
-},{"../internals/baseCreateCallback":105,"../internals/objectTypes":133,"./keys":176}],155:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseCreateCallback = require('../internals/baseCreateCallback'),
-    keys = require('./keys');
-
-/**
- * This method is like `_.forOwn` except that it iterates over elements
- * of a `collection` in the opposite order.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {Object} object The object to iterate over.
- * @param {Function} [callback=identity] The function called per iteration.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Object} Returns `object`.
- * @example
- *
- * _.forOwnRight({ '0': 'zero', '1': 'one', 'length': 2 }, function(num, key) {
- *   console.log(key);
- * });
- * // => logs 'length', '1', and '0' assuming `_.forOwn` logs '0', '1', and 'length'
- */
-function forOwnRight(object, callback, thisArg) {
-  var props = keys(object),
-      length = props.length;
-
-  callback = baseCreateCallback(callback, thisArg, 3);
-  while (length--) {
-    var key = props[length];
-    if (callback(object[key], key, object) === false) {
-      break;
-    }
-  }
-  return object;
-}
-
-module.exports = forOwnRight;
-
-},{"../internals/baseCreateCallback":105,"./keys":176}],156:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var forIn = require('./forIn'),
-    isFunction = require('./isFunction');
-
-/**
- * Creates a sorted array of property names of all enumerable properties,
- * own and inherited, of `object` that have function values.
- *
- * @static
- * @memberOf _
- * @alias methods
- * @category Objects
- * @param {Object} object The object to inspect.
- * @returns {Array} Returns an array of property names that have function values.
- * @example
- *
- * _.functions(_);
- * // => ['all', 'any', 'bind', 'bindAll', 'clone', 'compact', 'compose', ...]
- */
-function functions(object) {
-  var result = [];
-  forIn(object, function(value, key) {
-    if (isFunction(value)) {
-      result.push(key);
-    }
-  });
-  return result.sort();
-}
-
-module.exports = functions;
-
-},{"./forIn":152,"./isFunction":167}],157:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Native method shortcuts */
-var hasOwnProperty = objectProto.hasOwnProperty;
-
-/**
- * Checks if the specified property name exists as a direct property of `object`,
- * instead of an inherited property.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {Object} object The object to inspect.
- * @param {string} key The name of the property to check.
- * @returns {boolean} Returns `true` if key is a direct property, else `false`.
- * @example
- *
- * _.has({ 'a': 1, 'b': 2, 'c': 3 }, 'b');
- * // => true
- */
-function has(object, key) {
-  return object ? hasOwnProperty.call(object, key) : false;
-}
-
-module.exports = has;
-
-},{}],158:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var keys = require('./keys');
-
-/**
- * Creates an object composed of the inverted keys and values of the given object.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {Object} object The object to invert.
- * @returns {Object} Returns the created inverted object.
- * @example
- *
- * _.invert({ 'first': 'fred', 'second': 'barney' });
- * // => { 'fred': 'first', 'barney': 'second' }
- */
-function invert(object) {
-  var index = -1,
-      props = keys(object),
-      length = props.length,
-      result = {};
-
-  while (++index < length) {
-    var key = props[index];
-    result[object[key]] = key;
-  }
-  return result;
-}
-
-module.exports = invert;
-
-},{"./keys":176}],159:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** `Object#toString` result shortcuts */
-var argsClass = '[object Arguments]';
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Used to resolve the internal [[Class]] of values */
-var toString = objectProto.toString;
-
-/**
- * Checks if `value` is an `arguments` object.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if the `value` is an `arguments` object, else `false`.
- * @example
- *
- * (function() { return _.isArguments(arguments); })(1, 2, 3);
- * // => true
- *
- * _.isArguments([1, 2, 3]);
- * // => false
- */
-function isArguments(value) {
-  return value && typeof value == 'object' && typeof value.length == 'number' &&
-    toString.call(value) == argsClass || false;
-}
-
-module.exports = isArguments;
-
-},{}],160:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isNative = require('../internals/isNative');
-
-/** `Object#toString` result shortcuts */
-var arrayClass = '[object Array]';
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Used to resolve the internal [[Class]] of values */
-var toString = objectProto.toString;
-
-/* Native method shortcuts for methods with the same name as other `lodash` methods */
-var nativeIsArray = isNative(nativeIsArray = Array.isArray) && nativeIsArray;
-
-/**
- * Checks if `value` is an array.
- *
- * @static
- * @memberOf _
- * @type Function
- * @category Objects
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if the `value` is an array, else `false`.
- * @example
- *
- * (function() { return _.isArray(arguments); })();
- * // => false
- *
- * _.isArray([1, 2, 3]);
- * // => true
- */
-var isArray = nativeIsArray || function(value) {
-  return value && typeof value == 'object' && typeof value.length == 'number' &&
-    toString.call(value) == arrayClass || false;
-};
-
-module.exports = isArray;
-
-},{"../internals/isNative":127}],161:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** `Object#toString` result shortcuts */
-var boolClass = '[object Boolean]';
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Used to resolve the internal [[Class]] of values */
-var toString = objectProto.toString;
-
-/**
- * Checks if `value` is a boolean value.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if the `value` is a boolean value, else `false`.
- * @example
- *
- * _.isBoolean(null);
- * // => false
- */
-function isBoolean(value) {
-  return value === true || value === false ||
-    value && typeof value == 'object' && toString.call(value) == boolClass || false;
-}
-
-module.exports = isBoolean;
-
-},{}],162:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** `Object#toString` result shortcuts */
-var dateClass = '[object Date]';
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Used to resolve the internal [[Class]] of values */
-var toString = objectProto.toString;
-
-/**
- * Checks if `value` is a date.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if the `value` is a date, else `false`.
- * @example
- *
- * _.isDate(new Date);
- * // => true
- */
-function isDate(value) {
-  return value && typeof value == 'object' && toString.call(value) == dateClass || false;
-}
-
-module.exports = isDate;
-
-},{}],163:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * Checks if `value` is a DOM element.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if the `value` is a DOM element, else `false`.
- * @example
- *
- * _.isElement(document.body);
- * // => true
- */
-function isElement(value) {
-  return value && value.nodeType === 1 || false;
-}
-
-module.exports = isElement;
-
-},{}],164:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var forOwn = require('./forOwn'),
-    isFunction = require('./isFunction');
-
-/** `Object#toString` result shortcuts */
-var argsClass = '[object Arguments]',
-    arrayClass = '[object Array]',
-    objectClass = '[object Object]',
-    stringClass = '[object String]';
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Used to resolve the internal [[Class]] of values */
-var toString = objectProto.toString;
-
-/**
- * Checks if `value` is empty. Arrays, strings, or `arguments` objects with a
- * length of `0` and objects with no own enumerable properties are considered
- * "empty".
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {Array|Object|string} value The value to inspect.
- * @returns {boolean} Returns `true` if the `value` is empty, else `false`.
- * @example
- *
- * _.isEmpty([1, 2, 3]);
- * // => false
- *
- * _.isEmpty({});
- * // => true
- *
- * _.isEmpty('');
- * // => true
- */
-function isEmpty(value) {
-  var result = true;
-  if (!value) {
-    return result;
-  }
-  var className = toString.call(value),
-      length = value.length;
-
-  if ((className == arrayClass || className == stringClass || className == argsClass ) ||
-      (className == objectClass && typeof length == 'number' && isFunction(value.splice))) {
-    return !length;
-  }
-  forOwn(value, function() {
-    return (result = false);
-  });
-  return result;
-}
-
-module.exports = isEmpty;
-
-},{"./forOwn":154,"./isFunction":167}],165:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseCreateCallback = require('../internals/baseCreateCallback'),
-    baseIsEqual = require('../internals/baseIsEqual');
-
-/**
- * Performs a deep comparison between two values to determine if they are
- * equivalent to each other. If a callback is provided it will be executed
- * to compare values. If the callback returns `undefined` comparisons will
- * be handled by the method instead. The callback is bound to `thisArg` and
- * invoked with two arguments; (a, b).
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {*} a The value to compare.
- * @param {*} b The other value to compare.
- * @param {Function} [callback] The function to customize comparing values.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
- * @example
- *
- * var object = { 'name': 'fred' };
- * var copy = { 'name': 'fred' };
- *
- * object == copy;
- * // => false
- *
- * _.isEqual(object, copy);
- * // => true
- *
- * var words = ['hello', 'goodbye'];
- * var otherWords = ['hi', 'goodbye'];
- *
- * _.isEqual(words, otherWords, function(a, b) {
- *   var reGreet = /^(?:hello|hi)$/i,
- *       aGreet = _.isString(a) && reGreet.test(a),
- *       bGreet = _.isString(b) && reGreet.test(b);
- *
- *   return (aGreet || bGreet) ? (aGreet == bGreet) : undefined;
- * });
- * // => true
- */
-function isEqual(a, b, callback, thisArg) {
-  return baseIsEqual(a, b, typeof callback == 'function' && baseCreateCallback(callback, thisArg, 2));
-}
-
-module.exports = isEqual;
-
-},{"../internals/baseCreateCallback":105,"../internals/baseIsEqual":110}],166:[function(require,module,exports){
-(function (global){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/* Native method shortcuts for methods with the same name as other `lodash` methods */
-var nativeIsFinite = global.isFinite,
-    nativeIsNaN = global.isNaN;
-
-/**
- * Checks if `value` is, or can be coerced to, a finite number.
- *
- * Note: This is not the same as native `isFinite` which will return true for
- * booleans and empty strings. See http://es5.github.io/#x15.1.2.5.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if the `value` is finite, else `false`.
- * @example
- *
- * _.isFinite(-101);
- * // => true
- *
- * _.isFinite('10');
- * // => true
- *
- * _.isFinite(true);
- * // => false
- *
- * _.isFinite('');
- * // => false
- *
- * _.isFinite(Infinity);
- * // => false
- */
-function isFinite(value) {
-  return nativeIsFinite(value) && !nativeIsNaN(parseFloat(value));
-}
-
-module.exports = isFinite;
-
-}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
-},{}],167:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * Checks if `value` is a function.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if the `value` is a function, else `false`.
- * @example
- *
- * _.isFunction(_);
- * // => true
- */
-function isFunction(value) {
-  return typeof value == 'function';
-}
-
-module.exports = isFunction;
-
-},{}],168:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isNumber = require('./isNumber');
-
-/**
- * Checks if `value` is `NaN`.
- *
- * Note: This is not the same as native `isNaN` which will return `true` for
- * `undefined` and other non-numeric values. See http://es5.github.io/#x15.1.2.4.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if the `value` is `NaN`, else `false`.
- * @example
- *
- * _.isNaN(NaN);
- * // => true
- *
- * _.isNaN(new Number(NaN));
- * // => true
- *
- * isNaN(undefined);
- * // => true
- *
- * _.isNaN(undefined);
- * // => false
- */
-function isNaN(value) {
-  // `NaN` as a primitive is the only value that is not equal to itself
-  // (perform the [[Class]] check first to avoid errors with some host objects in IE)
-  return isNumber(value) && value != +value;
-}
-
-module.exports = isNaN;
-
-},{"./isNumber":170}],169:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * Checks if `value` is `null`.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if the `value` is `null`, else `false`.
- * @example
- *
- * _.isNull(null);
- * // => true
- *
- * _.isNull(undefined);
- * // => false
- */
-function isNull(value) {
-  return value === null;
-}
-
-module.exports = isNull;
-
-},{}],170:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** `Object#toString` result shortcuts */
-var numberClass = '[object Number]';
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Used to resolve the internal [[Class]] of values */
-var toString = objectProto.toString;
-
-/**
- * Checks if `value` is a number.
- *
- * Note: `NaN` is considered a number. See http://es5.github.io/#x8.5.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if the `value` is a number, else `false`.
- * @example
- *
- * _.isNumber(8.4 * 5);
- * // => true
- */
-function isNumber(value) {
-  return typeof value == 'number' ||
-    value && typeof value == 'object' && toString.call(value) == numberClass || false;
-}
-
-module.exports = isNumber;
-
-},{}],171:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var objectTypes = require('../internals/objectTypes');
-
-/**
- * Checks if `value` is the language type of Object.
- * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if the `value` is an object, else `false`.
- * @example
- *
- * _.isObject({});
- * // => true
- *
- * _.isObject([1, 2, 3]);
- * // => true
- *
- * _.isObject(1);
- * // => false
- */
-function isObject(value) {
-  // check if the value is the ECMAScript language type of Object
-  // http://es5.github.io/#x8
-  // and avoid a V8 bug
-  // http://code.google.com/p/v8/issues/detail?id=2291
-  return !!(value && objectTypes[typeof value]);
-}
-
-module.exports = isObject;
-
-},{"../internals/objectTypes":133}],172:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isNative = require('../internals/isNative'),
-    shimIsPlainObject = require('../internals/shimIsPlainObject');
-
-/** `Object#toString` result shortcuts */
-var objectClass = '[object Object]';
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Used to resolve the internal [[Class]] of values */
-var toString = objectProto.toString;
-
-/** Native method shortcuts */
-var getPrototypeOf = isNative(getPrototypeOf = Object.getPrototypeOf) && getPrototypeOf;
-
-/**
- * Checks if `value` is an object created by the `Object` constructor.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.
- * @example
- *
- * function Shape() {
- *   this.x = 0;
- *   this.y = 0;
- * }
- *
- * _.isPlainObject(new Shape);
- * // => false
- *
- * _.isPlainObject([1, 2, 3]);
- * // => false
- *
- * _.isPlainObject({ 'x': 0, 'y': 0 });
- * // => true
- */
-var isPlainObject = !getPrototypeOf ? shimIsPlainObject : function(value) {
-  if (!(value && toString.call(value) == objectClass)) {
-    return false;
-  }
-  var valueOf = value.valueOf,
-      objProto = isNative(valueOf) && (objProto = getPrototypeOf(valueOf)) && getPrototypeOf(objProto);
-
-  return objProto
-    ? (value == objProto || getPrototypeOf(value) == objProto)
-    : shimIsPlainObject(value);
-};
-
-module.exports = isPlainObject;
-
-},{"../internals/isNative":127,"../internals/shimIsPlainObject":140}],173:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** `Object#toString` result shortcuts */
-var regexpClass = '[object RegExp]';
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Used to resolve the internal [[Class]] of values */
-var toString = objectProto.toString;
-
-/**
- * Checks if `value` is a regular expression.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if the `value` is a regular expression, else `false`.
- * @example
- *
- * _.isRegExp(/fred/);
- * // => true
- */
-function isRegExp(value) {
-  return value && typeof value == 'object' && toString.call(value) == regexpClass || false;
-}
-
-module.exports = isRegExp;
-
-},{}],174:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** `Object#toString` result shortcuts */
-var stringClass = '[object String]';
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Used to resolve the internal [[Class]] of values */
-var toString = objectProto.toString;
-
-/**
- * Checks if `value` is a string.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if the `value` is a string, else `false`.
- * @example
- *
- * _.isString('fred');
- * // => true
- */
-function isString(value) {
-  return typeof value == 'string' ||
-    value && typeof value == 'object' && toString.call(value) == stringClass || false;
-}
-
-module.exports = isString;
-
-},{}],175:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * Checks if `value` is `undefined`.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if the `value` is `undefined`, else `false`.
- * @example
- *
- * _.isUndefined(void 0);
- * // => true
- */
-function isUndefined(value) {
-  return typeof value == 'undefined';
-}
-
-module.exports = isUndefined;
-
-},{}],176:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isNative = require('../internals/isNative'),
-    isObject = require('./isObject'),
-    shimKeys = require('../internals/shimKeys');
-
-/* Native method shortcuts for methods with the same name as other `lodash` methods */
-var nativeKeys = isNative(nativeKeys = Object.keys) && nativeKeys;
-
-/**
- * Creates an array composed of the own enumerable property names of an object.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {Object} object The object to inspect.
- * @returns {Array} Returns an array of property names.
- * @example
- *
- * _.keys({ 'one': 1, 'two': 2, 'three': 3 });
- * // => ['one', 'two', 'three'] (property order is not guaranteed across environments)
- */
-var keys = !nativeKeys ? shimKeys : function(object) {
-  if (!isObject(object)) {
-    return [];
-  }
-  return nativeKeys(object);
-};
-
-module.exports = keys;
-
-},{"../internals/isNative":127,"../internals/shimKeys":141,"./isObject":171}],177:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback'),
-    forOwn = require('./forOwn');
-
-/**
- * Creates an object with the same keys as `object` and values generated by
- * running each own enumerable property of `object` through the callback.
- * The callback is bound to `thisArg` and invoked with three arguments;
- * (value, key, object).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {Object} object The object to iterate over.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Array} Returns a new object with values of the results of each `callback` execution.
- * @example
- *
- * _.mapValues({ 'a': 1, 'b': 2, 'c': 3} , function(num) { return num * 3; });
- * // => { 'a': 3, 'b': 6, 'c': 9 }
- *
- * var characters = {
- *   'fred': { 'name': 'fred', 'age': 40 },
- *   'pebbles': { 'name': 'pebbles', 'age': 1 }
- * };
- *
- * // using "_.pluck" callback shorthand
- * _.mapValues(characters, 'age');
- * // => { 'fred': 40, 'pebbles': 1 }
- */
-function mapValues(object, callback, thisArg) {
-  var result = {};
-  callback = createCallback(callback, thisArg, 3);
-
-  forOwn(object, function(value, key, object) {
-    result[key] = callback(value, key, object);
-  });
-  return result;
-}
-
-module.exports = mapValues;
-
-},{"../functions/createCallback":89,"./forOwn":154}],178:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseCreateCallback = require('../internals/baseCreateCallback'),
-    baseMerge = require('../internals/baseMerge'),
-    getArray = require('../internals/getArray'),
-    isObject = require('./isObject'),
-    releaseArray = require('../internals/releaseArray'),
-    slice = require('../internals/slice');
-
-/**
- * Recursively merges own enumerable properties of the source object(s), that
- * don't resolve to `undefined` into the destination object. Subsequent sources
- * will overwrite property assignments of previous sources. If a callback is
- * provided it will be executed to produce the merged values of the destination
- * and source properties. If the callback returns `undefined` merging will
- * be handled by the method instead. The callback is bound to `thisArg` and
- * invoked with two arguments; (objectValue, sourceValue).
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {Object} object The destination object.
- * @param {...Object} [source] The source objects.
- * @param {Function} [callback] The function to customize merging properties.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Object} Returns the destination object.
- * @example
- *
- * var names = {
- *   'characters': [
- *     { 'name': 'barney' },
- *     { 'name': 'fred' }
- *   ]
- * };
- *
- * var ages = {
- *   'characters': [
- *     { 'age': 36 },
- *     { 'age': 40 }
- *   ]
- * };
- *
- * _.merge(names, ages);
- * // => { 'characters': [{ 'name': 'barney', 'age': 36 }, { 'name': 'fred', 'age': 40 }] }
- *
- * var food = {
- *   'fruits': ['apple'],
- *   'vegetables': ['beet']
- * };
- *
- * var otherFood = {
- *   'fruits': ['banana'],
- *   'vegetables': ['carrot']
- * };
- *
- * _.merge(food, otherFood, function(a, b) {
- *   return _.isArray(a) ? a.concat(b) : undefined;
- * });
- * // => { 'fruits': ['apple', 'banana'], 'vegetables': ['beet', 'carrot] }
- */
-function merge(object) {
-  var args = arguments,
-      length = 2;
-
-  if (!isObject(object)) {
-    return object;
-  }
-  // allows working with `_.reduce` and `_.reduceRight` without using
-  // their `index` and `collection` arguments
-  if (typeof args[2] != 'number') {
-    length = args.length;
-  }
-  if (length > 3 && typeof args[length - 2] == 'function') {
-    var callback = baseCreateCallback(args[--length - 1], args[length--], 2);
-  } else if (length > 2 && typeof args[length - 1] == 'function') {
-    callback = args[--length];
-  }
-  var sources = slice(arguments, 1, length),
-      index = -1,
-      stackA = getArray(),
-      stackB = getArray();
-
-  while (++index < length) {
-    baseMerge(object, sources[index], callback, stackA, stackB);
-  }
-  releaseArray(stackA);
-  releaseArray(stackB);
-  return object;
-}
-
-module.exports = merge;
-
-},{"../internals/baseCreateCallback":105,"../internals/baseMerge":111,"../internals/getArray":123,"../internals/releaseArray":137,"../internals/slice":142,"./isObject":171}],179:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseDifference = require('../internals/baseDifference'),
-    baseFlatten = require('../internals/baseFlatten'),
-    createCallback = require('../functions/createCallback'),
-    forIn = require('./forIn');
-
-/**
- * Creates a shallow clone of `object` excluding the specified properties.
- * Property names may be specified as individual arguments or as arrays of
- * property names. If a callback is provided it will be executed for each
- * property of `object` omitting the properties the callback returns truey
- * for. The callback is bound to `thisArg` and invoked with three arguments;
- * (value, key, object).
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {Object} object The source object.
- * @param {Function|...string|string[]} [callback] The properties to omit or the
- *  function called per iteration.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Object} Returns an object without the omitted properties.
- * @example
- *
- * _.omit({ 'name': 'fred', 'age': 40 }, 'age');
- * // => { 'name': 'fred' }
- *
- * _.omit({ 'name': 'fred', 'age': 40 }, function(value) {
- *   return typeof value == 'number';
- * });
- * // => { 'name': 'fred' }
- */
-function omit(object, callback, thisArg) {
-  var result = {};
-  if (typeof callback != 'function') {
-    var props = [];
-    forIn(object, function(value, key) {
-      props.push(key);
-    });
-    props = baseDifference(props, baseFlatten(arguments, true, false, 1));
-
-    var index = -1,
-        length = props.length;
-
-    while (++index < length) {
-      var key = props[index];
-      result[key] = object[key];
-    }
-  } else {
-    callback = createCallback(callback, thisArg, 3);
-    forIn(object, function(value, key, object) {
-      if (!callback(value, key, object)) {
-        result[key] = value;
-      }
-    });
-  }
-  return result;
-}
-
-module.exports = omit;
-
-},{"../functions/createCallback":89,"../internals/baseDifference":107,"../internals/baseFlatten":108,"./forIn":152}],180:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var keys = require('./keys');
-
-/**
- * Creates a two dimensional array of an object's key-value pairs,
- * i.e. `[[key1, value1], [key2, value2]]`.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {Object} object The object to inspect.
- * @returns {Array} Returns new array of key-value pairs.
- * @example
- *
- * _.pairs({ 'barney': 36, 'fred': 40 });
- * // => [['barney', 36], ['fred', 40]] (property order is not guaranteed across environments)
- */
-function pairs(object) {
-  var index = -1,
-      props = keys(object),
-      length = props.length,
-      result = Array(length);
-
-  while (++index < length) {
-    var key = props[index];
-    result[index] = [key, object[key]];
-  }
-  return result;
-}
-
-module.exports = pairs;
-
-},{"./keys":176}],181:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseFlatten = require('../internals/baseFlatten'),
-    createCallback = require('../functions/createCallback'),
-    forIn = require('./forIn'),
-    isObject = require('./isObject');
-
-/**
- * Creates a shallow clone of `object` composed of the specified properties.
- * Property names may be specified as individual arguments or as arrays of
- * property names. If a callback is provided it will be executed for each
- * property of `object` picking the properties the callback returns truey
- * for. The callback is bound to `thisArg` and invoked with three arguments;
- * (value, key, object).
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {Object} object The source object.
- * @param {Function|...string|string[]} [callback] The function called per
- *  iteration or property names to pick, specified as individual property
- *  names or arrays of property names.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Object} Returns an object composed of the picked properties.
- * @example
- *
- * _.pick({ 'name': 'fred', '_userid': 'fred1' }, 'name');
- * // => { 'name': 'fred' }
- *
- * _.pick({ 'name': 'fred', '_userid': 'fred1' }, function(value, key) {
- *   return key.charAt(0) != '_';
- * });
- * // => { 'name': 'fred' }
- */
-function pick(object, callback, thisArg) {
-  var result = {};
-  if (typeof callback != 'function') {
-    var index = -1,
-        props = baseFlatten(arguments, true, false, 1),
-        length = isObject(object) ? props.length : 0;
-
-    while (++index < length) {
-      var key = props[index];
-      if (key in object) {
-        result[key] = object[key];
-      }
-    }
-  } else {
-    callback = createCallback(callback, thisArg, 3);
-    forIn(object, function(value, key, object) {
-      if (callback(value, key, object)) {
-        result[key] = value;
-      }
-    });
-  }
-  return result;
-}
-
-module.exports = pick;
-
-},{"../functions/createCallback":89,"../internals/baseFlatten":108,"./forIn":152,"./isObject":171}],182:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseCreate = require('../internals/baseCreate'),
-    createCallback = require('../functions/createCallback'),
-    forEach = require('../collections/forEach'),
-    forOwn = require('./forOwn'),
-    isArray = require('./isArray');
-
-/**
- * An alternative to `_.reduce` this method transforms `object` to a new
- * `accumulator` object which is the result of running each of its own
- * enumerable properties through a callback, with each callback execution
- * potentially mutating the `accumulator` object. The callback is bound to
- * `thisArg` and invoked with four arguments; (accumulator, value, key, object).
- * Callbacks may exit iteration early by explicitly returning `false`.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {Array|Object} object The object to iterate over.
- * @param {Function} [callback=identity] The function called per iteration.
- * @param {*} [accumulator] The custom accumulator value.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {*} Returns the accumulated value.
- * @example
- *
- * var squares = _.transform([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], function(result, num) {
- *   num *= num;
- *   if (num % 2) {
- *     return result.push(num) < 3;
- *   }
- * });
- * // => [1, 9, 25]
- *
- * var mapped = _.transform({ 'a': 1, 'b': 2, 'c': 3 }, function(result, num, key) {
- *   result[key] = num * 3;
- * });
- * // => { 'a': 3, 'b': 6, 'c': 9 }
- */
-function transform(object, callback, accumulator, thisArg) {
-  var isArr = isArray(object);
-  if (accumulator == null) {
-    if (isArr) {
-      accumulator = [];
-    } else {
-      var ctor = object && object.constructor,
-          proto = ctor && ctor.prototype;
-
-      accumulator = baseCreate(proto);
-    }
-  }
-  if (callback) {
-    callback = createCallback(callback, thisArg, 4);
-    (isArr ? forEach : forOwn)(object, function(value, index, object) {
-      return callback(accumulator, value, index, object);
-    });
-  }
-  return accumulator;
-}
-
-module.exports = transform;
-
-},{"../collections/forEach":64,"../functions/createCallback":89,"../internals/baseCreate":104,"./forOwn":154,"./isArray":160}],183:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var keys = require('./keys');
-
-/**
- * Creates an array composed of the own enumerable property values of `object`.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {Object} object The object to inspect.
- * @returns {Array} Returns an array of property values.
- * @example
- *
- * _.values({ 'one': 1, 'two': 2, 'three': 3 });
- * // => [1, 2, 3] (property order is not guaranteed across environments)
- */
-function values(object) {
-  var index = -1,
-      props = keys(object),
-      length = props.length,
-      result = Array(length);
-
-  while (++index < length) {
-    result[index] = object[props[index]];
-  }
-  return result;
-}
-
-module.exports = values;
-
-},{"./keys":176}],184:[function(require,module,exports){
-(function (global){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isNative = require('./internals/isNative');
-
-/** Used to detect functions containing a `this` reference */
-var reThis = /\bthis\b/;
-
-/**
- * An object used to flag environments features.
- *
- * @static
- * @memberOf _
- * @type Object
- */
-var support = {};
-
-/**
- * Detect if functions can be decompiled by `Function#toString`
- * (all but PS3 and older Opera mobile browsers & avoided in Windows 8 apps).
- *
- * @memberOf _.support
- * @type boolean
- */
-support.funcDecomp = !isNative(global.WinRTError) && reThis.test(function() { return this; });
-
-/**
- * Detect if `Function#name` is supported (all but IE).
- *
- * @memberOf _.support
- * @type boolean
- */
-support.funcNames = typeof Function.name == 'string';
-
-module.exports = support;
-
-}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
-},{"./internals/isNative":127}],185:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-module.exports = {
-  'constant': require('./utilities/constant'),
-  'createCallback': require('./functions/createCallback'),
-  'escape': require('./utilities/escape'),
-  'identity': require('./utilities/identity'),
-  'mixin': require('./utilities/mixin'),
-  'noConflict': require('./utilities/noConflict'),
-  'noop': require('./utilities/noop'),
-  'now': require('./utilities/now'),
-  'parseInt': require('./utilities/parseInt'),
-  'property': require('./utilities/property'),
-  'random': require('./utilities/random'),
-  'result': require('./utilities/result'),
-  'template': require('./utilities/template'),
-  'templateSettings': require('./utilities/templateSettings'),
-  'times': require('./utilities/times'),
-  'unescape': require('./utilities/unescape'),
-  'uniqueId': require('./utilities/uniqueId')
-};
-
-},{"./functions/createCallback":89,"./utilities/constant":186,"./utilities/escape":187,"./utilities/identity":188,"./utilities/mixin":189,"./utilities/noConflict":190,"./utilities/noop":191,"./utilities/now":192,"./utilities/parseInt":193,"./utilities/property":194,"./utilities/random":195,"./utilities/result":196,"./utilities/template":197,"./utilities/templateSettings":198,"./utilities/times":199,"./utilities/unescape":200,"./utilities/uniqueId":201}],186:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * Creates a function that returns `value`.
- *
- * @static
- * @memberOf _
- * @category Utilities
- * @param {*} value The value to return from the new function.
- * @returns {Function} Returns the new function.
- * @example
- *
- * var object = { 'name': 'fred' };
- * var getter = _.constant(object);
- * getter() === object;
- * // => true
- */
-function constant(value) {
-  return function() {
-    return value;
-  };
-}
-
-module.exports = constant;
-
-},{}],187:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var escapeHtmlChar = require('../internals/escapeHtmlChar'),
-    keys = require('../objects/keys'),
-    reUnescapedHtml = require('../internals/reUnescapedHtml');
-
-/**
- * Converts the characters `&`, `<`, `>`, `"`, and `'` in `string` to their
- * corresponding HTML entities.
- *
- * @static
- * @memberOf _
- * @category Utilities
- * @param {string} string The string to escape.
- * @returns {string} Returns the escaped string.
- * @example
- *
- * _.escape('Fred, Wilma, & Pebbles');
- * // => 'Fred, Wilma, &amp; Pebbles'
- */
-function escape(string) {
-  return string == null ? '' : String(string).replace(reUnescapedHtml, escapeHtmlChar);
-}
-
-module.exports = escape;
-
-},{"../internals/escapeHtmlChar":121,"../internals/reUnescapedHtml":136,"../objects/keys":176}],188:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * This method returns the first argument provided to it.
- *
- * @static
- * @memberOf _
- * @category Utilities
- * @param {*} value Any value.
- * @returns {*} Returns `value`.
- * @example
- *
- * var object = { 'name': 'fred' };
- * _.identity(object) === object;
- * // => true
- */
-function identity(value) {
-  return value;
-}
-
-module.exports = identity;
-
-},{}],189:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var forEach = require('../collections/forEach'),
-    functions = require('../objects/functions'),
-    isFunction = require('../objects/isFunction'),
-    isObject = require('../objects/isObject');
-
-/**
- * Used for `Array` method references.
- *
- * Normally `Array.prototype` would suffice, however, using an array literal
- * avoids issues in Narwhal.
- */
-var arrayRef = [];
-
-/** Native method shortcuts */
-var push = arrayRef.push;
-
-/**
- * Adds function properties of a source object to the destination object.
- * If `object` is a function methods will be added to its prototype as well.
- *
- * @static
- * @memberOf _
- * @category Utilities
- * @param {Function|Object} [object=lodash] object The destination object.
- * @param {Object} source The object of functions to add.
- * @param {Object} [options] The options object.
- * @param {boolean} [options.chain=true] Specify whether the functions added are chainable.
- * @example
- *
- * function capitalize(string) {
- *   return string.charAt(0).toUpperCase() + string.slice(1).toLowerCase();
- * }
- *
- * _.mixin({ 'capitalize': capitalize });
- * _.capitalize('fred');
- * // => 'Fred'
- *
- * _('fred').capitalize().value();
- * // => 'Fred'
- *
- * _.mixin({ 'capitalize': capitalize }, { 'chain': false });
- * _('fred').capitalize();
- * // => 'Fred'
- */
-function mixin(object, source, options) {
-  var chain = true,
-      methodNames = source && functions(source);
-
-  if (options === false) {
-    chain = false;
-  } else if (isObject(options) && 'chain' in options) {
-    chain = options.chain;
-  }
-  var ctor = object,
-      isFunc = isFunction(ctor);
-
-  forEach(methodNames, function(methodName) {
-    var func = object[methodName] = source[methodName];
-    if (isFunc) {
-      ctor.prototype[methodName] = function() {
-        var chainAll = this.__chain__,
-            value = this.__wrapped__,
-            args = [value];
-
-        push.apply(args, arguments);
-        var result = func.apply(object, args);
-        if (chain || chainAll) {
-          if (value === result && isObject(result)) {
-            return this;
-          }
-          result = new ctor(result);
-          result.__chain__ = chainAll;
-        }
-        return result;
-      };
-    }
-  });
-}
-
-module.exports = mixin;
-
-},{"../collections/forEach":64,"../objects/functions":156,"../objects/isFunction":167,"../objects/isObject":171}],190:[function(require,module,exports){
-(function (global){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** Used to restore the original `_` reference in `noConflict` */
-var oldDash = global._;
-
-/**
- * Reverts the '_' variable to its previous value and returns a reference to
- * the `lodash` function.
- *
- * @static
- * @memberOf _
- * @category Utilities
- * @returns {Function} Returns the `lodash` function.
- * @example
- *
- * var lodash = _.noConflict();
- */
-function noConflict() {
-  global._ = oldDash;
-  return this;
-}
-
-module.exports = noConflict;
-
-}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
-},{}],191:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * A no-operation function.
- *
- * @static
- * @memberOf _
- * @category Utilities
- * @example
- *
- * var object = { 'name': 'fred' };
- * _.noop(object) === undefined;
- * // => true
- */
-function noop() {
-  // no operation performed
-}
-
-module.exports = noop;
-
-},{}],192:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isNative = require('../internals/isNative');
-
-/**
- * Gets the number of milliseconds that have elapsed since the Unix epoch
- * (1 January 1970 00:00:00 UTC).
- *
- * @static
- * @memberOf _
- * @category Utilities
- * @example
- *
- * var stamp = _.now();
- * _.defer(function() { console.log(_.now() - stamp); });
- * // => logs the number of milliseconds it took for the deferred function to be called
- */
-var now = isNative(now = Date.now) && now || function() {
-  return new Date().getTime();
-};
-
-module.exports = now;
-
-},{"../internals/isNative":127}],193:[function(require,module,exports){
-(function (global){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isString = require('../objects/isString');
-
-/** Used to detect and test whitespace */
-var whitespace = (
-  // whitespace
-  ' \t\x0B\f\xA0\ufeff' +
-
-  // line terminators
-  '\n\r\u2028\u2029' +
-
-  // unicode category "Zs" space separators
-  '\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000'
-);
-
-/** Used to match leading whitespace and zeros to be removed */
-var reLeadingSpacesAndZeros = RegExp('^[' + whitespace + ']*0+(?=.$)');
-
-/* Native method shortcuts for methods with the same name as other `lodash` methods */
-var nativeParseInt = global.parseInt;
-
-/**
- * Converts the given value into an integer of the specified radix.
- * If `radix` is `undefined` or `0` a `radix` of `10` is used unless the
- * `value` is a hexadecimal, in which case a `radix` of `16` is used.
- *
- * Note: This method avoids differences in native ES3 and ES5 `parseInt`
- * implementations. See http://es5.github.io/#E.
- *
- * @static
- * @memberOf _
- * @category Utilities
- * @param {string} value The value to parse.
- * @param {number} [radix] The radix used to interpret the value to parse.
- * @returns {number} Returns the new integer value.
- * @example
- *
- * _.parseInt('08');
- * // => 8
- */
-var parseInt = nativeParseInt(whitespace + '08') == 8 ? nativeParseInt : function(value, radix) {
-  // Firefox < 21 and Opera < 15 follow the ES3 specified implementation of `parseInt`
-  return nativeParseInt(isString(value) ? value.replace(reLeadingSpacesAndZeros, '') : value, radix || 0);
-};
-
-module.exports = parseInt;
-
-}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
-},{"../objects/isString":174}],194:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * Creates a "_.pluck" style function, which returns the `key` value of a
- * given object.
- *
- * @static
- * @memberOf _
- * @category Utilities
- * @param {string} key The name of the property to retrieve.
- * @returns {Function} Returns the new function.
- * @example
- *
- * var characters = [
- *   { 'name': 'fred',   'age': 40 },
- *   { 'name': 'barney', 'age': 36 }
- * ];
- *
- * var getName = _.property('name');
- *
- * _.map(characters, getName);
- * // => ['barney', 'fred']
- *
- * _.sortBy(characters, getName);
- * // => [{ 'name': 'barney', 'age': 36 }, { 'name': 'fred',   'age': 40 }]
- */
-function property(key) {
-  return function(object) {
-    return object[key];
-  };
-}
-
-module.exports = property;
-
-},{}],195:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseRandom = require('../internals/baseRandom');
-
-/* Native method shortcuts for methods with the same name as other `lodash` methods */
-var nativeMin = Math.min,
-    nativeRandom = Math.random;
-
-/**
- * Produces a random number between `min` and `max` (inclusive). If only one
- * argument is provided a number between `0` and the given number will be
- * returned. If `floating` is truey or either `min` or `max` are floats a
- * floating-point number will be returned instead of an integer.
- *
- * @static
- * @memberOf _
- * @category Utilities
- * @param {number} [min=0] The minimum possible value.
- * @param {number} [max=1] The maximum possible value.
- * @param {boolean} [floating=false] Specify returning a floating-point number.
- * @returns {number} Returns a random number.
- * @example
- *
- * _.random(0, 5);
- * // => an integer between 0 and 5
- *
- * _.random(5);
- * // => also an integer between 0 and 5
- *
- * _.random(5, true);
- * // => a floating-point number between 0 and 5
- *
- * _.random(1.2, 5.2);
- * // => a floating-point number between 1.2 and 5.2
- */
-function random(min, max, floating) {
-  var noMin = min == null,
-      noMax = max == null;
-
-  if (floating == null) {
-    if (typeof min == 'boolean' && noMax) {
-      floating = min;
-      min = 1;
-    }
-    else if (!noMax && typeof max == 'boolean') {
-      floating = max;
-      noMax = true;
-    }
-  }
-  if (noMin && noMax) {
-    max = 1;
-  }
-  min = +min || 0;
-  if (noMax) {
-    max = min;
-    min = 0;
-  } else {
-    max = +max || 0;
-  }
-  if (floating || min % 1 || max % 1) {
-    var rand = nativeRandom();
-    return nativeMin(min + (rand * (max - min + parseFloat('1e-' + ((rand +'').length - 1)))), max);
-  }
-  return baseRandom(min, max);
-}
-
-module.exports = random;
-
-},{"../internals/baseRandom":112}],196:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isFunction = require('../objects/isFunction');
-
-/**
- * Resolves the value of property `key` on `object`. If `key` is a function
- * it will be invoked with the `this` binding of `object` and its result returned,
- * else the property value is returned. If `object` is falsey then `undefined`
- * is returned.
- *
- * @static
- * @memberOf _
- * @category Utilities
- * @param {Object} object The object to inspect.
- * @param {string} key The name of the property to resolve.
- * @returns {*} Returns the resolved value.
- * @example
- *
- * var object = {
- *   'cheese': 'crumpets',
- *   'stuff': function() {
- *     return 'nonsense';
- *   }
- * };
- *
- * _.result(object, 'cheese');
- * // => 'crumpets'
- *
- * _.result(object, 'stuff');
- * // => 'nonsense'
- */
-function result(object, key) {
-  if (object) {
-    var value = object[key];
-    return isFunction(value) ? object[key]() : value;
-  }
-}
-
-module.exports = result;
-
-},{"../objects/isFunction":167}],197:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var defaults = require('../objects/defaults'),
-    escape = require('./escape'),
-    escapeStringChar = require('../internals/escapeStringChar'),
-    keys = require('../objects/keys'),
-    reInterpolate = require('../internals/reInterpolate'),
-    templateSettings = require('./templateSettings'),
-    values = require('../objects/values');
-
-/** Used to match empty string literals in compiled template source */
-var reEmptyStringLeading = /\b__p \+= '';/g,
-    reEmptyStringMiddle = /\b(__p \+=) '' \+/g,
-    reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g;
-
-/**
- * Used to match ES6 template delimiters
- * http://people.mozilla.org/~jorendorff/es6-draft.html#sec-literals-string-literals
- */
-var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g;
-
-/** Used to ensure capturing order of template delimiters */
-var reNoMatch = /($^)/;
-
-/** Used to match unescaped characters in compiled string literals */
-var reUnescapedString = /['\n\r\t\u2028\u2029\\]/g;
-
-/**
- * A micro-templating method that handles arbitrary delimiters, preserves
- * whitespace, and correctly escapes quotes within interpolated code.
- *
- * Note: In the development build, `_.template` utilizes sourceURLs for easier
- * debugging. See http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl
- *
- * For more information on precompiling templates see:
- * http://lodash.com/custom-builds
- *
- * For more information on Chrome extension sandboxes see:
- * http://developer.chrome.com/stable/extensions/sandboxingEval.html
- *
- * @static
- * @memberOf _
- * @category Utilities
- * @param {string} text The template text.
- * @param {Object} data The data object used to populate the text.
- * @param {Object} [options] The options object.
- * @param {RegExp} [options.escape] The "escape" delimiter.
- * @param {RegExp} [options.evaluate] The "evaluate" delimiter.
- * @param {Object} [options.imports] An object to import into the template as local variables.
- * @param {RegExp} [options.interpolate] The "interpolate" delimiter.
- * @param {string} [sourceURL] The sourceURL of the template's compiled source.
- * @param {string} [variable] The data object variable name.
- * @returns {Function|string} Returns a compiled function when no `data` object
- *  is given, else it returns the interpolated text.
- * @example
- *
- * // using the "interpolate" delimiter to create a compiled template
- * var compiled = _.template('hello <%= name %>');
- * compiled({ 'name': 'fred' });
- * // => 'hello fred'
- *
- * // using the "escape" delimiter to escape HTML in data property values
- * _.template('<b><%- value %></b>', { 'value': '<script>' });
- * // => '<b>&lt;script&gt;</b>'
- *
- * // using the "evaluate" delimiter to generate HTML
- * var list = '<% _.forEach(people, function(name) { %><li><%- name %></li><% }); %>';
- * _.template(list, { 'people': ['fred', 'barney'] });
- * // => '<li>fred</li><li>barney</li>'
- *
- * // using the ES6 delimiter as an alternative to the default "interpolate" delimiter
- * _.template('hello ${ name }', { 'name': 'pebbles' });
- * // => 'hello pebbles'
- *
- * // using the internal `print` function in "evaluate" delimiters
- * _.template('<% print("hello " + name); %>!', { 'name': 'barney' });
- * // => 'hello barney!'
- *
- * // using a custom template delimiters
- * _.templateSettings = {
- *   'interpolate': /{{([\s\S]+?)}}/g
- * };
- *
- * _.template('hello {{ name }}!', { 'name': 'mustache' });
- * // => 'hello mustache!'
- *
- * // using the `imports` option to import jQuery
- * var list = '<% jq.each(people, function(name) { %><li><%- name %></li><% }); %>';
- * _.template(list, { 'people': ['fred', 'barney'] }, { 'imports': { 'jq': jQuery } });
- * // => '<li>fred</li><li>barney</li>'
- *
- * // using the `sourceURL` option to specify a custom sourceURL for the template
- * var compiled = _.template('hello <%= name %>', null, { 'sourceURL': '/basic/greeting.jst' });
- * compiled(data);
- * // => find the source of "greeting.jst" under the Sources tab or Resources panel of the web inspector
- *
- * // using the `variable` option to ensure a with-statement isn't used in the compiled template
- * var compiled = _.template('hi <%= data.name %>!', null, { 'variable': 'data' });
- * compiled.source;
- * // => function(data) {
- *   var __t, __p = '', __e = _.escape;
- *   __p += 'hi ' + ((__t = ( data.name )) == null ? '' : __t) + '!';
- *   return __p;
- * }
- *
- * // using the `source` property to inline compiled templates for meaningful
- * // line numbers in error messages and a stack trace
- * fs.writeFileSync(path.join(cwd, 'jst.js'), '\
- *   var JST = {\
- *     "main": ' + _.template(mainText).source + '\
- *   };\
- * ');
- */
-function template(text, data, options) {
-  // based on John Resig's `tmpl` implementation
-  // http://ejohn.org/blog/javascript-micro-templating/
-  // and Laura Doktorova's doT.js
-  // https://github.com/olado/doT
-  var settings = templateSettings.imports._.templateSettings || templateSettings;
-  text = String(text || '');
-
-  // avoid missing dependencies when `iteratorTemplate` is not defined
-  options = defaults({}, options, settings);
-
-  var imports = defaults({}, options.imports, settings.imports),
-      importsKeys = keys(imports),
-      importsValues = values(imports);
-
-  var isEvaluating,
-      index = 0,
-      interpolate = options.interpolate || reNoMatch,
-      source = "__p += '";
-
-  // compile the regexp to match each delimiter
-  var reDelimiters = RegExp(
-    (options.escape || reNoMatch).source + '|' +
-    interpolate.source + '|' +
-    (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +
-    (options.evaluate || reNoMatch).source + '|$'
-  , 'g');
-
-  text.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {
-    interpolateValue || (interpolateValue = esTemplateValue);
-
-    // escape characters that cannot be included in string literals
-    source += text.slice(index, offset).replace(reUnescapedString, escapeStringChar);
-
-    // replace delimiters with snippets
-    if (escapeValue) {
-      source += "' +\n__e(" + escapeValue + ") +\n'";
-    }
-    if (evaluateValue) {
-      isEvaluating = true;
-      source += "';\n" + evaluateValue + ";\n__p += '";
-    }
-    if (interpolateValue) {
-      source += "' +\n((__t = (" + interpolateValue + ")) == null ? '' : __t) +\n'";
-    }
-    index = offset + match.length;
-
-    // the JS engine embedded in Adobe products requires returning the `match`
-    // string in order to produce the correct `offset` value
-    return match;
-  });
-
-  source += "';\n";
-
-  // if `variable` is not specified, wrap a with-statement around the generated
-  // code to add the data object to the top of the scope chain
-  var variable = options.variable,
-      hasVariable = variable;
-
-  if (!hasVariable) {
-    variable = 'obj';
-    source = 'with (' + variable + ') {\n' + source + '\n}\n';
-  }
-  // cleanup code by stripping empty strings
-  source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)
-    .replace(reEmptyStringMiddle, '$1')
-    .replace(reEmptyStringTrailing, '$1;');
-
-  // frame code as the function body
-  source = 'function(' + variable + ') {\n' +
-    (hasVariable ? '' : variable + ' || (' + variable + ' = {});\n') +
-    "var __t, __p = '', __e = _.escape" +
-    (isEvaluating
-      ? ', __j = Array.prototype.join;\n' +
-        "function print() { __p += __j.call(arguments, '') }\n"
-      : ';\n'
-    ) +
-    source +
-    'return __p\n}';
-
-  try {
-    var result = Function(importsKeys, 'return ' + source ).apply(undefined, importsValues);
-  } catch(e) {
-    e.source = source;
-    throw e;
-  }
-  if (data) {
-    return result(data);
-  }
-  // provide the compiled function's source by its `toString` method, in
-  // supported environments, or the `source` property as a convenience for
-  // inlining compiled templates during the build process
-  result.source = source;
-  return result;
-}
-
-module.exports = template;
-
-},{"../internals/escapeStringChar":122,"../internals/reInterpolate":135,"../objects/defaults":149,"../objects/keys":176,"../objects/values":183,"./escape":187,"./templateSettings":198}],198:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var escape = require('./escape'),
-    reInterpolate = require('../internals/reInterpolate');
-
-/**
- * By default, the template delimiters used by Lo-Dash are similar to those in
- * embedded Ruby (ERB). Change the following template settings to use alternative
- * delimiters.
- *
- * @static
- * @memberOf _
- * @type Object
- */
-var templateSettings = {
-
-  /**
-   * Used to detect `data` property values to be HTML-escaped.
-   *
-   * @memberOf _.templateSettings
-   * @type RegExp
-   */
-  'escape': /<%-([\s\S]+?)%>/g,
-
-  /**
-   * Used to detect code to be evaluated.
-   *
-   * @memberOf _.templateSettings
-   * @type RegExp
-   */
-  'evaluate': /<%([\s\S]+?)%>/g,
-
-  /**
-   * Used to detect `data` property values to inject.
-   *
-   * @memberOf _.templateSettings
-   * @type RegExp
-   */
-  'interpolate': reInterpolate,
-
-  /**
-   * Used to reference the data object in the template text.
-   *
-   * @memberOf _.templateSettings
-   * @type string
-   */
-  'variable': '',
-
-  /**
-   * Used to import variables into the compiled template.
-   *
-   * @memberOf _.templateSettings
-   * @type Object
-   */
-  'imports': {
-
-    /**
-     * A reference to the `lodash` function.
-     *
-     * @memberOf _.templateSettings.imports
-     * @type Function
-     */
-    '_': { 'escape': escape }
-  }
-};
-
-module.exports = templateSettings;
-
-},{"../internals/reInterpolate":135,"./escape":187}],199:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseCreateCallback = require('../internals/baseCreateCallback');
-
-/**
- * Executes the callback `n` times, returning an array of the results
- * of each callback execution. The callback is bound to `thisArg` and invoked
- * with one argument; (index).
- *
- * @static
- * @memberOf _
- * @category Utilities
- * @param {number} n The number of times to execute the callback.
- * @param {Function} callback The function called per iteration.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Array} Returns an array of the results of each `callback` execution.
- * @example
- *
- * var diceRolls = _.times(3, _.partial(_.random, 1, 6));
- * // => [3, 6, 4]
- *
- * _.times(3, function(n) { mage.castSpell(n); });
- * // => calls `mage.castSpell(n)` three times, passing `n` of `0`, `1`, and `2` respectively
- *
- * _.times(3, function(n) { this.cast(n); }, mage);
- * // => also calls `mage.castSpell(n)` three times
- */
-function times(n, callback, thisArg) {
-  n = (n = +n) > -1 ? n : 0;
-  var index = -1,
-      result = Array(n);
-
-  callback = baseCreateCallback(callback, thisArg, 1);
-  while (++index < n) {
-    result[index] = callback(index);
-  }
-  return result;
-}
-
-module.exports = times;
-
-},{"../internals/baseCreateCallback":105}],200:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var keys = require('../objects/keys'),
-    reEscapedHtml = require('../internals/reEscapedHtml'),
-    unescapeHtmlChar = require('../internals/unescapeHtmlChar');
-
-/**
- * The inverse of `_.escape` this method converts the HTML entities
- * `&amp;`, `&lt;`, `&gt;`, `&quot;`, and `&#39;` in `string` to their
- * corresponding characters.
- *
- * @static
- * @memberOf _
- * @category Utilities
- * @param {string} string The string to unescape.
- * @returns {string} Returns the unescaped string.
- * @example
- *
- * _.unescape('Fred, Barney &amp; Pebbles');
- * // => 'Fred, Barney & Pebbles'
- */
-function unescape(string) {
-  return string == null ? '' : String(string).replace(reEscapedHtml, unescapeHtmlChar);
-}
-
-module.exports = unescape;
-
-},{"../internals/reEscapedHtml":134,"../internals/unescapeHtmlChar":143,"../objects/keys":176}],201:[function(require,module,exports){
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** Used to generate unique IDs */
-var idCounter = 0;
-
-/**
- * Generates a unique ID. If `prefix` is provided the ID will be appended to it.
- *
- * @static
- * @memberOf _
- * @category Utilities
- * @param {string} [prefix] The value to prefix the ID with.
- * @returns {string} Returns the unique ID.
- * @example
- *
- * _.uniqueId('contact_');
- * // => 'contact_104'
- *
- * _.uniqueId();
- * // => '105'
- */
-function uniqueId(prefix) {
-  var id = ++idCounter;
-  return String(prefix == null ? '' : prefix) + id;
-}
-
-module.exports = uniqueId;
-
-},{}],202:[function(require,module,exports){
-function DOMParser(options){
-	this.options = options ||{locator:{}};
-	
-}
-DOMParser.prototype.parseFromString = function(source,mimeType){	
-	var options = this.options;
-	var sax =  new XMLReader();
-	var domBuilder = options.domBuilder || new DOMHandler();//contentHandler and LexicalHandler
-	var errorHandler = options.errorHandler;
-	var locator = options.locator;
-	var defaultNSMap = options.xmlns||{};
-	var entityMap = {'lt':'<','gt':'>','amp':'&','quot':'"','apos':"'"}
-	if(locator){
-		domBuilder.setDocumentLocator(locator)
-	}
-	
-	sax.errorHandler = buildErrorHandler(errorHandler,domBuilder,locator);
-	sax.domBuilder = options.domBuilder || domBuilder;
-	if(/\/x?html?$/.test(mimeType)){
-		entityMap.nbsp = '\xa0';
-		entityMap.copy = '\xa9';
-		defaultNSMap['']= 'http://www.w3.org/1999/xhtml';
-	}
-	if(source){
-		sax.parse(source,defaultNSMap,entityMap);
-	}else{
-		sax.errorHandler.error("invalid document source");
-	}
-	return domBuilder.document;
-}
-function buildErrorHandler(errorImpl,domBuilder,locator){
-	if(!errorImpl){
-		if(domBuilder instanceof DOMHandler){
-			return domBuilder;
-		}
-		errorImpl = domBuilder ;
-	}
-	var errorHandler = {}
-	var isCallback = errorImpl instanceof Function;
-	locator = locator||{}
-	function build(key){
-		var fn = errorImpl[key];
-		if(!fn){
-			if(isCallback){
-				fn = errorImpl.length == 2?function(msg){errorImpl(key,msg)}:errorImpl;
-			}else{
-				var i=arguments.length;
-				while(--i){
-					if(fn = errorImpl[arguments[i]]){
-						break;
-					}
-				}
-			}
-		}
-		errorHandler[key] = fn && function(msg){
-			fn(msg+_locator(locator));
-		}||function(){};
-	}
-	build('warning','warn');
-	build('error','warn','warning');
-	build('fatalError','warn','warning','error');
-	return errorHandler;
-}
-/**
- * +ContentHandler+ErrorHandler
- * +LexicalHandler+EntityResolver2
- * -DeclHandler-DTDHandler 
- * 
- * DefaultHandler:EntityResolver, DTDHandler, ContentHandler, ErrorHandler
- * DefaultHandler2:DefaultHandler,LexicalHandler, DeclHandler, EntityResolver2
- * @link http://www.saxproject.org/apidoc/org/xml/sax/helpers/DefaultHandler.html
- */
-function DOMHandler() {
-    this.cdata = false;
-}
-function position(locator,node){
-	node.lineNumber = locator.lineNumber;
-	node.columnNumber = locator.columnNumber;
-}
-/**
- * @see org.xml.sax.ContentHandler#startDocument
- * @link http://www.saxproject.org/apidoc/org/xml/sax/ContentHandler.html
- */ 
-DOMHandler.prototype = {
-	startDocument : function() {
-    	this.document = new DOMImplementation().createDocument(null, null, null);
-    	if (this.locator) {
-        	this.document.documentURI = this.locator.systemId;
-    	}
-	},
-	startElement:function(namespaceURI, localName, qName, attrs) {
-		var doc = this.document;
-	    var el = doc.createElementNS(namespaceURI, qName||localName);
-	    var len = attrs.length;
-	    appendElement(this, el);
-	    this.currentElement = el;
-	    
-		this.locator && position(this.locator,el)
-	    for (var i = 0 ; i < len; i++) {
-	        var namespaceURI = attrs.getURI(i);
-	        var value = attrs.getValue(i);
-	        var qName = attrs.getQName(i);
-			var attr = doc.createAttributeNS(namespaceURI, qName);
-			if( attr.getOffset){
-				position(attr.getOffset(1),attr)
-			}
-			attr.value = attr.nodeValue = value;
-			el.setAttributeNode(attr)
-	    }
-	},
-	endElement:function(namespaceURI, localName, qName) {
-		var current = this.currentElement
-	    var tagName = current.tagName;
-	    this.currentElement = current.parentNode;
-	},
-	startPrefixMapping:function(prefix, uri) {
-	},
-	endPrefixMapping:function(prefix) {
-	},
-	processingInstruction:function(target, data) {
-	    var ins = this.document.createProcessingInstruction(target, data);
-	    this.locator && position(this.locator,ins)
-	    appendElement(this, ins);
-	},
-	ignorableWhitespace:function(ch, start, length) {
-	},
-	characters:function(chars, start, length) {
-		chars = _toString.apply(this,arguments)
-		//console.log(chars)
-		if(this.currentElement && chars){
-			if (this.cdata) {
-				var charNode = this.document.createCDATASection(chars);
-				this.currentElement.appendChild(charNode);
-			} else {
-				var charNode = this.document.createTextNode(chars);
-				this.currentElement.appendChild(charNode);
-			}
-			this.locator && position(this.locator,charNode)
-		}
-	},
-	skippedEntity:function(name) {
-	},
-	endDocument:function() {
-		this.document.normalize();
-	},
-	setDocumentLocator:function (locator) {
-	    if(this.locator = locator){// && !('lineNumber' in locator)){
-	    	locator.lineNumber = 0;
-	    }
-	},
-	//LexicalHandler
-	comment:function(chars, start, length) {
-		chars = _toString.apply(this,arguments)
-	    var comm = this.document.createComment(chars);
-	    this.locator && position(this.locator,comm)
-	    appendElement(this, comm);
-	},
-	
-	startCDATA:function() {
-	    //used in characters() methods
-	    this.cdata = true;
-	},
-	endCDATA:function() {
-	    this.cdata = false;
-	},
-	
-	startDTD:function(name, publicId, systemId) {
-		var impl = this.document.implementation;
-	    if (impl && impl.createDocumentType) {
-	        var dt = impl.createDocumentType(name, publicId, systemId);
-	        this.locator && position(this.locator,dt)
-	        appendElement(this, dt);
-	    }
-	},
-	/**
-	 * @see org.xml.sax.ErrorHandler
-	 * @link http://www.saxproject.org/apidoc/org/xml/sax/ErrorHandler.html
-	 */
-	warning:function(error) {
-		console.warn(error,_locator(this.locator));
-	},
-	error:function(error) {
-		console.error(error,_locator(this.locator));
-	},
-	fatalError:function(error) {
-		console.error(error,_locator(this.locator));
-	    throw error;
-	}
-}
-function _locator(l){
-	if(l){
-		return '\n@'+(l.systemId ||'')+'#[line:'+l.lineNumber+',col:'+l.columnNumber+']'
-	}
-}
-function _toString(chars,start,length){
-	if(typeof chars == 'string'){
-		return chars.substr(start,length)
-	}else{//java sax connect width xmldom on rhino(what about: "? && !(chars instanceof String)")
-		if(chars.length >= start+length || start){
-			return new java.lang.String(chars,start,length)+'';
-		}
-		return chars;
-	}
-}
-
-/*
- * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/LexicalHandler.html
- * used method of org.xml.sax.ext.LexicalHandler:
- *  #comment(chars, start, length)
- *  #startCDATA()
- *  #endCDATA()
- *  #startDTD(name, publicId, systemId)
- *
- *
- * IGNORED method of org.xml.sax.ext.LexicalHandler:
- *  #endDTD()
- *  #startEntity(name)
- *  #endEntity(name)
- *
- *
- * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/DeclHandler.html
- * IGNORED method of org.xml.sax.ext.DeclHandler
- * 	#attributeDecl(eName, aName, type, mode, value)
- *  #elementDecl(name, model)
- *  #externalEntityDecl(name, publicId, systemId)
- *  #internalEntityDecl(name, value)
- * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/EntityResolver2.html
- * IGNORED method of org.xml.sax.EntityResolver2
- *  #resolveEntity(String name,String publicId,String baseURI,String systemId)
- *  #resolveEntity(publicId, systemId)
- *  #getExternalSubset(name, baseURI)
- * @link http://www.saxproject.org/apidoc/org/xml/sax/DTDHandler.html
- * IGNORED method of org.xml.sax.DTDHandler
- *  #notationDecl(name, publicId, systemId) {};
- *  #unparsedEntityDecl(name, publicId, systemId, notationName) {};
- */
-"endDTD,startEntity,endEntity,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,resolveEntity,getExternalSubset,notationDecl,unparsedEntityDecl".replace(/\w+/g,function(key){
-	DOMHandler.prototype[key] = function(){return null}
-})
-
-/* Private static helpers treated below as private instance methods, so don't need to add these to the public API; we might use a Relator to also get rid of non-standard public properties */
-function appendElement (hander,node) {
-    if (!hander.currentElement) {
-        hander.document.appendChild(node);
-    } else {
-        hander.currentElement.appendChild(node);
-    }
-}//appendChild and setAttributeNS are preformance key
-
-if(typeof require == 'function'){
-	var XMLReader = require('./sax').XMLReader;
-	var DOMImplementation = exports.DOMImplementation = require('./dom').DOMImplementation;
-	exports.XMLSerializer = require('./dom').XMLSerializer ;
-	exports.DOMParser = DOMParser;
-}
-
-},{"./dom":203,"./sax":204}],203:[function(require,module,exports){
-/*
- * DOM Level 2
- * Object DOMException
- * @see http://www.w3.org/TR/REC-DOM-Level-1/ecma-script-language-binding.html
- * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html
- */
-
-function copy(src,dest){
-	for(var p in src){
-		dest[p] = src[p];
-	}
-}
-/**
-^\w+\.prototype\.([_\w]+)\s*=\s*((?:.*\{\s*?[\r\n][\s\S]*?^})|\S.*?(?=[;\r\n]));?
-^\w+\.prototype\.([_\w]+)\s*=\s*(\S.*?(?=[;\r\n]));?
- */
-function _extends(Class,Super){
-	var pt = Class.prototype;
-	if(Object.create){
-		var ppt = Object.create(Super.prototype)
-		pt.__proto__ = ppt;
-	}
-	if(!(pt instanceof Super)){
-		function t(){};
-		t.prototype = Super.prototype;
-		t = new t();
-		copy(pt,t);
-		Class.prototype = pt = t;
-	}
-	if(pt.constructor != Class){
-		if(typeof Class != 'function'){
-			console.error("unknow Class:"+Class)
-		}
-		pt.constructor = Class
-	}
-}
-var htmlns = 'http://www.w3.org/1999/xhtml' ;
-// Node Types
-var NodeType = {}
-var ELEMENT_NODE                = NodeType.ELEMENT_NODE                = 1;
-var ATTRIBUTE_NODE              = NodeType.ATTRIBUTE_NODE              = 2;
-var TEXT_NODE                   = NodeType.TEXT_NODE                   = 3;
-var CDATA_SECTION_NODE          = NodeType.CDATA_SECTION_NODE          = 4;
-var ENTITY_REFERENCE_NODE       = NodeType.ENTITY_REFERENCE_NODE       = 5;
-var ENTITY_NODE                 = NodeType.ENTITY_NODE                 = 6;
-var PROCESSING_INSTRUCTION_NODE = NodeType.PROCESSING_INSTRUCTION_NODE = 7;
-var COMMENT_NODE                = NodeType.COMMENT_NODE                = 8;
-var DOCUMENT_NODE               = NodeType.DOCUMENT_NODE               = 9;
-var DOCUMENT_TYPE_NODE          = NodeType.DOCUMENT_TYPE_NODE          = 10;
-var DOCUMENT_FRAGMENT_NODE      = NodeType.DOCUMENT_FRAGMENT_NODE      = 11;
-var NOTATION_NODE               = NodeType.NOTATION_NODE               = 12;
-
-// ExceptionCode
-var ExceptionCode = {}
-var ExceptionMessage = {};
-var INDEX_SIZE_ERR              = ExceptionCode.INDEX_SIZE_ERR              = ((ExceptionMessage[1]="Index size error"),1);
-var DOMSTRING_SIZE_ERR          = ExceptionCode.DOMSTRING_SIZE_ERR          = ((ExceptionMessage[2]="DOMString size error"),2);
-var HIERARCHY_REQUEST_ERR       = ExceptionCode.HIERARCHY_REQUEST_ERR       = ((ExceptionMessage[3]="Hierarchy request error"),3);
-var WRONG_DOCUMENT_ERR          = ExceptionCode.WRONG_DOCUMENT_ERR          = ((ExceptionMessage[4]="Wrong document"),4);
-var INVALID_CHARACTER_ERR       = ExceptionCode.INVALID_CHARACTER_ERR       = ((ExceptionMessage[5]="Invalid character"),5);
-var NO_DATA_ALLOWED_ERR         = ExceptionCode.NO_DATA_ALLOWED_ERR         = ((ExceptionMessage[6]="No data allowed"),6);
-var NO_MODIFICATION_ALLOWED_ERR = ExceptionCode.NO_MODIFICATION_ALLOWED_ERR = ((ExceptionMessage[7]="No modification allowed"),7);
-var NOT_FOUND_ERR               = ExceptionCode.NOT_FOUND_ERR               = ((ExceptionMessage[8]="Not found"),8);
-var NOT_SUPPORTED_ERR           = ExceptionCode.NOT_SUPPORTED_ERR           = ((ExceptionMessage[9]="Not supported"),9);
-var INUSE_ATTRIBUTE_ERR         = ExceptionCode.INUSE_ATTRIBUTE_ERR         = ((ExceptionMessage[10]="Attribute in use"),10);
-//level2
-var INVALID_STATE_ERR        	= ExceptionCode.INVALID_STATE_ERR        	= ((ExceptionMessage[11]="Invalid state"),11);
-var SYNTAX_ERR               	= ExceptionCode.SYNTAX_ERR               	= ((ExceptionMessage[12]="Syntax error"),12);
-var INVALID_MODIFICATION_ERR 	= ExceptionCode.INVALID_MODIFICATION_ERR 	= ((ExceptionMessage[13]="Invalid modification"),13);
-var NAMESPACE_ERR            	= ExceptionCode.NAMESPACE_ERR           	= ((ExceptionMessage[14]="Invalid namespace"),14);
-var INVALID_ACCESS_ERR       	= ExceptionCode.INVALID_ACCESS_ERR      	= ((ExceptionMessage[15]="Invalid access"),15);
-
-
-function DOMException(code, message) {
-	if(message instanceof Error){
-		var error = message;
-	}else{
-		error = this;
-		Error.call(this, ExceptionMessage[code]);
-		this.message = ExceptionMessage[code];
-		if(Error.captureStackTrace) Error.captureStackTrace(this, DOMException);
-	}
-	error.code = code;
-	if(message) this.message = this.message + ": " + message;
-	return error;
-};
-DOMException.prototype = Error.prototype;
-copy(ExceptionCode,DOMException)
-/**
- * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-536297177
- * The NodeList interface provides the abstraction of an ordered collection of nodes, without defining or constraining how this collection is implemented. NodeList objects in the DOM are live.
- * The items in the NodeList are accessible via an integral index, starting from 0.
- */
-function NodeList() {
-};
-NodeList.prototype = {
-	/**
-	 * The number of nodes in the list. The range of valid child node indices is 0 to length-1 inclusive.
-	 * @standard level1
-	 */
-	length:0, 
-	/**
-	 * Returns the indexth item in the collection. If index is greater than or equal to the number of nodes in the list, this returns null.
-	 * @standard level1
-	 * @param index  unsigned long 
-	 *   Index into the collection.
-	 * @return Node
-	 * 	The node at the indexth position in the NodeList, or null if that is not a valid index. 
-	 */
-	item: function(index) {
-		return this[index] || null;
-	}
-};
-function LiveNodeList(node,refresh){
-	this._node = node;
-	this._refresh = refresh
-	_updateLiveList(this);
-}
-function _updateLiveList(list){
-	var inc = list._node._inc || list._node.ownerDocument._inc;
-	if(list._inc != inc){
-		var ls = list._refresh(list._node);
-		//console.log(ls.length)
-		__set__(list,'length',ls.length);
-		copy(ls,list);
-		list._inc = inc;
-	}
-}
-LiveNodeList.prototype.item = function(i){
-	_updateLiveList(this);
-	return this[i];
-}
-
-_extends(LiveNodeList,NodeList);
-/**
- * 
- * Objects implementing the NamedNodeMap interface are used to represent collections of nodes that can be accessed by name. Note that NamedNodeMap does not inherit from NodeList; NamedNodeMaps are not maintained in any particular order. Objects contained in an object implementing NamedNodeMap may also be accessed by an ordinal index, but this is simply to allow convenient enumeration of the contents of a NamedNodeMap, and does not imply that the DOM specifies an order to these Nodes.
- * NamedNodeMap objects in the DOM are live.
- * used for attributes or DocumentType entities 
- */
-function NamedNodeMap() {
-};
-
-function _findNodeIndex(list,node){
-	var i = list.length;
-	while(i--){
-		if(list[i] === node){return i}
-	}
-}
-
-function _addNamedNode(el,list,newAttr,oldAttr){
-	if(oldAttr){
-		list[_findNodeIndex(list,oldAttr)] = newAttr;
-	}else{
-		list[list.length++] = newAttr;
-	}
-	if(el){
-		newAttr.ownerElement = el;
-		var doc = el.ownerDocument;
-		if(doc){
-			oldAttr && _onRemoveAttribute(doc,el,oldAttr);
-			_onAddAttribute(doc,el,newAttr);
-		}
-	}
-}
-function _removeNamedNode(el,list,attr){
-	var i = _findNodeIndex(list,attr);
-	if(i>=0){
-		var lastIndex = list.length-1
-		while(i<lastIndex){
-			list[i] = list[++i]
-		}
-		list.length = lastIndex;
-		if(el){
-			var doc = el.ownerDocument;
-			if(doc){
-				_onRemoveAttribute(doc,el,attr);
-				attr.ownerElement = null;
-			}
-		}
-	}else{
-		throw DOMException(NOT_FOUND_ERR,new Error())
-	}
-}
-NamedNodeMap.prototype = {
-	length:0,
-	item:NodeList.prototype.item,
-	getNamedItem: function(key) {
-//		if(key.indexOf(':')>0 || key == 'xmlns'){
-//			return null;
-//		}
-		var i = this.length;
-		while(i--){
-			var attr = this[i];
-			if(attr.nodeName == key){
-				return attr;
-			}
-		}
-	},
-	setNamedItem: function(attr) {
-		var el = attr.ownerElement;
-		if(el && el!=this._ownerElement){
-			throw new DOMException(INUSE_ATTRIBUTE_ERR);
-		}
-		var oldAttr = this.getNamedItem(attr.nodeName);
-		_addNamedNode(this._ownerElement,this,attr,oldAttr);
-		return oldAttr;
-	},
-	/* returns Node */
-	setNamedItemNS: function(attr) {// raises: WRONG_DOCUMENT_ERR,NO_MODIFICATION_ALLOWED_ERR,INUSE_ATTRIBUTE_ERR
-		var el = attr.ownerElement, oldAttr;
-		if(el && el!=this._ownerElement){
-			throw new DOMException(INUSE_ATTRIBUTE_ERR);
-		}
-		oldAttr = this.getNamedItemNS(attr.namespaceURI,attr.localName);
-		_addNamedNode(this._ownerElement,this,attr,oldAttr);
-		return oldAttr;
-	},
-
-	/* returns Node */
-	removeNamedItem: function(key) {
-		var attr = this.getNamedItem(key);
-		_removeNamedNode(this._ownerElement,this,attr);
-		return attr;
-		
-		
-	},// raises: NOT_FOUND_ERR,NO_MODIFICATION_ALLOWED_ERR
-	
-	//for level2
-	removeNamedItemNS:function(namespaceURI,localName){
-		var attr = this.getNamedItemNS(namespaceURI,localName);
-		_removeNamedNode(this._ownerElement,this,attr);
-		return attr;
-	},
-	getNamedItemNS: function(namespaceURI, localName) {
-		var i = this.length;
-		while(i--){
-			var node = this[i];
-			if(node.localName == localName && node.namespaceURI == namespaceURI){
-				return node;
-			}
-		}
-		return null;
-	}
-};
-/**
- * @see http://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-102161490
- */
-function DOMImplementation(/* Object */ features) {
-	this._features = {};
-	if (features) {
-		for (var feature in features) {
-			 this._features = features[feature];
-		}
-	}
-};
-
-DOMImplementation.prototype = {
-	hasFeature: function(/* string */ feature, /* string */ version) {
-		var versions = this._features[feature.toLowerCase()];
-		if (versions && (!version || version in versions)) {
-			return true;
-		} else {
-			return false;
-		}
-	},
-	// Introduced in DOM Level 2:
-	createDocument:function(namespaceURI,  qualifiedName, doctype){// raises:INVALID_CHARACTER_ERR,NAMESPACE_ERR,WRONG_DOCUMENT_ERR
-		var doc = new Document();
-		doc.doctype = doctype;
-		if(doctype){
-			doc.appendChild(doctype);
-		}
-		doc.implementation = this;
-		doc.childNodes = new NodeList();
-		if(qualifiedName){
-			var root = doc.createElementNS(namespaceURI,qualifiedName);
-			doc.appendChild(root);
-		}
-		return doc;
-	},
-	// Introduced in DOM Level 2:
-	createDocumentType:function(qualifiedName, publicId, systemId){// raises:INVALID_CHARACTER_ERR,NAMESPACE_ERR
-		var node = new DocumentType();
-		node.name = qualifiedName;
-		node.nodeName = qualifiedName;
-		node.publicId = publicId;
-		node.systemId = systemId;
-		// Introduced in DOM Level 2:
-		//readonly attribute DOMString        internalSubset;
-		
-		//TODO:..
-		//  readonly attribute NamedNodeMap     entities;
-		//  readonly attribute NamedNodeMap     notations;
-		return node;
-	}
-};
-
-
-/**
- * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-1950641247
- */
-
-function Node() {
-};
-
-Node.prototype = {
-	firstChild : null,
-	lastChild : null,
-	previousSibling : null,
-	nextSibling : null,
-	attributes : null,
-	parentNode : null,
-	childNodes : null,
-	ownerDocument : null,
-	nodeValue : null,
-	namespaceURI : null,
-	prefix : null,
-	localName : null,
-	// Modified in DOM Level 2:
-	insertBefore:function(newChild, refChild){//raises 
-		return _insertBefore(this,newChild,refChild);
-	},
-	replaceChild:function(newChild, oldChild){//raises 
-		this.insertBefore(newChild,oldChild);
-		if(oldChild){
-			this.removeChild(oldChild);
-		}
-	},
-	removeChild:function(oldChild){
-		return _removeChild(this,oldChild);
-	},
-	appendChild:function(newChild){
-		return this.insertBefore(newChild,null);
-	},
-	hasChildNodes:function(){
-		return this.firstChild != null;
-	},
-	cloneNode:function(deep){
-		return cloneNode(this.ownerDocument||this,this,deep);
-	},
-	// Modified in DOM Level 2:
-	normalize:function(){
-		var child = this.firstChild;
-		while(child){
-			var next = child.nextSibling;
-			if(next && next.nodeType == TEXT_NODE && child.nodeType == TEXT_NODE){
-				this.removeChild(next);
-				child.appendData(next.data);
-			}else{
-				child.normalize();
-				child = next;
-			}
-		}
-	},
-  	// Introduced in DOM Level 2:
-	isSupported:function(feature, version){
-		return this.ownerDocument.implementation.hasFeature(feature,version);
-	},
-    // Introduced in DOM Level 2:
-    hasAttributes:function(){
-    	return this.attributes.length>0;
-    },
-    lookupPrefix:function(namespaceURI){
-    	var el = this;
-    	while(el){
-    		var map = el._nsMap;
-    		//console.dir(map)
-    		if(map){
-    			for(var n in map){
-    				if(map[n] == namespaceURI){
-    					return n;
-    				}
-    			}
-    		}
-    		el = el.nodeType == 2?el.ownerDocument : el.parentNode;
-    	}
-    	return null;
-    },
-    // Introduced in DOM Level 3:
-    lookupNamespaceURI:function(prefix){
-    	var el = this;
-    	while(el){
-    		var map = el._nsMap;
-    		//console.dir(map)
-    		if(map){
-    			if(prefix in map){
-    				return map[prefix] ;
-    			}
-    		}
-    		el = el.nodeType == 2?el.ownerDocument : el.parentNode;
-    	}
-    	return null;
-    },
-    // Introduced in DOM Level 3:
-    isDefaultNamespace:function(namespaceURI){
-    	var prefix = this.lookupPrefix(namespaceURI);
-    	return prefix == null;
-    }
-};
-
-
-function _xmlEncoder(c){
-	return c == '<' && '&lt;' ||
-         c == '>' && '&gt;' ||
-         c == '&' && '&amp;' ||
-         c == '"' && '&quot;' ||
-         '&#'+c.charCodeAt()+';'
-}
-
-
-copy(NodeType,Node);
-copy(NodeType,Node.prototype);
-
-/**
- * @param callback return true for continue,false for break
- * @return boolean true: break visit;
- */
-function _visitNode(node,callback){
-	if(callback(node)){
-		return true;
-	}
-	if(node = node.firstChild){
-		do{
-			if(_visitNode(node,callback)){return true}
-        }while(node=node.nextSibling)
-    }
-}
-
-
-
-function Document(){
-}
-function _onAddAttribute(doc,el,newAttr){
-	doc && doc._inc++;
-	var ns = newAttr.namespaceURI ;
-	if(ns == 'http://www.w3.org/2000/xmlns/'){
-		//update namespace
-		el._nsMap[newAttr.prefix?newAttr.localName:''] = newAttr.value
-	}
-}
-function _onRemoveAttribute(doc,el,newAttr,remove){
-	doc && doc._inc++;
-	var ns = newAttr.namespaceURI ;
-	if(ns == 'http://www.w3.org/2000/xmlns/'){
-		//update namespace
-		delete el._nsMap[newAttr.prefix?newAttr.localName:'']
-	}
-}
-function _onUpdateChild(doc,el,newChild){
-	if(doc && doc._inc){
-		doc._inc++;
-		//update childNodes
-		var cs = el.childNodes;
-		if(newChild){
-			cs[cs.length++] = newChild;
-		}else{
-			//console.log(1)
-			var child = el.firstChild;
-			var i = 0;
-			while(child){
-				cs[i++] = child;
-				child =child.nextSibling;
-			}
-			cs.length = i;
-		}
-	}
-}
-
-/**
- * attributes;
- * children;
- * 
- * writeable properties:
- * nodeValue,Attr:value,CharacterData:data
- * prefix
- */
-function _removeChild(parentNode,child){
-	var previous = child.previousSibling;
-	var next = child.nextSibling;
-	if(previous){
-		previous.nextSibling = next;
-	}else{
-		parentNode.firstChild = next
-	}
-	if(next){
-		next.previousSibling = previous;
-	}else{
-		parentNode.lastChild = previous;
-	}
-	_onUpdateChild(parentNode.ownerDocument,parentNode);
-	return child;
-}
-/**
- * preformance key(refChild == null)
- */
-function _insertBefore(parentNode,newChild,nextChild){
-	var cp = newChild.parentNode;
-	if(cp){
-		cp.removeChild(newChild);//remove and update
-	}
-	if(newChild.nodeType === DOCUMENT_FRAGMENT_NODE){
-		var newFirst = newChild.firstChild;
-		if (newFirst == null) {
-			return newChild;
-		}
-		var newLast = newChild.lastChild;
-	}else{
-		newFirst = newLast = newChild;
-	}
-	var pre = nextChild ? nextChild.previousSibling : parentNode.lastChild;
-
-	newFirst.previousSibling = pre;
-	newLast.nextSibling = nextChild;
-	
-	
-	if(pre){
-		pre.nextSibling = newFirst;
-	}else{
-		parentNode.firstChild = newFirst;
-	}
-	if(nextChild == null){
-		parentNode.lastChild = newLast;
-	}else{
-		nextChild.previousSibling = newLast;
-	}
-	do{
-		newFirst.parentNode = parentNode;
-	}while(newFirst !== newLast && (newFirst= newFirst.nextSibling))
-	_onUpdateChild(parentNode.ownerDocument||parentNode,parentNode);
-	//console.log(parentNode.lastChild.nextSibling == null)
-	if (newChild.nodeType == DOCUMENT_FRAGMENT_NODE) {
-		newChild.firstChild = newChild.lastChild = null;
-	}
-	return newChild;
-}
-function _appendSingleChild(parentNode,newChild){
-	var cp = newChild.parentNode;
-	if(cp){
-		var pre = parentNode.lastChild;
-		cp.removeChild(newChild);//remove and update
-		var pre = parentNode.lastChild;
-	}
-	var pre = parentNode.lastChild;
-	newChild.parentNode = parentNode;
-	newChild.previousSibling = pre;
-	newChild.nextSibling = null;
-	if(pre){
-		pre.nextSibling = newChild;
-	}else{
-		parentNode.firstChild = newChild;
-	}
-	parentNode.lastChild = newChild;
-	_onUpdateChild(parentNode.ownerDocument,parentNode,newChild);
-	return newChild;
-	//console.log("__aa",parentNode.lastChild.nextSibling == null)
-}
-Document.prototype = {
-	//implementation : null,
-	nodeName :  '#document',
-	nodeType :  DOCUMENT_NODE,
-	doctype :  null,
-	documentElement :  null,
-	_inc : 1,
-	
-	insertBefore :  function(newChild, refChild){//raises 
-		if(newChild.nodeType == DOCUMENT_FRAGMENT_NODE){
-			var child = newChild.firstChild;
-			while(child){
-				var next = child.nextSibling;
-				this.insertBefore(child,refChild);
-				child = next;
-			}
-			return newChild;
-		}
-		if(this.documentElement == null && newChild.nodeType == 1){
-			this.documentElement = newChild;
-		}
-		
-		return _insertBefore(this,newChild,refChild),(newChild.ownerDocument = this),newChild;
-	},
-	removeChild :  function(oldChild){
-		if(this.documentElement == oldChild){
-			this.documentElement = null;
-		}
-		return _removeChild(this,oldChild);
-	},
-	// Introduced in DOM Level 2:
-	importNode : function(importedNode,deep){
-		return importNode(this,importedNode,deep);
-	},
-	// Introduced in DOM Level 2:
-	getElementById :	function(id){
-		var rtv = null;
-		_visitNode(this.documentElement,function(node){
-			if(node.nodeType == 1){
-				if(node.getAttribute('id') == id){
-					rtv = node;
-					return true;
-				}
-			}
-		})
-		return rtv;
-	},
-	
-	//document factory method:
-	createElement :	function(tagName){
-		var node = new Element();
-		node.ownerDocument = this;
-		node.nodeName = tagName;
-		node.tagName = tagName;
-		node.childNodes = new NodeList();
-		var attrs	= node.attributes = new NamedNodeMap();
-		attrs._ownerElement = node;
-		return node;
-	},
-	createDocumentFragment :	function(){
-		var node = new DocumentFragment();
-		node.ownerDocument = this;
-		node.childNodes = new NodeList();
-		return node;
-	},
-	createTextNode :	function(data){
-		var node = new Text();
-		node.ownerDocument = this;
-		node.appendData(data)
-		return node;
-	},
-	createComment :	function(data){
-		var node = new Comment();
-		node.ownerDocument = this;
-		node.appendData(data)
-		return node;
-	},
-	createCDATASection :	function(data){
-		var node = new CDATASection();
-		node.ownerDocument = this;
-		node.appendData(data)
-		return node;
-	},
-	createProcessingInstruction :	function(target,data){
-		var node = new ProcessingInstruction();
-		node.ownerDocument = this;
-		node.tagName = node.target = target;
-		node.nodeValue= node.data = data;
-		return node;
-	},
-	createAttribute :	function(name){
-		var node = new Attr();
-		node.ownerDocument	= this;
-		node.name = name;
-		node.nodeName	= name;
-		node.localName = name;
-		node.specified = true;
-		return node;
-	},
-	createEntityReference :	function(name){
-		var node = new EntityReference();
-		node.ownerDocument	= this;
-		node.nodeName	= name;
-		return node;
-	},
-	// Introduced in DOM Level 2:
-	createElementNS :	function(namespaceURI,qualifiedName){
-		var node = new Element();
-		var pl = qualifiedName.split(':');
-		var attrs	= node.attributes = new NamedNodeMap();
-		node.childNodes = new NodeList();
-		node.ownerDocument = this;
-		node.nodeName = qualifiedName;
-		node.tagName = qualifiedName;
-		node.namespaceURI = namespaceURI;
-		if(pl.length == 2){
-			node.prefix = pl[0];
-			node.localName = pl[1];
-		}else{
-			//el.prefix = null;
-			node.localName = qualifiedName;
-		}
-		attrs._ownerElement = node;
-		return node;
-	},
-	// Introduced in DOM Level 2:
-	createAttributeNS :	function(namespaceURI,qualifiedName){
-		var node = new Attr();
-		var pl = qualifiedName.split(':');
-		node.ownerDocument = this;
-		node.nodeName = qualifiedName;
-		node.name = qualifiedName;
-		node.namespaceURI = namespaceURI;
-		node.specified = true;
-		if(pl.length == 2){
-			node.prefix = pl[0];
-			node.localName = pl[1];
-		}else{
-			//el.prefix = null;
-			node.localName = qualifiedName;
-		}
-		return node;
-	}
-};
-_extends(Document,Node);
-
-
-function Element() {
-	this._nsMap = {};
-};
-Element.prototype = {
-	nodeType : ELEMENT_NODE,
-	hasAttribute : function(name){
-		return this.getAttributeNode(name)!=null;
-	},
-	getAttribute : function(name){
-		var attr = this.getAttributeNode(name);
-		return attr && attr.value || '';
-	},
-	getAttributeNode : function(name){
-		return this.attributes.getNamedItem(name);
-	},
-	setAttribute : function(name, value){
-		var attr = this.ownerDocument.createAttribute(name);
-		attr.value = attr.nodeValue = "" + value;
-		this.setAttributeNode(attr)
-	},
-	removeAttribute : function(name){
-		var attr = this.getAttributeNode(name)
-		attr && this.removeAttributeNode(attr);
-	},
-	
-	//four real opeartion method
-	appendChild:function(newChild){
-		if(newChild.nodeType === DOCUMENT_FRAGMENT_NODE){
-			return this.insertBefore(newChild,null);
-		}else{
-			return _appendSingleChild(this,newChild);
-		}
-	},
-	setAttributeNode : function(newAttr){
-		return this.attributes.setNamedItem(newAttr);
-	},
-	setAttributeNodeNS : function(newAttr){
-		return this.attributes.setNamedItemNS(newAttr);
-	},
-	removeAttributeNode : function(oldAttr){
-		return this.attributes.removeNamedItem(oldAttr.nodeName);
-	},
-	//get real attribute name,and remove it by removeAttributeNode
-	removeAttributeNS : function(namespaceURI, localName){
-		var old = this.getAttributeNodeNS(namespaceURI, localName);
-		old && this.removeAttributeNode(old);
-	},
-	
-	hasAttributeNS : function(namespaceURI, localName){
-		return this.getAttributeNodeNS(namespaceURI, localName)!=null;
-	},
-	getAttributeNS : function(namespaceURI, localName){
-		var attr = this.getAttributeNodeNS(namespaceURI, localName);
-		return attr && attr.value || '';
-	},
-	setAttributeNS : function(namespaceURI, qualifiedName, value){
-		var attr = this.ownerDocument.createAttributeNS(namespaceURI, qualifiedName);
-		attr.value = attr.nodeValue = value;
-		this.setAttributeNode(attr)
-	},
-	getAttributeNodeNS : function(namespaceURI, localName){
-		return this.attributes.getNamedItemNS(namespaceURI, localName);
-	},
-	
-	getElementsByTagName : function(tagName){
-		return new LiveNodeList(this,function(base){
-			var ls = [];
-			_visitNode(base,function(node){
-				if(node !== base && node.nodeType == ELEMENT_NODE && (tagName === '*' || node.tagName == tagName)){
-					ls.push(node);
-				}
-			});
-			return ls;
-		});
-	},
-	getElementsByTagNameNS : function(namespaceURI, localName){
-		return new LiveNodeList(this,function(base){
-			var ls = [];
-			_visitNode(base,function(node){
-				if(node !== base && node.nodeType === ELEMENT_NODE && node.namespaceURI === namespaceURI && (localName === '*' || node.localName == localName)){
-					ls.push(node);
-				}
-			});
-			return ls;
-		});
-	}
-};
-Document.prototype.getElementsByTagName = Element.prototype.getElementsByTagName;
-Document.prototype.getElementsByTagNameNS = Element.prototype.getElementsByTagNameNS;
-
-
-_extends(Element,Node);
-function Attr() {
-};
-Attr.prototype.nodeType = ATTRIBUTE_NODE;
-_extends(Attr,Node);
-
-
-function CharacterData() {
-};
-CharacterData.prototype = {
-	data : '',
-	substringData : function(offset, count) {
-		return this.data.substring(offset, offset+count);
-	},
-	appendData: function(text) {
-		text = this.data+text;
-		this.nodeValue = this.data = text;
-		this.length = text.length;
-	},
-	insertData: function(offset,text) {
-		this.replaceData(offset,0,text);
-	
-	},
-	appendChild:function(newChild){
-		//if(!(newChild instanceof CharacterData)){
-			throw new Error(ExceptionMessage[3])
-		//}
-		return Node.prototype.appendChild.apply(this,arguments)
-	},
-	deleteData: function(offset, count) {
-		this.replaceData(offset,count,"");
-	},
-	replaceData: function(offset, count, text) {
-		var start = this.data.substring(0,offset);
-		var end = this.data.substring(offset+count);
-		text = start + text + end;
-		this.nodeValue = this.data = text;
-		this.length = text.length;
-	}
-}
-_extends(CharacterData,Node);
-function Text() {
-};
-Text.prototype = {
-	nodeName : "#text",
-	nodeType : TEXT_NODE,
-	splitText : function(offset) {
-		var text = this.data;
-		var newText = text.substring(offset);
-		text = text.substring(0, offset);
-		this.data = this.nodeValue = text;
-		this.length = text.length;
-		var newNode = this.ownerDocument.createTextNode(newText);
-		if(this.parentNode){
-			this.parentNode.insertBefore(newNode, this.nextSibling);
-		}
-		return newNode;
-	}
-}
-_extends(Text,CharacterData);
-function Comment() {
-};
-Comment.prototype = {
-	nodeName : "#comment",
-	nodeType : COMMENT_NODE
-}
-_extends(Comment,CharacterData);
-
-function CDATASection() {
-};
-CDATASection.prototype = {
-	nodeName : "#cdata-section",
-	nodeType : CDATA_SECTION_NODE
-}
-_extends(CDATASection,CharacterData);
-
-
-function DocumentType() {
-};
-DocumentType.prototype.nodeType = DOCUMENT_TYPE_NODE;
-_extends(DocumentType,Node);
-
-function Notation() {
-};
-Notation.prototype.nodeType = NOTATION_NODE;
-_extends(Notation,Node);
-
-function Entity() {
-};
-Entity.prototype.nodeType = ENTITY_NODE;
-_extends(Entity,Node);
-
-function EntityReference() {
-};
-EntityReference.prototype.nodeType = ENTITY_REFERENCE_NODE;
-_extends(EntityReference,Node);
-
-function DocumentFragment() {
-};
-DocumentFragment.prototype.nodeName =	"#document-fragment";
-DocumentFragment.prototype.nodeType =	DOCUMENT_FRAGMENT_NODE;
-_extends(DocumentFragment,Node);
-
-
-function ProcessingInstruction() {
-}
-ProcessingInstruction.prototype.nodeType = PROCESSING_INSTRUCTION_NODE;
-_extends(ProcessingInstruction,Node);
-function XMLSerializer(){}
-XMLSerializer.prototype.serializeToString = function(node){
-	var buf = [];
-	serializeToString(node,buf);
-	return buf.join('');
-}
-Node.prototype.toString =function(){
-	return XMLSerializer.prototype.serializeToString(this);
-}
-function serializeToString(node,buf){
-	switch(node.nodeType){
-	case ELEMENT_NODE:
-		var attrs = node.attributes;
-		var len = attrs.length;
-		var child = node.firstChild;
-		var nodeName = node.tagName;
-		var isHTML = htmlns === node.namespaceURI
-		buf.push('<',nodeName);
-		for(var i=0;i<len;i++){
-			serializeToString(attrs.item(i),buf,isHTML);
-		}
-		if(child || isHTML && !/^(?:meta|link|img|br|hr|input)$/i.test(nodeName)){
-			buf.push('>');
-			//if is cdata child node
-			if(isHTML && /^script$/i.test(nodeName)){
-				if(child){
-					buf.push(child.data);
-				}
-			}else{
-				while(child){
-					serializeToString(child,buf);
-					child = child.nextSibling;
-				}
-			}
-			buf.push('</',nodeName,'>');
-		}else{
-			buf.push('/>');
-		}
-		return;
-	case DOCUMENT_NODE:
-	case DOCUMENT_FRAGMENT_NODE:
-		var child = node.firstChild;
-		while(child){
-			serializeToString(child,buf);
-			child = child.nextSibling;
-		}
-		return;
-	case ATTRIBUTE_NODE:
-		return buf.push(' ',node.name,'="',node.value.replace(/[<&"]/g,_xmlEncoder),'"');
-	case TEXT_NODE:
-		return buf.push(node.data.replace(/[<&]/g,_xmlEncoder));
-	case CDATA_SECTION_NODE:
-		return buf.push( '<![CDATA[',node.data,']]>');
-	case COMMENT_NODE:
-		return buf.push( "<!--",node.data,"-->");
-	case DOCUMENT_TYPE_NODE:
-		var pubid = node.publicId;
-		var sysid = node.systemId;
-		buf.push('<!DOCTYPE ',node.name);
-		if(pubid){
-			buf.push(' PUBLIC "',pubid);
-			if (sysid && sysid!='.') {
-				buf.push( '" "',sysid);
-			}
-			buf.push('">');
-		}else if(sysid && sysid!='.'){
-			buf.push(' SYSTEM "',sysid,'">');
-		}else{
-			var sub = node.internalSubset;
-			if(sub){
-				buf.push(" [",sub,"]");
-			}
-			buf.push(">");
-		}
-		return;
-	case PROCESSING_INSTRUCTION_NODE:
-		return buf.push( "<?",node.target," ",node.data,"?>");
-	case ENTITY_REFERENCE_NODE:
-		return buf.push( '&',node.nodeName,';');
-	//case ENTITY_NODE:
-	//case NOTATION_NODE:
-	default:
-		buf.push('??',node.nodeName);
-	}
-}
-function importNode(doc,node,deep){
-	var node2;
-	switch (node.nodeType) {
-	case ELEMENT_NODE:
-		node2 = node.cloneNode(false);
-		node2.ownerDocument = doc;
-		//var attrs = node2.attributes;
-		//var len = attrs.length;
-		//for(var i=0;i<len;i++){
-			//node2.setAttributeNodeNS(importNode(doc,attrs.item(i),deep));
-		//}
-	case DOCUMENT_FRAGMENT_NODE:
-		break;
-	case ATTRIBUTE_NODE:
-		deep = true;
-		break;
-	//case ENTITY_REFERENCE_NODE:
-	//case PROCESSING_INSTRUCTION_NODE:
-	////case TEXT_NODE:
-	//case CDATA_SECTION_NODE:
-	//case COMMENT_NODE:
-	//	deep = false;
-	//	break;
-	//case DOCUMENT_NODE:
-	//case DOCUMENT_TYPE_NODE:
-	//cannot be imported.
-	//case ENTITY_NODE:
-	//case NOTATION_NODE:
-	//can not hit in level3
-	//default:throw e;
-	}
-	if(!node2){
-		node2 = node.cloneNode(false);//false
-	}
-	node2.ownerDocument = doc;
-	node2.parentNode = null;
-	if(deep){
-		var child = node.firstChild;
-		while(child){
-			node2.appendChild(importNode(doc,child,deep));
-			child = child.nextSibling;
-		}
-	}
-	return node2;
-}
-//
-//var _relationMap = {firstChild:1,lastChild:1,previousSibling:1,nextSibling:1,
-//					attributes:1,childNodes:1,parentNode:1,documentElement:1,doctype,};
-function cloneNode(doc,node,deep){
-	var node2 = new node.constructor();
-	for(var n in node){
-		var v = node[n];
-		if(typeof v != 'object' ){
-			if(v != node2[n]){
-				node2[n] = v;
-			}
-		}
-	}
-	if(node.childNodes){
-		node2.childNodes = new NodeList();
-	}
-	node2.ownerDocument = doc;
-	switch (node2.nodeType) {
-	case ELEMENT_NODE:
-		var attrs	= node.attributes;
-		var attrs2	= node2.attributes = new NamedNodeMap();
-		var len = attrs.length
-		attrs2._ownerElement = node2;
-		for(var i=0;i<len;i++){
-			node2.setAttributeNode(cloneNode(doc,attrs.item(i),true));
-		}
-		break;;
-	case ATTRIBUTE_NODE:
-		deep = true;
-	}
-	if(deep){
-		var child = node.firstChild;
-		while(child){
-			node2.appendChild(cloneNode(doc,child,deep));
-			child = child.nextSibling;
-		}
-	}
-	return node2;
-}
-
-function __set__(object,key,value){
-	object[key] = value
-}
-//do dynamic
-try{
-	if(Object.defineProperty){
-		Object.defineProperty(LiveNodeList.prototype,'length',{
-			get:function(){
-				_updateLiveList(this);
-				return this.$$length;
-			}
-		});
-		Object.defineProperty(Node.prototype,'textContent',{
-			get:function(){
-				return getTextContent(this);
-			},
-			set:function(data){
-				switch(this.nodeType){
-				case 1:
-				case 11:
-					while(this.firstChild){
-						this.removeChild(this.firstChild);
-					}
-					if(data || String(data)){
-						this.appendChild(this.ownerDocument.createTextNode(data));
-					}
-					break;
-				default:
-					//TODO:
-					this.data = data;
-					this.value = value;
-					this.nodeValue = data;
-				}
-			}
-		})
-		
-		function getTextContent(node){
-			switch(node.nodeType){
-			case 1:
-			case 11:
-				var buf = [];
-				node = node.firstChild;
-				while(node){
-					if(node.nodeType!==7 && node.nodeType !==8){
-						buf.push(getTextContent(node));
-					}
-					node = node.nextSibling;
-				}
-				return buf.join('');
-			default:
-				return node.nodeValue;
-			}
-		}
-		__set__ = function(object,key,value){
-			//console.log(value)
-			object['$$'+key] = value
-		}
-	}
-}catch(e){//ie8
-}
-
-if(typeof require == 'function'){
-	exports.DOMImplementation = DOMImplementation;
-	exports.XMLSerializer = XMLSerializer;
-}
-
-},{}],204:[function(require,module,exports){
-//[4]   	NameStartChar	   ::=   	":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]
-//[4a]   	NameChar	   ::=   	NameStartChar | "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]
-//[5]   	Name	   ::=   	NameStartChar (NameChar)*
-var nameStartChar = /[A-Z_a-z\xC0-\xD6\xD8-\xF6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]///\u10000-\uEFFFF
-var nameChar = new RegExp("[\\-\\.0-9"+nameStartChar.source.slice(1,-1)+"\u00B7\u0300-\u036F\\ux203F-\u2040]");
-var tagNamePattern = new RegExp('^'+nameStartChar.source+nameChar.source+'*(?:\:'+nameStartChar.source+nameChar.source+'*)?$');
-//var tagNamePattern = /^[a-zA-Z_][\w\-\.]*(?:\:[a-zA-Z_][\w\-\.]*)?$/
-//var handlers = 'resolveEntity,getExternalSubset,characters,endDocument,endElement,endPrefixMapping,ignorableWhitespace,processingInstruction,setDocumentLocator,skippedEntity,startDocument,startElement,startPrefixMapping,notationDecl,unparsedEntityDecl,error,fatalError,warning,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,comment,endCDATA,endDTD,endEntity,startCDATA,startDTD,startEntity'.split(',')
-
-//S_TAG,	S_ATTR,	S_EQ,	S_V
-//S_ATTR_S,	S_E,	S_S,	S_C
-var S_TAG = 0;//tag name offerring
-var S_ATTR = 1;//attr name offerring 
-var S_ATTR_S=2;//attr name end and space offer
-var S_EQ = 3;//=space?
-var S_V = 4;//attr value(no quot value only)
-var S_E = 5;//attr value end and no space(quot end)
-var S_S = 6;//(attr value end || tag end ) && (space offer)
-var S_C = 7;//closed el<el />
-
-function XMLReader(){
-	
-}
-
-XMLReader.prototype = {
-	parse:function(source,defaultNSMap,entityMap){
-		var domBuilder = this.domBuilder;
-		domBuilder.startDocument();
-		_copy(defaultNSMap ,defaultNSMap = {})
-		parse(source,defaultNSMap,entityMap,
-				domBuilder,this.errorHandler);
-		domBuilder.endDocument();
-	}
-}
-function parse(source,defaultNSMapCopy,entityMap,domBuilder,errorHandler){
-  function fixedFromCharCode(code) {
-		// String.prototype.fromCharCode does not supports
-		// > 2 bytes unicode chars directly
-		if (code > 0xffff) {
-			code -= 0x10000;
-			var surrogate1 = 0xd800 + (code >> 10)
-				, surrogate2 = 0xdc00 + (code & 0x3ff);
-
-			return String.fromCharCode(surrogate1, surrogate2);
-		} else {
-			return String.fromCharCode(code);
-		}
-	}
-	function entityReplacer(a){
-		var k = a.slice(1,-1);
-		if(k in entityMap){
-			return entityMap[k]; 
-		}else if(k.charAt(0) === '#'){
-			return fixedFromCharCode(parseInt(k.substr(1).replace('x','0x')))
-		}else{
-			errorHandler.error('entity not found:'+a);
-			return a;
-		}
-	}
-	function appendText(end){//has some bugs
-		var xt = source.substring(start,end).replace(/&#?\w+;/g,entityReplacer);
-		locator&&position(start);
-		domBuilder.characters(xt,0,end-start);
-		start = end
-	}
-	function position(start,m){
-		while(start>=endPos && (m = linePattern.exec(source))){
-			startPos = m.index;
-			endPos = startPos + m[0].length;
-			locator.lineNumber++;
-			//console.log('line++:',locator,startPos,endPos)
-		}
-		locator.columnNumber = start-startPos+1;
-	}
-	var startPos = 0;
-	var endPos = 0;
-	var linePattern = /.+(?:\r\n?|\n)|.*$/g
-	var locator = domBuilder.locator;
-	
-	var parseStack = [{currentNSMap:defaultNSMapCopy}]
-	var closeMap = {};
-	var start = 0;
-	while(true){
-		var i = source.indexOf('<',start);
-		if(i<0){
-			if(!source.substr(start).match(/^\s*$/)){
-				var doc = domBuilder.document;
-    			var text = doc.createTextNode(source.substr(start));
-    			doc.appendChild(text);
-    			domBuilder.currentElement = text;
-			}
-			return;
-		}
-		if(i>start){
-			appendText(i);
-		}
-		switch(source.charAt(i+1)){
-		case '/':
-			var end = source.indexOf('>',i+3);
-			var tagName = source.substring(i+2,end);
-			var config = parseStack.pop();
-			var localNSMap = config.localNSMap;
-			
-	        if(config.tagName != tagName){
-	            errorHandler.fatalError("end tag name: "+tagName+' is not match the current start tagName:'+config.tagName );
-	        }
-			domBuilder.endElement(config.uri,config.localName,tagName);
-			if(localNSMap){
-				for(var prefix in localNSMap){
-					domBuilder.endPrefixMapping(prefix) ;
-				}
-			}
-			end++;
-			break;
-			// end elment
-		case '?':// <?...?>
-			locator&&position(i);
-			end = parseInstruction(source,i,domBuilder);
-			break;
-		case '!':// <!doctype,<![CDATA,<!--
-			locator&&position(i);
-			end = parseDCC(source,i,domBuilder,errorHandler);
-			break;
-		default:
-			try{
-				locator&&position(i);
-				
-				var el = new ElementAttributes();
-				
-				//elStartEnd
-				var end = parseElementStartPart(source,i,el,entityReplacer,errorHandler);
-				var len = el.length;
-				//position fixed
-				if(len && locator){
-					var backup = copyLocator(locator,{});
-					for(var i = 0;i<len;i++){
-						var a = el[i];
-						position(a.offset);
-						a.offset = copyLocator(locator,{});
-					}
-					copyLocator(backup,locator);
-				}
-				if(!el.closed && fixSelfClosed(source,end,el.tagName,closeMap)){
-					el.closed = true;
-					if(!entityMap.nbsp){
-						errorHandler.warning('unclosed xml attribute');
-					}
-				}
-				appendElement(el,domBuilder,parseStack);
-				
-				
-				if(el.uri === 'http://www.w3.org/1999/xhtml' && !el.closed){
-					end = parseHtmlSpecialContent(source,end,el.tagName,entityReplacer,domBuilder)
-				}else{
-					end++;
-				}
-			}catch(e){
-				errorHandler.error('element parse error: '+e);
-				end = -1;
-			}
-
-		}
-		if(end<0){
-			//TODO: 这里有可能sax回退,有位置错误风险
-			appendText(i+1);
-		}else{
-			start = end;
-		}
-	}
-}
-function copyLocator(f,t){
-	t.lineNumber = f.lineNumber;
-	t.columnNumber = f.columnNumber;
-	return t;
-	
-}
-
-/**
- * @see #appendElement(source,elStartEnd,el,selfClosed,entityReplacer,domBuilder,parseStack);
- * @return end of the elementStartPart(end of elementEndPart for selfClosed el)
- */
-function parseElementStartPart(source,start,el,entityReplacer,errorHandler){
-	var attrName;
-	var value;
-	var p = ++start;
-	var s = S_TAG;//status
-	while(true){
-		var c = source.charAt(p);
-		switch(c){
-		case '=':
-			if(s === S_ATTR){//attrName
-				attrName = source.slice(start,p);
-				s = S_EQ;
-			}else if(s === S_ATTR_S){
-				s = S_EQ;
-			}else{
-				//fatalError: equal must after attrName or space after attrName
-				throw new Error('attribute equal must after attrName');
-			}
-			break;
-		case '\'':
-		case '"':
-			if(s === S_EQ){//equal
-				start = p+1;
-				p = source.indexOf(c,start)
-				if(p>0){
-					value = source.slice(start,p).replace(/&#?\w+;/g,entityReplacer);
-					el.add(attrName,value,start-1);
-					s = S_E;
-				}else{
-					//fatalError: no end quot match
-					throw new Error('attribute value no end \''+c+'\' match');
-				}
-			}else if(s == S_V){
-				value = source.slice(start,p).replace(/&#?\w+;/g,entityReplacer);
-				//console.log(attrName,value,start,p)
-				el.add(attrName,value,start);
-				//console.dir(el)
-				errorHandler.warning('attribute "'+attrName+'" missed start quot('+c+')!!');
-				start = p+1;
-				s = S_E
-			}else{
-				//fatalError: no equal before
-				throw new Error('attribute value must after "="');
-			}
-			break;
-		case '/':
-			switch(s){
-			case S_TAG:
-				el.setTagName(source.slice(start,p));
-			case S_E:
-			case S_S:
-			case S_C:
-				s = S_C;
-				el.closed = true;
-			case S_V:
-			case S_ATTR:
-			case S_ATTR_S:
-				break;
-			//case S_EQ:
-			default:
-				throw new Error("attribute invalid close char('/')")
-			}
-			break;
-		case ''://end document
-			//throw new Error('unexpected end of input')
-			errorHandler.error('unexpected end of input');
-		case '>':
-			switch(s){
-			case S_TAG:
-				el.setTagName(source.slice(start,p));
-			case S_E:
-			case S_S:
-			case S_C:
-				break;//normal
-			case S_V://Compatible state
-			case S_ATTR:
-				value = source.slice(start,p);
-				if(value.slice(-1) === '/'){
-					el.closed  = true;
-					value = value.slice(0,-1)
-				}
-			case S_ATTR_S:
-				if(s === S_ATTR_S){
-					value = attrName;
-				}
-				if(s == S_V){
-					errorHandler.warning('attribute "'+value+'" missed quot(")!!');
-					el.add(attrName,value.replace(/&#?\w+;/g,entityReplacer),start)
-				}else{
-					errorHandler.warning('attribute "'+value+'" missed value!! "'+value+'" instead!!')
-					el.add(value,value,start)
-				}
-				break;
-			case S_EQ:
-				throw new Error('attribute value missed!!');
-			}
-//			console.log(tagName,tagNamePattern,tagNamePattern.test(tagName))
-			return p;
-		/*xml space '\x20' | #x9 | #xD | #xA; */
-		case '\u0080':
-			c = ' ';
-		default:
-			if(c<= ' '){//space
-				switch(s){
-				case S_TAG:
-					el.setTagName(source.slice(start,p));//tagName
-					s = S_S;
-					break;
-				case S_ATTR:
-					attrName = source.slice(start,p)
-					s = S_ATTR_S;
-					break;
-				case S_V:
-					var value = source.slice(start,p).replace(/&#?\w+;/g,entityReplacer);
-					errorHandler.warning('attribute "'+value+'" missed quot(")!!');
-					el.add(attrName,value,start)
-				case S_E:
-					s = S_S;
-					break;
-				//case S_S:
-				//case S_EQ:
-				//case S_ATTR_S:
-				//	void();break;
-				//case S_C:
-					//ignore warning
-				}
-			}else{//not space
-//S_TAG,	S_ATTR,	S_EQ,	S_V
-//S_ATTR_S,	S_E,	S_S,	S_C
-				switch(s){
-				//case S_TAG:void();break;
-				//case S_ATTR:void();break;
-				//case S_V:void();break;
-				case S_ATTR_S:
-					errorHandler.warning('attribute "'+attrName+'" missed value!! "'+attrName+'" instead!!')
-					el.add(attrName,attrName,start);
-					start = p;
-					s = S_ATTR;
-					break;
-				case S_E:
-					errorHandler.warning('attribute space is required"'+attrName+'"!!')
-				case S_S:
-					s = S_ATTR;
-					start = p;
-					break;
-				case S_EQ:
-					s = S_V;
-					start = p;
-					break;
-				case S_C:
-					throw new Error("elements closed character '/' and '>' must be connected to");
-				}
-			}
-		}
-		p++;
-	}
-}
-/**
- * @return end of the elementStartPart(end of elementEndPart for selfClosed el)
- */
-function appendElement(el,domBuilder,parseStack){
-	var tagName = el.tagName;
-	var localNSMap = null;
-	var currentNSMap = parseStack[parseStack.length-1].currentNSMap;
-	var i = el.length;
-	while(i--){
-		var a = el[i];
-		var qName = a.qName;
-		var value = a.value;
-		var nsp = qName.indexOf(':');
-		if(nsp>0){
-			var prefix = a.prefix = qName.slice(0,nsp);
-			var localName = qName.slice(nsp+1);
-			var nsPrefix = prefix === 'xmlns' && localName
-		}else{
-			localName = qName;
-			prefix = null
-			nsPrefix = qName === 'xmlns' && ''
-		}
-		//can not set prefix,because prefix !== ''
-		a.localName = localName ;
-		//prefix == null for no ns prefix attribute 
-		if(nsPrefix !== false){//hack!!
-			if(localNSMap == null){
-				localNSMap = {}
-				//console.log(currentNSMap,0)
-				_copy(currentNSMap,currentNSMap={})
-				//console.log(currentNSMap,1)
-			}
-			currentNSMap[nsPrefix] = localNSMap[nsPrefix] = value;
-			a.uri = 'http://www.w3.org/2000/xmlns/'
-			domBuilder.startPrefixMapping(nsPrefix, value) 
-		}
-	}
-	var i = el.length;
-	while(i--){
-		a = el[i];
-		var prefix = a.prefix;
-		if(prefix){//no prefix attribute has no namespace
-			if(prefix === 'xml'){
-				a.uri = 'http://www.w3.org/XML/1998/namespace';
-			}if(prefix !== 'xmlns'){
-				a.uri = currentNSMap[prefix]
-				
-				//{console.log('###'+a.qName,domBuilder.locator.systemId+'',currentNSMap,a.uri)}
-			}
-		}
-	}
-	var nsp = tagName.indexOf(':');
-	if(nsp>0){
-		prefix = el.prefix = tagName.slice(0,nsp);
-		localName = el.localName = tagName.slice(nsp+1);
-	}else{
-		prefix = null;//important!!
-		localName = el.localName = tagName;
-	}
-	//no prefix element has default namespace
-	var ns = el.uri = currentNSMap[prefix || ''];
-	domBuilder.startElement(ns,localName,tagName,el);
-	//endPrefixMapping and startPrefixMapping have not any help for dom builder
-	//localNSMap = null
-	if(el.closed){
-		domBuilder.endElement(ns,localName,tagName);
-		if(localNSMap){
-			for(prefix in localNSMap){
-				domBuilder.endPrefixMapping(prefix) 
-			}
-		}
-	}else{
-		el.currentNSMap = currentNSMap;
-		el.localNSMap = localNSMap;
-		parseStack.push(el);
-	}
-}
-function parseHtmlSpecialContent(source,elStartEnd,tagName,entityReplacer,domBuilder){
-	if(/^(?:script|textarea)$/i.test(tagName)){
-		var elEndStart =  source.indexOf('</'+tagName+'>',elStartEnd);
-		var text = source.substring(elStartEnd+1,elEndStart);
-		if(/[&<]/.test(text)){
-			if(/^script$/i.test(tagName)){
-				//if(!/\]\]>/.test(text)){
-					//lexHandler.startCDATA();
-					domBuilder.characters(text,0,text.length);
-					//lexHandler.endCDATA();
-					return elEndStart;
-				//}
-			}//}else{//text area
-				text = text.replace(/&#?\w+;/g,entityReplacer);
-				domBuilder.characters(text,0,text.length);
-				return elEndStart;
-			//}
-			
-		}
-	}
-	return elStartEnd+1;
-}
-function fixSelfClosed(source,elStartEnd,tagName,closeMap){
-	//if(tagName in closeMap){
-	var pos = closeMap[tagName];
-	if(pos == null){
-		//console.log(tagName)
-		pos = closeMap[tagName] = source.lastIndexOf('</'+tagName+'>')
-	}
-	return pos<elStartEnd;
-	//} 
-}
-function _copy(source,target){
-	for(var n in source){target[n] = source[n]}
-}
-function parseDCC(source,start,domBuilder,errorHandler){//sure start with '<!'
-	var next= source.charAt(start+2)
-	switch(next){
-	case '-':
-		if(source.charAt(start + 3) === '-'){
-			var end = source.indexOf('-->',start+4);
-			//append comment source.substring(4,end)//<!--
-			if(end>start){
-				domBuilder.comment(source,start+4,end-start-4);
-				return end+3;
-			}else{
-				errorHandler.error("Unclosed comment");
-				return -1;
-			}
-		}else{
-			//error
-			return -1;
-		}
-	default:
-		if(source.substr(start+3,6) == 'CDATA['){
-			var end = source.indexOf(']]>',start+9);
-			domBuilder.startCDATA();
-			domBuilder.characters(source,start+9,end-start-9);
-			domBuilder.endCDATA() 
-			return end+3;
-		}
-		//<!DOCTYPE
-		//startDTD(java.lang.String name, java.lang.String publicId, java.lang.String systemId) 
-		var matchs = split(source,start);
-		var len = matchs.length;
-		if(len>1 && /!doctype/i.test(matchs[0][0])){
-			var name = matchs[1][0];
-			var pubid = len>3 && /^public$/i.test(matchs[2][0]) && matchs[3][0]
-			var sysid = len>4 && matchs[4][0];
-			var lastMatch = matchs[len-1]
-			domBuilder.startDTD(name,pubid && pubid.replace(/^(['"])(.*?)\1$/,'$2'),
-					sysid && sysid.replace(/^(['"])(.*?)\1$/,'$2'));
-			domBuilder.endDTD();
-			
-			return lastMatch.index+lastMatch[0].length
-		}
-	}
-	return -1;
-}
-
-
-
-function parseInstruction(source,start,domBuilder){
-	var end = source.indexOf('?>',start);
-	if(end){
-		var match = source.substring(start,end).match(/^<\?(\S*)\s*([\s\S]*?)\s*$/);
-		if(match){
-			var len = match[0].length;
-			domBuilder.processingInstruction(match[1], match[2]) ;
-			return end+2;
-		}else{//error
-			return -1;
-		}
-	}
-	return -1;
-}
-
-/**
- * @param source
- */
-function ElementAttributes(source){
-	
-}
-ElementAttributes.prototype = {
-	setTagName:function(tagName){
-		if(!tagNamePattern.test(tagName)){
-			throw new Error('invalid tagName:'+tagName)
-		}
-		this.tagName = tagName
-	},
-	add:function(qName,value,offset){
-		if(!tagNamePattern.test(qName)){
-			throw new Error('invalid attribute:'+qName)
-		}
-		this[this.length++] = {qName:qName,value:value,offset:offset}
-	},
-	length:0,
-	getLocalName:function(i){return this[i].localName},
-	getOffset:function(i){return this[i].offset},
-	getQName:function(i){return this[i].qName},
-	getURI:function(i){return this[i].uri},
-	getValue:function(i){return this[i].value}
-//	,getIndex:function(uri, localName)){
-//		if(localName){
-//			
-//		}else{
-//			var qName = uri
-//		}
-//	},
-//	getValue:function(){return this.getValue(this.getIndex.apply(this,arguments))},
-//	getType:function(uri,localName){}
-//	getType:function(i){},
-}
-
-
-
-
-function _set_proto_(thiz,parent){
-	thiz.__proto__ = parent;
-	return thiz;
-}
-if(!(_set_proto_({},_set_proto_.prototype) instanceof _set_proto_)){
-	_set_proto_ = function(thiz,parent){
-		function p(){};
-		p.prototype = parent;
-		p = new p();
-		for(parent in thiz){
-			p[parent] = thiz[parent];
-		}
-		return p;
-	}
-}
-
-function split(source,start){
-	var match;
-	var buf = [];
-	var reg = /'[^']+'|"[^"]+"|[^\s<>\/=]+=?|(\/?\s*>|<)/g;
-	reg.lastIndex = start;
-	reg.exec(source);//skip <
-	while(match = reg.exec(source)){
-		buf.push(match);
-		if(match[1])return buf;
-	}
-}
-
-if(typeof require == 'function'){
-	exports.XMLReader = XMLReader;
-}
-
-
-},{}]},{},[4])(4)
-});
\ No newline at end of file
diff --git a/bin/node_modules/plist/examples/browser/index.html b/bin/node_modules/plist/examples/browser/index.html
deleted file mode 100644
index 8ce7d92..0000000
--- a/bin/node_modules/plist/examples/browser/index.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!DOCTYPE html>
-<html>
-  <head>
-    <title>plist.js browser example</title>
-    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-  </head>
-  <body>
-    <script src="../../dist/plist.js"></script>
-    <script>
-      // TODO: add <input type=file> drag and drop example
-      console.log(plist);
-    </script>
-  </body>
-</html>
diff --git a/bin/node_modules/plist/lib/build.js b/bin/node_modules/plist/lib/build.js
deleted file mode 100644
index 9437ed6..0000000
--- a/bin/node_modules/plist/lib/build.js
+++ /dev/null
@@ -1,136 +0,0 @@
-
-/**
- * Module dependencies.
- */
-
-var base64 = require('base64-js');
-var xmlbuilder = require('xmlbuilder');
-
-/**
- * Module exports.
- */
-
-exports.build = build;
-
-/**
- * Accepts a `Date` instance and returns an ISO date string.
- *
- * @param {Date} d - Date instance to serialize
- * @returns {String} ISO date string representation of `d`
- * @api private
- */
-
-function ISODateString(d){
-  function pad(n){
-    return n < 10 ? '0' + n : n;
-  }
-  return d.getUTCFullYear()+'-'
-    + pad(d.getUTCMonth()+1)+'-'
-    + pad(d.getUTCDate())+'T'
-    + pad(d.getUTCHours())+':'
-    + pad(d.getUTCMinutes())+':'
-    + pad(d.getUTCSeconds())+'Z';
-}
-
-/**
- * Returns the internal "type" of `obj` via the
- * `Object.prototype.toString()` trick.
- *
- * @param {Mixed} obj - any value
- * @returns {String} the internal "type" name
- * @api private
- */
-
-var toString = Object.prototype.toString;
-function type (obj) {
-  var m = toString.call(obj).match(/\[object (.*)\]/);
-  return m ? m[1] : m;
-}
-
-/**
- * Generate an XML plist string from the input object `obj`.
- *
- * @param {Object} obj - the object to convert
- * @param {Object} [opts] - optional options object
- * @returns {String} converted plist XML string
- * @api public
- */
-
-function build (obj, opts) {
-  var XMLHDR = {
-    version: '1.0',
-    encoding: 'UTF-8'
-  };
-
-  var XMLDTD = {
-    pubid: '-//Apple//DTD PLIST 1.0//EN',
-    sysid: 'http://www.apple.com/DTDs/PropertyList-1.0.dtd'
-  };
-
-  var doc = xmlbuilder.create('plist');
-
-  doc.dec(XMLHDR.version, XMLHDR.encoding, XMLHDR.standalone);
-  doc.dtd(XMLDTD.pubid, XMLDTD.sysid);
-  doc.att('version', '1.0');
-
-  walk_obj(obj, doc);
-
-  if (!opts) opts = {};
-  // default `pretty` to `true`
-  opts.pretty = opts.pretty !== false;
-  return doc.end(opts);
-}
-
-/**
- * depth first, recursive traversal of a javascript object. when complete,
- * next_child contains a reference to the build XML object.
- *
- * @api private
- */
-
-function walk_obj(next, next_child) {
-  var tag_type, i, prop;
-  var name = type(next);
-
-  if (Array.isArray(next)) {
-    next_child = next_child.ele('array');
-    for (i = 0; i < next.length; i++) {
-      walk_obj(next[i], next_child);
-    }
-
-  } else if (Buffer.isBuffer(next)) {
-    next_child.ele('data').raw(next.toString('base64'));
-
-  } else if ('Object' == name) {
-    next_child = next_child.ele('dict');
-    for (prop in next) {
-      if (next.hasOwnProperty(prop)) {
-        next_child.ele('key').txt(prop);
-        walk_obj(next[prop], next_child);
-      }
-    }
-
-  } else if ('Number' == name) {
-    // detect if this is an integer or real
-    // TODO: add an ability to force one way or another via a "cast"
-    tag_type = (next % 1 === 0) ? 'integer' : 'real';
-    next_child.ele(tag_type).txt(next.toString());
-
-  } else if ('Date' == name) {
-    next_child.ele('date').txt(ISODateString(new Date(next)));
-
-  } else if ('Boolean' == name) {
-    next_child.ele(next ? 'true' : 'false');
-
-  } else if ('String' == name) {
-    next_child.ele('string').txt(next);
-
-  } else if ('ArrayBuffer' == name) {
-    next_child.ele('data').raw(base64.fromByteArray(next));
-
-  } else if (next.buffer && 'ArrayBuffer' == type(next.buffer)) {
-    // a typed array
-    next_child.ele('data').raw(base64.fromByteArray(new Uint8Array(next.buffer), next_child));
-
-  }
-}
diff --git a/bin/node_modules/plist/lib/node.js b/bin/node_modules/plist/lib/node.js
deleted file mode 100644
index ac18e32..0000000
--- a/bin/node_modules/plist/lib/node.js
+++ /dev/null
@@ -1,49 +0,0 @@
-/**
- * Module dependencies.
- */
-
-var fs = require('fs');
-var parse = require('./parse');
-var deprecate = require('util-deprecate');
-
-/**
- * Module exports.
- */
-
-exports.parseFile = deprecate(parseFile, '`parseFile()` is deprecated. ' +
-  'Use `parseString()` instead.');
-exports.parseFileSync = deprecate(parseFileSync, '`parseFileSync()` is deprecated. ' +
-  'Use `parseStringSync()` instead.');
-
-/**
- * Parses file `filename` as a .plist file.
- * Invokes `fn` callback function when done.
- *
- * @param {String} filename - name of the file to read
- * @param {Function} fn - callback function
- * @api public
- * @deprecated use parseString() instead
- */
-
-function parseFile (filename, fn) {
-  fs.readFile(filename, { encoding: 'utf8' }, onread);
-  function onread (err, inxml) {
-    if (err) return fn(err);
-    parse.parseString(inxml, fn);
-  }
-}
-
-/**
- * Parses file `filename` as a .plist file.
- * Returns a  when done.
- *
- * @param {String} filename - name of the file to read
- * @param {Function} fn - callback function
- * @api public
- * @deprecated use parseStringSync() instead
- */
-
-function parseFileSync (filename) {
-  var inxml = fs.readFileSync(filename, 'utf8');
-  return parse.parseStringSync(inxml);
-}
diff --git a/bin/node_modules/plist/lib/parse.js b/bin/node_modules/plist/lib/parse.js
deleted file mode 100644
index c154384..0000000
--- a/bin/node_modules/plist/lib/parse.js
+++ /dev/null
@@ -1,200 +0,0 @@
-
-/**
- * Module dependencies.
- */
-
-var deprecate = require('util-deprecate');
-var DOMParser = require('xmldom').DOMParser;
-
-/**
- * Module exports.
- */
-
-exports.parse = parse;
-exports.parseString = deprecate(parseString, '`parseString()` is deprecated. ' +
-  'It\'s not actually async. Use `parse()` instead.');
-exports.parseStringSync = deprecate(parseStringSync, '`parseStringSync()` is ' +
-  'deprecated. Use `parse()` instead.');
-
-/**
- * We ignore raw text (usually whitespace), <!-- xml comments -->,
- * and raw CDATA nodes.
- *
- * @param {Element} node
- * @returns {Boolean}
- * @api private
- */
-
-function shouldIgnoreNode (node) {
-  return node.nodeType === 3 // text
-    || node.nodeType === 8   // comment
-    || node.nodeType === 4;  // cdata
-}
-
-
-/**
- * Parses a Plist XML string. Returns an Object.
- *
- * @param {String} xml - the XML String to decode
- * @returns {Mixed} the decoded value from the Plist XML
- * @api public
- */
-
-function parse (xml) {
-  var doc = new DOMParser().parseFromString(xml);
-  if (doc.documentElement.nodeName !== 'plist') {
-    throw new Error('malformed document. First element should be <plist>');
-  }
-  var plist = parsePlistXML(doc.documentElement);
-
-  // the root <plist> node gets interpreted as an Array,
-  // so pull out the inner data first
-  if (plist.length == 1) plist = plist[0];
-
-  return plist;
-}
-
-/**
- * Parses a Plist XML string. Returns an Object. Takes a `callback` function.
- *
- * @param {String} xml - the XML String to decode
- * @param {Function} callback - callback function
- * @returns {Mixed} the decoded value from the Plist XML
- * @api public
- * @deprecated not actually async. use parse() instead
- */
-
-function parseString (xml, callback) {
-  var doc, error, plist;
-  try {
-    doc = new DOMParser().parseFromString(xml);
-    plist = parsePlistXML(doc.documentElement);
-  } catch(e) {
-    error = e;
-  }
-  callback(error, plist);
-}
-
-/**
- * Parses a Plist XML string. Returns an Object.
- *
- * @param {String} xml - the XML String to decode
- * @param {Function} callback - callback function
- * @returns {Mixed} the decoded value from the Plist XML
- * @api public
- * @deprecated use parse() instead
- */
-
-function parseStringSync (xml) {
-  var doc = new DOMParser().parseFromString(xml);
-  var plist;
-  if (doc.documentElement.nodeName !== 'plist') {
-    throw new Error('malformed document. First element should be <plist>');
-  }
-  plist = parsePlistXML(doc.documentElement);
-
-  // if the plist is an array with 1 element, pull it out of the array
-  if (plist.length == 1) {
-    plist = plist[0];
-  }
-  return plist;
-}
-
-/**
- * Convert an XML based plist document into a JSON representation.
- *
- * @param {Object} xml_node - current XML node in the plist
- * @returns {Mixed} built up JSON object
- * @api private
- */
-
-function parsePlistXML (node) {
-  var i, new_obj, key, val, new_arr, res, d;
-
-  if (!node)
-    return null;
-
-  if (node.nodeName === 'plist') {
-    new_arr = [];
-    for (i=0; i < node.childNodes.length; i++) {
-      // ignore comment nodes (text)
-      if (!shouldIgnoreNode(node.childNodes[i])) {
-        new_arr.push( parsePlistXML(node.childNodes[i]));
-      }
-    }
-    return new_arr;
-
-  } else if (node.nodeName === 'dict') {
-    new_obj = {};
-    key = null;
-    for (i=0; i < node.childNodes.length; i++) {
-      // ignore comment nodes (text)
-      if (!shouldIgnoreNode(node.childNodes[i])) {
-        if (key === null) {
-          key = parsePlistXML(node.childNodes[i]);
-        } else {
-          new_obj[key] = parsePlistXML(node.childNodes[i]);
-          key = null;
-        }
-      }
-    }
-    return new_obj;
-
-  } else if (node.nodeName === 'array') {
-    new_arr = [];
-    for (i=0; i < node.childNodes.length; i++) {
-      // ignore comment nodes (text)
-      if (!shouldIgnoreNode(node.childNodes[i])) {
-        res = parsePlistXML(node.childNodes[i]);
-        if (null != res) new_arr.push(res);
-      }
-    }
-    return new_arr;
-
-  } else if (node.nodeName === '#text') {
-    // TODO: what should we do with text types? (CDATA sections)
-
-  } else if (node.nodeName === 'key') {
-    return node.childNodes[0].nodeValue;
-
-  } else if (node.nodeName === 'string') {
-    res = '';
-    for (d=0; d < node.childNodes.length; d++) {
-      res += node.childNodes[d].nodeValue;
-    }
-    return res;
-
-  } else if (node.nodeName === 'integer') {
-    // parse as base 10 integer
-    return parseInt(node.childNodes[0].nodeValue, 10);
-
-  } else if (node.nodeName === 'real') {
-    res = '';
-    for (d=0; d < node.childNodes.length; d++) {
-      if (node.childNodes[d].nodeType === 3) {
-        res += node.childNodes[d].nodeValue;
-      }
-    }
-    return parseFloat(res);
-
-  } else if (node.nodeName === 'data') {
-    res = '';
-    for (d=0; d < node.childNodes.length; d++) {
-      if (node.childNodes[d].nodeType === 3) {
-        res += node.childNodes[d].nodeValue.replace(/\s+/g, '');
-      }
-    }
-
-    // decode base64 data to a Buffer instance
-    return new Buffer(res, 'base64');
-
-  } else if (node.nodeName === 'date') {
-    return new Date(node.childNodes[0].nodeValue);
-
-  } else if (node.nodeName === 'true') {
-    return true;
-
-  } else if (node.nodeName === 'false') {
-    return false;
-  }
-}
diff --git a/bin/node_modules/plist/lib/plist.js b/bin/node_modules/plist/lib/plist.js
deleted file mode 100644
index 00a4167..0000000
--- a/bin/node_modules/plist/lib/plist.js
+++ /dev/null
@@ -1,23 +0,0 @@
-
-var i;
-
-/**
- * Parser functions.
- */
-
-var parserFunctions = require('./parse');
-for (i in parserFunctions) exports[i] = parserFunctions[i];
-
-/**
- * Builder functions.
- */
-
-var builderFunctions = require('./build');
-for (i in builderFunctions) exports[i] = builderFunctions[i];
-
-/**
- * Add Node.js-specific functions (they're deprecated…).
- */
-
-var nodeFunctions = require('./node');
-for (i in nodeFunctions) exports[i] = nodeFunctions[i];
diff --git a/bin/node_modules/plist/node_modules/base64-js/.travis.yml b/bin/node_modules/plist/node_modules/base64-js/.travis.yml
deleted file mode 100644
index 939cb51..0000000
--- a/bin/node_modules/plist/node_modules/base64-js/.travis.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-language: node_js
-node_js:
-  - "0.8"
-  - "0.10"
-  - "0.11"
\ No newline at end of file
diff --git a/bin/node_modules/plist/node_modules/base64-js/LICENSE.MIT b/bin/node_modules/plist/node_modules/base64-js/LICENSE.MIT
deleted file mode 100644
index 96d3f68..0000000
--- a/bin/node_modules/plist/node_modules/base64-js/LICENSE.MIT
+++ /dev/null
@@ -1,21 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2014
-
-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/bin/node_modules/plist/node_modules/base64-js/README.md b/bin/node_modules/plist/node_modules/base64-js/README.md
deleted file mode 100644
index ed31d1a..0000000
--- a/bin/node_modules/plist/node_modules/base64-js/README.md
+++ /dev/null
@@ -1,31 +0,0 @@
-base64-js
-=========
-
-`base64-js` does basic base64 encoding/decoding in pure JS.
-
-[![build status](https://secure.travis-ci.org/beatgammit/base64-js.png)](http://travis-ci.org/beatgammit/base64-js)
-
-[![testling badge](https://ci.testling.com/beatgammit/base64-js.png)](https://ci.testling.com/beatgammit/base64-js)
-
-Many browsers already have base64 encoding/decoding functionality, but it is for text data, not all-purpose binary data.
-
-Sometimes encoding/decoding binary data in the browser is useful, and that is what this module does.
-
-## install
-
-With [npm](https://npmjs.org) do:
-
-`npm install base64-js`
-
-## methods
-
-`var base64 = require('base64-js')`
-
-`base64` has two exposed functions, `toByteArray` and `fromByteArray`, which both take a single argument.
-
-* `toByteArray` - Takes a base64 string and returns a byte array
-* `fromByteArray` - Takes a byte array and returns a base64 string
-
-## license
-
-MIT
\ No newline at end of file
diff --git a/bin/node_modules/plist/node_modules/base64-js/bench/bench.js b/bin/node_modules/plist/node_modules/base64-js/bench/bench.js
deleted file mode 100644
index 0689e08..0000000
--- a/bin/node_modules/plist/node_modules/base64-js/bench/bench.js
+++ /dev/null
@@ -1,19 +0,0 @@
-var random = require('crypto').pseudoRandomBytes
-
-var b64 = require('../')
-var fs = require('fs')
-var path = require('path')
-var data = random(1e6).toString('base64')
-//fs.readFileSync(path.join(__dirname, 'example.b64'), 'ascii').split('\n').join('')
-var start = Date.now()
-var raw = b64.toByteArray(data)
-var middle = Date.now()
-var data = b64.fromByteArray(raw)
-var end = Date.now()
-
-console.log('decode ms, decode ops/ms, encode ms, encode ops/ms')
-console.log(
-	middle - start,  data.length / (middle - start), 
-	end - middle,  data.length / (end - middle))
-//console.log(data)
-
diff --git a/bin/node_modules/plist/node_modules/base64-js/lib/b64.js b/bin/node_modules/plist/node_modules/base64-js/lib/b64.js
deleted file mode 100644
index 887f706..0000000
--- a/bin/node_modules/plist/node_modules/base64-js/lib/b64.js
+++ /dev/null
@@ -1,121 +0,0 @@
-var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
-
-;(function (exports) {
-	'use strict';
-
-  var Arr = (typeof Uint8Array !== 'undefined')
-    ? Uint8Array
-    : Array
-
-	var ZERO   = '0'.charCodeAt(0)
-	var PLUS   = '+'.charCodeAt(0)
-	var SLASH  = '/'.charCodeAt(0)
-	var NUMBER = '0'.charCodeAt(0)
-	var LOWER  = 'a'.charCodeAt(0)
-	var UPPER  = 'A'.charCodeAt(0)
-
-	function decode (elt) {
-		var code = elt.charCodeAt(0)
-		if (code === PLUS)
-			return 62 // '+'
-		if (code === SLASH)
-			return 63 // '/'
-		if (code < NUMBER)
-			return -1 //no match
-		if (code < NUMBER + 10)
-			return code - NUMBER + 26 + 26
-		if (code < UPPER + 26)
-			return code - UPPER
-		if (code < LOWER + 26)
-			return code - LOWER + 26
-	}
-
-	function b64ToByteArray (b64) {
-		var i, j, l, tmp, placeHolders, arr
-
-		if (b64.length % 4 > 0) {
-			throw new Error('Invalid string. Length must be a multiple of 4')
-		}
-
-		// the number of equal signs (place holders)
-		// if there are two placeholders, than the two characters before it
-		// represent one byte
-		// if there is only one, then the three characters before it represent 2 bytes
-		// this is just a cheap hack to not do indexOf twice
-		var len = b64.length
-		placeHolders = '=' === b64.charAt(len - 2) ? 2 : '=' === b64.charAt(len - 1) ? 1 : 0
-
-		// base64 is 4/3 + up to two characters of the original data
-		arr = new Arr(b64.length * 3 / 4 - placeHolders)
-
-		// if there are placeholders, only get up to the last complete 4 chars
-		l = placeHolders > 0 ? b64.length - 4 : b64.length
-
-		var L = 0
-
-		function push (v) {
-			arr[L++] = v
-		}
-
-		for (i = 0, j = 0; i < l; i += 4, j += 3) {
-			tmp = (decode(b64.charAt(i)) << 18) | (decode(b64.charAt(i + 1)) << 12) | (decode(b64.charAt(i + 2)) << 6) | decode(b64.charAt(i + 3))
-			push((tmp & 0xFF0000) >> 16)
-			push((tmp & 0xFF00) >> 8)
-			push(tmp & 0xFF)
-		}
-
-		if (placeHolders === 2) {
-			tmp = (decode(b64.charAt(i)) << 2) | (decode(b64.charAt(i + 1)) >> 4)
-			push(tmp & 0xFF)
-		} else if (placeHolders === 1) {
-			tmp = (decode(b64.charAt(i)) << 10) | (decode(b64.charAt(i + 1)) << 4) | (decode(b64.charAt(i + 2)) >> 2)
-			push((tmp >> 8) & 0xFF)
-			push(tmp & 0xFF)
-		}
-
-		return arr
-	}
-
-	function uint8ToBase64 (uint8) {
-		var i,
-			extraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes
-			output = "",
-			temp, length
-
-		function encode (num) {
-			return lookup.charAt(num)
-		}
-
-		function tripletToBase64 (num) {
-			return encode(num >> 18 & 0x3F) + encode(num >> 12 & 0x3F) + encode(num >> 6 & 0x3F) + encode(num & 0x3F)
-		}
-
-		// go through the array every three bytes, we'll deal with trailing stuff later
-		for (i = 0, length = uint8.length - extraBytes; i < length; i += 3) {
-			temp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
-			output += tripletToBase64(temp)
-		}
-
-		// pad the end with zeros, but make sure to not forget the extra bytes
-		switch (extraBytes) {
-			case 1:
-				temp = uint8[uint8.length - 1]
-				output += encode(temp >> 2)
-				output += encode((temp << 4) & 0x3F)
-				output += '=='
-				break
-			case 2:
-				temp = (uint8[uint8.length - 2] << 8) + (uint8[uint8.length - 1])
-				output += encode(temp >> 10)
-				output += encode((temp >> 4) & 0x3F)
-				output += encode((temp << 2) & 0x3F)
-				output += '='
-				break
-		}
-
-		return output
-	}
-
-	module.exports.toByteArray = b64ToByteArray
-	module.exports.fromByteArray = uint8ToBase64
-}())
diff --git a/bin/node_modules/plist/node_modules/base64-js/package.json b/bin/node_modules/plist/node_modules/base64-js/package.json
deleted file mode 100644
index 001b227..0000000
--- a/bin/node_modules/plist/node_modules/base64-js/package.json
+++ /dev/null
@@ -1,62 +0,0 @@
-{
-  "author": {
-    "name": "T. Jameson Little",
-    "email": "t.jameson.little@gmail.com"
-  },
-  "name": "base64-js",
-  "description": "Base64 encoding/decoding in pure JS",
-  "version": "0.0.6",
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/beatgammit/base64-js.git"
-  },
-  "main": "lib/b64.js",
-  "scripts": {
-    "test": "tape test/*.js"
-  },
-  "testling": {
-    "files": "test/*.js",
-    "browsers": [
-      "ie/6..latest",
-      "chrome/4..latest",
-      "firefox/3..latest",
-      "safari/5.1..latest",
-      "opera/11.0..latest",
-      "iphone/6",
-      "ipad/6"
-    ]
-  },
-  "engines": {
-    "node": ">= 0.4"
-  },
-  "license": "MIT",
-  "dependencies": {},
-  "devDependencies": {
-    "tape": "~2.3.2"
-  },
-  "bugs": {
-    "url": "https://github.com/beatgammit/base64-js/issues"
-  },
-  "homepage": "https://github.com/beatgammit/base64-js",
-  "_id": "base64-js@0.0.6",
-  "dist": {
-    "shasum": "7b859f79f0bbbd55867ba67a7fab397e24a20947",
-    "tarball": "http://registry.npmjs.org/base64-js/-/base64-js-0.0.6.tgz"
-  },
-  "_from": "base64-js@0.0.6",
-  "_npmVersion": "1.3.21",
-  "_npmUser": {
-    "name": "feross",
-    "email": "feross@feross.org"
-  },
-  "maintainers": [
-    {
-      "name": "feross",
-      "email": "feross@feross.org"
-    }
-  ],
-  "directories": {},
-  "_shasum": "7b859f79f0bbbd55867ba67a7fab397e24a20947",
-  "_resolved": "https://registry.npmjs.org/base64-js/-/base64-js-0.0.6.tgz",
-  "readme": "ERROR: No README data found!"
-}
diff --git a/bin/node_modules/plist/node_modules/base64-js/test/convert.js b/bin/node_modules/plist/node_modules/base64-js/test/convert.js
deleted file mode 100644
index 48fbba7..0000000
--- a/bin/node_modules/plist/node_modules/base64-js/test/convert.js
+++ /dev/null
@@ -1,52 +0,0 @@
-var test = require('tape'),
-  b64 = require('../lib/b64'),
-	checks = [
-		'a',
-		'aa',
-		'aaa',
-		'hi',
-		'hi!',
-		'hi!!',
-		'sup',
-		'sup?',
-		'sup?!'
-	],
-	res;
-
-test('convert to base64 and back', function (t) {
-  t.plan(checks.length);
-
-  for (var i = 0; i < checks.length; i++) {
-    var check = checks[i],
-      b64Str,
-      arr,
-      str;
-
-    b64Str = b64.fromByteArray(map(check, function (char) { return char.charCodeAt(0); }));
-
-    arr = b64.toByteArray(b64Str);
-    str = map(arr, function (byte) { return String.fromCharCode(byte); }).join('');
-
-    t.equal(check, str, 'Checked ' + check);
-  }
-
-});
-
-function map (arr, callback) {
-	var res = [],
-    kValue,
-    mappedValue;
-
-	for (var k = 0, len = arr.length; k < len; k++) {
-		if ((typeof arr === 'string' && !!arr.charAt(k))) {
-			kValue = arr.charAt(k);
-			mappedValue = callback(kValue, k, arr);
-			res[k] = mappedValue;
-		} else if (typeof arr !== 'string' && k in arr) {
-			kValue = arr[k];
-			mappedValue = callback(kValue, k, arr);
-			res[k] = mappedValue;
-		}
-	}
-	return res;
-}
\ No newline at end of file
diff --git a/bin/node_modules/plist/node_modules/util-deprecate/History.md b/bin/node_modules/plist/node_modules/util-deprecate/History.md
deleted file mode 100644
index 149b6d3..0000000
--- a/bin/node_modules/plist/node_modules/util-deprecate/History.md
+++ /dev/null
@@ -1,5 +0,0 @@
-
-1.0.0 / 2014-04-30
-==================
-
-  * initial commit
diff --git a/bin/node_modules/plist/node_modules/util-deprecate/LICENSE b/bin/node_modules/plist/node_modules/util-deprecate/LICENSE
deleted file mode 100644
index 6a60e8c..0000000
--- a/bin/node_modules/plist/node_modules/util-deprecate/LICENSE
+++ /dev/null
@@ -1,24 +0,0 @@
-(The MIT License)
-
-Copyright (c) 2014 Nathan Rajlich <nathan@tootallnate.net>
-
-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/bin/node_modules/plist/node_modules/util-deprecate/README.md b/bin/node_modules/plist/node_modules/util-deprecate/README.md
deleted file mode 100644
index 75622fa..0000000
--- a/bin/node_modules/plist/node_modules/util-deprecate/README.md
+++ /dev/null
@@ -1,53 +0,0 @@
-util-deprecate
-==============
-### The Node.js `util.deprecate()` function with browser support
-
-In Node.js, this module simply re-exports the `util.deprecate()` function.
-
-In the web browser (i.e. via browserify), a browser-specific implementation
-of the `util.deprecate()` function is used.
-
-
-## API
-
-A `deprecate()` function is the only thing exposed by this module.
-
-``` javascript
-// setup:
-exports.foo = deprecate(foo, 'foo() is deprecated, use bar() instead');
-
-
-// users see:
-foo();
-// foo() is deprecated, use bar() instead
-foo();
-foo();
-```
-
-
-## License
-
-(The MIT License)
-
-Copyright (c) 2014 Nathan Rajlich <nathan@tootallnate.net>
-
-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/bin/node_modules/plist/node_modules/util-deprecate/browser.js b/bin/node_modules/plist/node_modules/util-deprecate/browser.js
deleted file mode 100644
index 9112c54..0000000
--- a/bin/node_modules/plist/node_modules/util-deprecate/browser.js
+++ /dev/null
@@ -1,55 +0,0 @@
-
-/**
- * Module exports.
- */
-
-module.exports = deprecate;
-
-/**
- * Mark that a method should not be used.
- * Returns a modified function which warns once by default.
- * If --no-deprecation is set, then it is a no-op.
- *
- * @param {Function} fn - the function to deprecate
- * @param {String} msg - the string to print to the console when `fn` is invoked
- * @returns {Function} a new "deprecated" version of `fn`
- * @api public
- */
-
-function deprecate (fn, msg) {
-  if (config('noDeprecation')) {
-    return fn;
-  }
-
-  var warned = false;
-  function deprecated() {
-    if (!warned) {
-      if (config('throwDeprecation')) {
-        throw new Error(msg);
-      } else if (config('traceDeprecation')) {
-        console.trace(msg);
-      } else {
-        console.error(msg);
-      }
-      warned = true;
-    }
-    return fn.apply(this, arguments);
-  }
-
-  return deprecated;
-}
-
-/**
- * Checks `localStorage` for boolean values for the given `name`.
- *
- * @param {String} name
- * @returns {Boolean}
- * @api private
- */
-
-function config (name) {
-  if (!global.localStorage) return false;
-  var val = global.localStorage[name];
-  if (null == val) return false;
-  return String(val).toLowerCase() === 'true';
-}
diff --git a/bin/node_modules/plist/node_modules/util-deprecate/node.js b/bin/node_modules/plist/node_modules/util-deprecate/node.js
deleted file mode 100644
index 5e6fcff..0000000
--- a/bin/node_modules/plist/node_modules/util-deprecate/node.js
+++ /dev/null
@@ -1,6 +0,0 @@
-
-/**
- * For Node.js, simply re-export the core `util.deprecate` function.
- */
-
-module.exports = require('util').deprecate;
diff --git a/bin/node_modules/plist/node_modules/util-deprecate/package.json b/bin/node_modules/plist/node_modules/util-deprecate/package.json
deleted file mode 100644
index b05f100..0000000
--- a/bin/node_modules/plist/node_modules/util-deprecate/package.json
+++ /dev/null
@@ -1,52 +0,0 @@
-{
-  "name": "util-deprecate",
-  "version": "1.0.0",
-  "description": "The Node.js `util.deprecate()` function with browser support",
-  "main": "node.js",
-  "browser": "browser.js",
-  "scripts": {
-    "test": "echo \"Error: no test specified\" && exit 1"
-  },
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/TooTallNate/util-deprecate.git"
-  },
-  "keywords": [
-    "util",
-    "deprecate",
-    "browserify",
-    "browser",
-    "node"
-  ],
-  "author": {
-    "name": "Nathan Rajlich",
-    "email": "nathan@tootallnate.net",
-    "url": "http://n8.io/"
-  },
-  "license": "MIT",
-  "bugs": {
-    "url": "https://github.com/TooTallNate/util-deprecate/issues"
-  },
-  "homepage": "https://github.com/TooTallNate/util-deprecate",
-  "_id": "util-deprecate@1.0.0",
-  "dist": {
-    "shasum": "3007af012c140eae26de05576ec22785cac3abf2",
-    "tarball": "http://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.0.tgz"
-  },
-  "_from": "util-deprecate@1.0.0",
-  "_npmVersion": "1.4.3",
-  "_npmUser": {
-    "name": "tootallnate",
-    "email": "nathan@tootallnate.net"
-  },
-  "maintainers": [
-    {
-      "name": "tootallnate",
-      "email": "nathan@tootallnate.net"
-    }
-  ],
-  "directories": {},
-  "_shasum": "3007af012c140eae26de05576ec22785cac3abf2",
-  "_resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.0.tgz",
-  "readme": "ERROR: No README data found!"
-}
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/.npmignore b/bin/node_modules/plist/node_modules/xmlbuilder/.npmignore
deleted file mode 100644
index 3ca4980..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/.npmignore
+++ /dev/null
@@ -1,4 +0,0 @@
-.travis.yml
-src
-test
-perf
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/LICENSE b/bin/node_modules/plist/node_modules/xmlbuilder/LICENSE
deleted file mode 100644
index e7cbac9..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2013 Ozgur Ozcitak
-
-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/bin/node_modules/plist/node_modules/xmlbuilder/README.md b/bin/node_modules/plist/node_modules/xmlbuilder/README.md
deleted file mode 100644
index 4883757..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/README.md
+++ /dev/null
@@ -1,82 +0,0 @@
-# xmlbuilder-js
-
-An XML builder for [node.js](http://nodejs.org/) similar to 
-[java-xmlbuilder](http://code.google.com/p/java-xmlbuilder/).
-
-[![NPM version](https://badge.fury.io/js/xmlbuilder.png)](http://badge.fury.io/js/xmlbuilder)
-[![Build Status](https://secure.travis-ci.org/oozcitak/xmlbuilder-js.png)](http://travis-ci.org/oozcitak/xmlbuilder-js)
-[![Dependency Status](https://david-dm.org/oozcitak/xmlbuilder-js.png)](https://david-dm.org/oozcitak/xmlbuilder-js)
-
-### Installation:
-
-``` sh
-npm install xmlbuilder
-```
-
-### Usage:
-
-``` js
-var builder = require('xmlbuilder');
-var xml = builder.create('root')
-  .ele('xmlbuilder', {'for': 'node-js'})
-    .ele('repo', {'type': 'git'}, 'git://github.com/oozcitak/xmlbuilder-js.git')
-  .end({ pretty: true});
-    
-console.log(xml);
-```
-
-will result in:
-
-``` xml
-<?xml version="1.0"?>
-<root>
-  <xmlbuilder for="node-js">
-    <repo type="git">git://github.com/oozcitak/xmlbuilder-js.git</repo>
-  </xmlbuilder>
-</root>
-```
-
-It is also possible to convert objects into nodes:
-
-``` js
-builder.create({
-  root: {
-    xmlbuilder: {
-      '@for': 'node-js', // attributes start with @
-      repo: {
-        '@type': 'git',
-        '#text': 'git://github.com/oozcitak/xmlbuilder-js.git' // #text denotes element text
-      }
-    }
-  }
-});
-```
-
-If you need to do some processing:
-
-``` js
-var root = builder.create('squares');
-root.com('f(x) = x^2');
-for(var i = 1; i <= 5; i++)
-{
-  var item = root.ele('data');
-  item.att('x', i);
-  item.att('y', i * i);
-}
-```
-
-This will result in:
-
-``` xml
-<?xml version="1.0"?>
-<squares>
-  <!-- f(x) = x^2 -->
-  <data x="1" y="1"/>
-  <data x="2" y="4"/>
-  <data x="3" y="9"/>
-  <data x="4" y="16"/>
-  <data x="5" y="25"/>
-</squares>
-```
-
-See the [wiki](https://github.com/oozcitak/xmlbuilder-js/wiki) for details.
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/lib/XMLAttribute.js b/bin/node_modules/plist/node_modules/xmlbuilder/lib/XMLAttribute.js
deleted file mode 100644
index a83ffec..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/lib/XMLAttribute.js
+++ /dev/null
@@ -1,32 +0,0 @@
-// Generated by CoffeeScript 1.6.3
-(function() {
-  var XMLAttribute, _;
-
-  _ = require('lodash-node');
-
-  module.exports = XMLAttribute = (function() {
-    function XMLAttribute(parent, name, value) {
-      this.stringify = parent.stringify;
-      if (name == null) {
-        throw new Error("Missing attribute name");
-      }
-      if (value == null) {
-        throw new Error("Missing attribute value");
-      }
-      this.name = this.stringify.attName(name);
-      this.value = this.stringify.attValue(value);
-    }
-
-    XMLAttribute.prototype.clone = function() {
-      return _.create(XMLAttribute.prototype, this);
-    };
-
-    XMLAttribute.prototype.toString = function(options, level) {
-      return ' ' + this.name + '="' + this.value + '"';
-    };
-
-    return XMLAttribute;
-
-  })();
-
-}).call(this);
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/lib/XMLBuilder.js b/bin/node_modules/plist/node_modules/xmlbuilder/lib/XMLBuilder.js
deleted file mode 100644
index 063d6db..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/lib/XMLBuilder.js
+++ /dev/null
@@ -1,70 +0,0 @@
-// Generated by CoffeeScript 1.6.3
-(function() {
-  var XMLBuilder, XMLDeclaration, XMLDocType, XMLElement, XMLStringifier, _;
-
-  _ = require('lodash-node');
-
-  XMLStringifier = require('./XMLStringifier');
-
-  XMLDeclaration = require('./XMLDeclaration');
-
-  XMLDocType = require('./XMLDocType');
-
-  XMLElement = require('./XMLElement');
-
-  module.exports = XMLBuilder = (function() {
-    function XMLBuilder(name, options) {
-      var root, temp;
-      if (name == null) {
-        throw new Error("Root element needs a name");
-      }
-      if (options == null) {
-        options = {};
-      }
-      this.options = options;
-      this.stringify = new XMLStringifier(options);
-      temp = new XMLElement(this, 'doc');
-      root = temp.element(name);
-      root.isRoot = true;
-      root.documentObject = this;
-      this.rootObject = root;
-      if (!options.headless) {
-        root.declaration(options);
-        if ((options.pubID != null) || (options.sysID != null)) {
-          root.doctype(options);
-        }
-      }
-    }
-
-    XMLBuilder.prototype.root = function() {
-      return this.rootObject;
-    };
-
-    XMLBuilder.prototype.end = function(options) {
-      return toString(options);
-    };
-
-    XMLBuilder.prototype.toString = function(options) {
-      var indent, newline, pretty, r;
-      pretty = (options != null ? options.pretty : void 0) || false;
-      indent = (options != null ? options.indent : void 0) || '  ';
-      newline = (options != null ? options.newline : void 0) || '\n';
-      r = '';
-      if (this.xmldec != null) {
-        r += this.xmldec.toString(options);
-      }
-      if (this.doctype != null) {
-        r += this.doctype.toString(options);
-      }
-      r += this.rootObject.toString(options);
-      if (pretty && r.slice(-newline.length) === newline) {
-        r = r.slice(0, -newline.length);
-      }
-      return r;
-    };
-
-    return XMLBuilder;
-
-  })();
-
-}).call(this);
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/lib/XMLCData.js b/bin/node_modules/plist/node_modules/xmlbuilder/lib/XMLCData.js
deleted file mode 100644
index c729a3f..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/lib/XMLCData.js
+++ /dev/null
@@ -1,48 +0,0 @@
-// Generated by CoffeeScript 1.6.3
-(function() {
-  var XMLCData, XMLNode, _,
-    __hasProp = {}.hasOwnProperty,
-    __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
-
-  _ = require('lodash-node');
-
-  XMLNode = require('./XMLNode');
-
-  module.exports = XMLCData = (function(_super) {
-    __extends(XMLCData, _super);
-
-    function XMLCData(parent, text) {
-      XMLCData.__super__.constructor.call(this, parent);
-      if (text == null) {
-        throw new Error("Missing CDATA text");
-      }
-      this.text = this.stringify.cdata(text);
-    }
-
-    XMLCData.prototype.clone = function() {
-      return _.create(XMLCData.prototype, this);
-    };
-
-    XMLCData.prototype.toString = function(options, level) {
-      var indent, newline, pretty, r, space;
-      pretty = (options != null ? options.pretty : void 0) || false;
-      indent = (options != null ? options.indent : void 0) || '  ';
-      newline = (options != null ? options.newline : void 0) || '\n';
-      level || (level = 0);
-      space = new Array(level + 1).join(indent);
-      r = '';
-      if (pretty) {
-        r += space;
-      }
-      r += '<![CDATA[' + this.text + ']]>';
-      if (pretty) {
-        r += newline;
-      }
-      return r;
-    };
-
-    return XMLCData;
-
-  })(XMLNode);
-
-}).call(this);
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/lib/XMLComment.js b/bin/node_modules/plist/node_modules/xmlbuilder/lib/XMLComment.js
deleted file mode 100644
index d89cc8f..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/lib/XMLComment.js
+++ /dev/null
@@ -1,48 +0,0 @@
-// Generated by CoffeeScript 1.6.3
-(function() {
-  var XMLComment, XMLNode, _,
-    __hasProp = {}.hasOwnProperty,
-    __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
-
-  _ = require('lodash-node');
-
-  XMLNode = require('./XMLNode');
-
-  module.exports = XMLComment = (function(_super) {
-    __extends(XMLComment, _super);
-
-    function XMLComment(parent, text) {
-      XMLComment.__super__.constructor.call(this, parent);
-      if (text == null) {
-        throw new Error("Missing comment text");
-      }
-      this.text = this.stringify.comment(text);
-    }
-
-    XMLComment.prototype.clone = function() {
-      return _.create(XMLComment.prototype, this);
-    };
-
-    XMLComment.prototype.toString = function(options, level) {
-      var indent, newline, pretty, r, space;
-      pretty = (options != null ? options.pretty : void 0) || false;
-      indent = (options != null ? options.indent : void 0) || '  ';
-      newline = (options != null ? options.newline : void 0) || '\n';
-      level || (level = 0);
-      space = new Array(level + 1).join(indent);
-      r = '';
-      if (pretty) {
-        r += space;
-      }
-      r += '<!-- ' + this.text + ' -->';
-      if (pretty) {
-        r += newline;
-      }
-      return r;
-    };
-
-    return XMLComment;
-
-  })(XMLNode);
-
-}).call(this);
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/lib/XMLDTDAttList.js b/bin/node_modules/plist/node_modules/xmlbuilder/lib/XMLDTDAttList.js
deleted file mode 100644
index 37e2fa7..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/lib/XMLDTDAttList.js
+++ /dev/null
@@ -1,71 +0,0 @@
-// Generated by CoffeeScript 1.6.3
-(function() {
-  var XMLDTDAttList, _;
-
-  _ = require('lodash-node');
-
-  module.exports = XMLDTDAttList = (function() {
-    function XMLDTDAttList(parent, elementName, attributeName, attributeType, defaultValueType, defaultValue) {
-      this.stringify = parent.stringify;
-      if (elementName == null) {
-        throw new Error("Missing DTD element name");
-      }
-      if (attributeName == null) {
-        throw new Error("Missing DTD attribute name");
-      }
-      if (!attributeType) {
-        throw new Error("Missing DTD attribute type");
-      }
-      if (!defaultValueType) {
-        throw new Error("Missing DTD attribute default");
-      }
-      if (defaultValueType.indexOf('#') !== 0) {
-        defaultValueType = '#' + defaultValueType;
-      }
-      if (!defaultValueType.match(/^(#REQUIRED|#IMPLIED|#FIXED|#DEFAULT)$/)) {
-        throw new Error("Invalid default value type; expected: #REQUIRED, #IMPLIED, #FIXED or #DEFAULT");
-      }
-      if (defaultValue && !defaultValueType.match(/^(#FIXED|#DEFAULT)$/)) {
-        throw new Error("Default value only applies to #FIXED or #DEFAULT");
-      }
-      this.elementName = this.stringify.eleName(elementName);
-      this.attributeName = this.stringify.attName(attributeName);
-      this.attributeType = this.stringify.dtdAttType(attributeType);
-      this.defaultValue = this.stringify.dtdAttDefault(defaultValue);
-      this.defaultValueType = defaultValueType;
-    }
-
-    XMLDTDAttList.prototype.clone = function() {
-      return _.create(XMLDTDAttList.prototype, this);
-    };
-
-    XMLDTDAttList.prototype.toString = function(options, level) {
-      var indent, newline, pretty, r, space;
-      pretty = (options != null ? options.pretty : void 0) || false;
-      indent = (options != null ? options.indent : void 0) || '  ';
-      newline = (options != null ? options.newline : void 0) || '\n';
-      level || (level = 0);
-      space = new Array(level + 1).join(indent);
-      r = '';
-      if (pretty) {
-        r += space;
-      }
-      r += '<!ATTLIST ' + this.elementName + ' ' + this.attributeName + ' ' + this.attributeType;
-      if (this.defaultValueType !== '#DEFAULT') {
-        r += ' ' + this.defaultValueType;
-      }
-      if (this.defaultValue) {
-        r += ' "' + this.defaultValue + '"';
-      }
-      r += '>';
-      if (pretty) {
-        r += newline;
-      }
-      return r;
-    };
-
-    return XMLDTDAttList;
-
-  })();
-
-}).call(this);
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/lib/XMLDTDElement.js b/bin/node_modules/plist/node_modules/xmlbuilder/lib/XMLDTDElement.js
deleted file mode 100644
index 548eed4..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/lib/XMLDTDElement.js
+++ /dev/null
@@ -1,49 +0,0 @@
-// Generated by CoffeeScript 1.6.3
-(function() {
-  var XMLDTDElement, _;
-
-  _ = require('lodash-node');
-
-  module.exports = XMLDTDElement = (function() {
-    function XMLDTDElement(parent, name, value) {
-      this.stringify = parent.stringify;
-      if (name == null) {
-        throw new Error("Missing DTD element name");
-      }
-      if (!value) {
-        value = '(#PCDATA)';
-      }
-      if (_.isArray(value)) {
-        value = '(' + value.join(',') + ')';
-      }
-      this.name = this.stringify.eleName(name);
-      this.value = this.stringify.dtdElementValue(value);
-    }
-
-    XMLDTDElement.prototype.clone = function() {
-      return _.create(XMLDTDElement.prototype, this);
-    };
-
-    XMLDTDElement.prototype.toString = function(options, level) {
-      var indent, newline, pretty, r, space;
-      pretty = (options != null ? options.pretty : void 0) || false;
-      indent = (options != null ? options.indent : void 0) || '  ';
-      newline = (options != null ? options.newline : void 0) || '\n';
-      level || (level = 0);
-      space = new Array(level + 1).join(indent);
-      r = '';
-      if (pretty) {
-        r += space;
-      }
-      r += '<!ELEMENT ' + this.name + ' ' + this.value + '>';
-      if (pretty) {
-        r += newline;
-      }
-      return r;
-    };
-
-    return XMLDTDElement;
-
-  })();
-
-}).call(this);
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/lib/XMLDTDEntity.js b/bin/node_modules/plist/node_modules/xmlbuilder/lib/XMLDTDEntity.js
deleted file mode 100644
index 205c948..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/lib/XMLDTDEntity.js
+++ /dev/null
@@ -1,85 +0,0 @@
-// Generated by CoffeeScript 1.6.3
-(function() {
-  var XMLDTDEntity, _;
-
-  _ = require('lodash-node');
-
-  module.exports = XMLDTDEntity = (function() {
-    function XMLDTDEntity(parent, pe, name, value) {
-      this.stringify = parent.stringify;
-      if (name == null) {
-        throw new Error("Missing entity name");
-      }
-      if (value == null) {
-        throw new Error("Missing entity value");
-      }
-      this.pe = !!pe;
-      this.name = this.stringify.eleName(name);
-      if (!_.isObject(value)) {
-        this.value = this.stringify.dtdEntityValue(value);
-      } else {
-        if (!value.pubID && !value.sysID) {
-          throw new Error("Public and/or system identifiers are required for an external entity");
-        }
-        if (value.pubID && !value.sysID) {
-          throw new Error("System identifier is required for a public external entity");
-        }
-        if (value.pubID != null) {
-          this.pubID = this.stringify.dtdPubID(value.pubID);
-        }
-        if (value.sysID != null) {
-          this.sysID = this.stringify.dtdSysID(value.sysID);
-        }
-        if (value.nData != null) {
-          this.nData = this.stringify.dtdNData(value.nData);
-        }
-        if (this.pe && this.nData) {
-          throw new Error("Notation declaration is not allowed in a parameter entity");
-        }
-      }
-    }
-
-    XMLDTDEntity.prototype.clone = function() {
-      return _.create(XMLDTDEntity.prototype, this);
-    };
-
-    XMLDTDEntity.prototype.toString = function(options, level) {
-      var indent, newline, pretty, r, space;
-      pretty = (options != null ? options.pretty : void 0) || false;
-      indent = (options != null ? options.indent : void 0) || '  ';
-      newline = (options != null ? options.newline : void 0) || '\n';
-      level || (level = 0);
-      space = new Array(level + 1).join(indent);
-      r = '';
-      if (pretty) {
-        r += space;
-      }
-      r += '<!ENTITY';
-      if (this.pe) {
-        r += ' %';
-      }
-      r += ' ' + this.name;
-      if (this.value) {
-        r += ' "' + this.value + '"';
-      } else {
-        if (this.pubID && this.sysID) {
-          r += ' PUBLIC "' + this.pubID + '" "' + this.sysID + '"';
-        } else if (this.sysID) {
-          r += ' SYSTEM "' + this.sysID + '"';
-        }
-        if (this.nData) {
-          r += ' NDATA ' + this.nData;
-        }
-      }
-      r += '>';
-      if (pretty) {
-        r += newline;
-      }
-      return r;
-    };
-
-    return XMLDTDEntity;
-
-  })();
-
-}).call(this);
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/lib/XMLDTDNotation.js b/bin/node_modules/plist/node_modules/xmlbuilder/lib/XMLDTDNotation.js
deleted file mode 100644
index 94b0cb6..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/lib/XMLDTDNotation.js
+++ /dev/null
@@ -1,59 +0,0 @@
-// Generated by CoffeeScript 1.6.3
-(function() {
-  var XMLDTDNotation, _;
-
-  _ = require('lodash-node');
-
-  module.exports = XMLDTDNotation = (function() {
-    function XMLDTDNotation(parent, name, value) {
-      this.stringify = parent.stringify;
-      if (name == null) {
-        throw new Error("Missing notation name");
-      }
-      if (!value.pubID && !value.sysID) {
-        throw new Error("Public or system identifiers are required for an external entity");
-      }
-      this.name = this.stringify.eleName(name);
-      if (value.pubID != null) {
-        this.pubID = this.stringify.dtdPubID(value.pubID);
-      }
-      if (value.sysID != null) {
-        this.sysID = this.stringify.dtdSysID(value.sysID);
-      }
-    }
-
-    XMLDTDNotation.prototype.clone = function() {
-      return _.create(XMLDTDNotation.prototype, this);
-    };
-
-    XMLDTDNotation.prototype.toString = function(options, level) {
-      var indent, newline, pretty, r, space;
-      pretty = (options != null ? options.pretty : void 0) || false;
-      indent = (options != null ? options.indent : void 0) || '  ';
-      newline = (options != null ? options.newline : void 0) || '\n';
-      level || (level = 0);
-      space = new Array(level + 1).join(indent);
-      r = '';
-      if (pretty) {
-        r += space;
-      }
-      r += '<!NOTATION ' + this.name;
-      if (this.pubID && this.sysID) {
-        r += ' PUBLIC "' + this.pubID + '" "' + this.sysID + '"';
-      } else if (this.pubID) {
-        r += ' PUBLIC "' + this.pubID + '"';
-      } else if (this.sysID) {
-        r += ' SYSTEM "' + this.sysID + '"';
-      }
-      r += '>';
-      if (pretty) {
-        r += newline;
-      }
-      return r;
-    };
-
-    return XMLDTDNotation;
-
-  })();
-
-}).call(this);
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/lib/XMLDeclaration.js b/bin/node_modules/plist/node_modules/xmlbuilder/lib/XMLDeclaration.js
deleted file mode 100644
index a8ea575..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/lib/XMLDeclaration.js
+++ /dev/null
@@ -1,70 +0,0 @@
-// Generated by CoffeeScript 1.6.3
-(function() {
-  var XMLDeclaration, XMLNode, _,
-    __hasProp = {}.hasOwnProperty,
-    __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
-
-  _ = require('lodash-node');
-
-  XMLNode = require('./XMLNode');
-
-  module.exports = XMLDeclaration = (function(_super) {
-    __extends(XMLDeclaration, _super);
-
-    function XMLDeclaration(parent, version, encoding, standalone) {
-      var _ref;
-      XMLDeclaration.__super__.constructor.call(this, parent);
-      if (_.isObject(version)) {
-        _ref = version, version = _ref.version, encoding = _ref.encoding, standalone = _ref.standalone;
-      }
-      if (!version) {
-        version = '1.0';
-      }
-      if (version != null) {
-        this.version = this.stringify.xmlVersion(version);
-      }
-      if (encoding != null) {
-        this.encoding = this.stringify.xmlEncoding(encoding);
-      }
-      if (standalone != null) {
-        this.standalone = this.stringify.xmlStandalone(standalone);
-      }
-    }
-
-    XMLDeclaration.prototype.clone = function() {
-      return _.create(XMLDeclaration.prototype, this);
-    };
-
-    XMLDeclaration.prototype.toString = function(options, level) {
-      var indent, newline, pretty, r, space;
-      pretty = (options != null ? options.pretty : void 0) || false;
-      indent = (options != null ? options.indent : void 0) || '  ';
-      newline = (options != null ? options.newline : void 0) || '\n';
-      level || (level = 0);
-      space = new Array(level + 1).join(indent);
-      r = '';
-      if (pretty) {
-        r += space;
-      }
-      r += '<?xml';
-      if (this.version != null) {
-        r += ' version="' + this.version + '"';
-      }
-      if (this.encoding != null) {
-        r += ' encoding="' + this.encoding + '"';
-      }
-      if (this.standalone != null) {
-        r += ' standalone="' + this.standalone + '"';
-      }
-      r += '?>';
-      if (pretty) {
-        r += newline;
-      }
-      return r;
-    };
-
-    return XMLDeclaration;
-
-  })(XMLNode);
-
-}).call(this);
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/lib/XMLDocType.js b/bin/node_modules/plist/node_modules/xmlbuilder/lib/XMLDocType.js
deleted file mode 100644
index d360353..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/lib/XMLDocType.js
+++ /dev/null
@@ -1,183 +0,0 @@
-// Generated by CoffeeScript 1.6.3
-(function() {
-  var XMLDocType, _;
-
-  _ = require('lodash-node');
-
-  module.exports = XMLDocType = (function() {
-    function XMLDocType(parent, pubID, sysID) {
-      var _ref, _ref1;
-      this.documentObject = parent;
-      this.stringify = this.documentObject.stringify;
-      this.children = [];
-      if (_.isObject(pubID)) {
-        _ref = pubID, pubID = _ref.pubID, sysID = _ref.sysID;
-      }
-      if (sysID == null) {
-        _ref1 = [pubID, sysID], sysID = _ref1[0], pubID = _ref1[1];
-      }
-      if (pubID != null) {
-        this.pubID = this.stringify.dtdPubID(pubID);
-      }
-      if (sysID != null) {
-        this.sysID = this.stringify.dtdSysID(sysID);
-      }
-    }
-
-    XMLDocType.prototype.clone = function() {
-      return _.create(XMLDocType.prototype, this);
-    };
-
-    XMLDocType.prototype.element = function(name, value) {
-      var XMLDTDElement, child;
-      XMLDTDElement = require('./XMLDTDElement');
-      child = new XMLDTDElement(this, name, value);
-      this.children.push(child);
-      return this;
-    };
-
-    XMLDocType.prototype.attList = function(elementName, attributeName, attributeType, defaultValueType, defaultValue) {
-      var XMLDTDAttList, child;
-      XMLDTDAttList = require('./XMLDTDAttList');
-      child = new XMLDTDAttList(this, elementName, attributeName, attributeType, defaultValueType, defaultValue);
-      this.children.push(child);
-      return this;
-    };
-
-    XMLDocType.prototype.entity = function(name, value) {
-      var XMLDTDEntity, child;
-      XMLDTDEntity = require('./XMLDTDEntity');
-      child = new XMLDTDEntity(this, false, name, value);
-      this.children.push(child);
-      return this;
-    };
-
-    XMLDocType.prototype.pEntity = function(name, value) {
-      var XMLDTDEntity, child;
-      XMLDTDEntity = require('./XMLDTDEntity');
-      child = new XMLDTDEntity(this, true, name, value);
-      this.children.push(child);
-      return this;
-    };
-
-    XMLDocType.prototype.notation = function(name, value) {
-      var XMLDTDNotation, child;
-      XMLDTDNotation = require('./XMLDTDNotation');
-      child = new XMLDTDNotation(this, name, value);
-      this.children.push(child);
-      return this;
-    };
-
-    XMLDocType.prototype.cdata = function(value) {
-      var XMLCData, child;
-      XMLCData = require('./XMLCData');
-      child = new XMLCData(this, value);
-      this.children.push(child);
-      return this;
-    };
-
-    XMLDocType.prototype.comment = function(value) {
-      var XMLComment, child;
-      XMLComment = require('./XMLComment');
-      child = new XMLComment(this, value);
-      this.children.push(child);
-      return this;
-    };
-
-    XMLDocType.prototype.instruction = function(target, value) {
-      var XMLProcessingInstruction, child;
-      XMLProcessingInstruction = require('./XMLProcessingInstruction');
-      child = new XMLProcessingInstruction(this, target, value);
-      this.children.push(child);
-      return this;
-    };
-
-    XMLDocType.prototype.root = function() {
-      return this.documentObject.root();
-    };
-
-    XMLDocType.prototype.document = function() {
-      return this.documentObject;
-    };
-
-    XMLDocType.prototype.toString = function(options, level) {
-      var child, indent, newline, pretty, r, space, _i, _len, _ref;
-      pretty = (options != null ? options.pretty : void 0) || false;
-      indent = (options != null ? options.indent : void 0) || '  ';
-      newline = (options != null ? options.newline : void 0) || '\n';
-      level || (level = 0);
-      space = new Array(level + 1).join(indent);
-      r = '';
-      if (pretty) {
-        r += space;
-      }
-      r += '<!DOCTYPE ' + this.root().name;
-      if (this.pubID && this.sysID) {
-        r += ' PUBLIC "' + this.pubID + '" "' + this.sysID + '"';
-      } else if (this.sysID) {
-        r += ' SYSTEM "' + this.sysID + '"';
-      }
-      if (this.children.length > 0) {
-        r += ' [';
-        if (pretty) {
-          r += newline;
-        }
-        _ref = this.children;
-        for (_i = 0, _len = _ref.length; _i < _len; _i++) {
-          child = _ref[_i];
-          r += child.toString(options, level + 1);
-        }
-        r += ']';
-      }
-      r += '>';
-      if (pretty) {
-        r += newline;
-      }
-      return r;
-    };
-
-    XMLDocType.prototype.ele = function(name, value) {
-      return this.element(name, value);
-    };
-
-    XMLDocType.prototype.att = function(elementName, attributeName, attributeType, defaultValueType, defaultValue) {
-      return this.attList(elementName, attributeName, attributeType, defaultValueType, defaultValue);
-    };
-
-    XMLDocType.prototype.ent = function(name, value) {
-      return this.entity(name, value);
-    };
-
-    XMLDocType.prototype.pent = function(name, value) {
-      return this.pEntity(name, value);
-    };
-
-    XMLDocType.prototype.not = function(name, value) {
-      return this.notation(name, value);
-    };
-
-    XMLDocType.prototype.dat = function(value) {
-      return this.cdata(value);
-    };
-
-    XMLDocType.prototype.com = function(value) {
-      return this.comment(value);
-    };
-
-    XMLDocType.prototype.ins = function(target, value) {
-      return this.instruction(target, value);
-    };
-
-    XMLDocType.prototype.up = function() {
-      return this.root();
-    };
-
-    XMLDocType.prototype.doc = function() {
-      return this.document();
-    };
-
-    return XMLDocType;
-
-  })();
-
-}).call(this);
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/lib/XMLElement.js b/bin/node_modules/plist/node_modules/xmlbuilder/lib/XMLElement.js
deleted file mode 100644
index 28a5c81..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/lib/XMLElement.js
+++ /dev/null
@@ -1,190 +0,0 @@
-// Generated by CoffeeScript 1.6.3
-(function() {
-  var XMLAttribute, XMLElement, XMLNode, XMLProcessingInstruction, _,
-    __hasProp = {}.hasOwnProperty,
-    __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
-
-  _ = require('lodash-node');
-
-  XMLNode = require('./XMLNode');
-
-  XMLAttribute = require('./XMLAttribute');
-
-  XMLProcessingInstruction = require('./XMLProcessingInstruction');
-
-  module.exports = XMLElement = (function(_super) {
-    __extends(XMLElement, _super);
-
-    function XMLElement(parent, name, attributes) {
-      XMLElement.__super__.constructor.call(this, parent);
-      if (name == null) {
-        throw new Error("Missing element name");
-      }
-      this.name = this.stringify.eleName(name);
-      this.children = [];
-      this.instructions = [];
-      this.attributes = {};
-      if (attributes != null) {
-        this.attribute(attributes);
-      }
-    }
-
-    XMLElement.prototype.clone = function() {
-      var att, attName, clonedSelf, pi, _i, _len, _ref, _ref1;
-      clonedSelf = _.create(XMLElement.prototype, this);
-      clonedSelf.attributes = {};
-      _ref = this.attributes;
-      for (attName in _ref) {
-        if (!__hasProp.call(_ref, attName)) continue;
-        att = _ref[attName];
-        clonedSelf.attributes[attName] = att.clone();
-      }
-      clonedSelf.instructions = [];
-      _ref1 = this.instructions;
-      for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
-        pi = _ref1[_i];
-        clonedSelf.instructions.push(pi.clone());
-      }
-      clonedSelf.children = [];
-      this.children.forEach(function(child) {
-        var clonedChild;
-        clonedChild = child.clone();
-        clonedChild.parent = clonedSelf;
-        return clonedSelf.children.push(clonedChild);
-      });
-      return clonedSelf;
-    };
-
-    XMLElement.prototype.attribute = function(name, value) {
-      var attName, attValue;
-      if (_.isObject(name)) {
-        for (attName in name) {
-          if (!__hasProp.call(name, attName)) continue;
-          attValue = name[attName];
-          this.attribute(attName, attValue);
-        }
-      } else {
-        if (_.isFunction(value)) {
-          value = value.apply();
-        }
-        if (!this.options.skipNullAttributes || (value != null)) {
-          this.attributes[name] = new XMLAttribute(this, name, value);
-        }
-      }
-      return this;
-    };
-
-    XMLElement.prototype.removeAttribute = function(name) {
-      var attName, _i, _len;
-      if (name == null) {
-        throw new Error("Missing attribute name");
-      }
-      if (_.isArray(name)) {
-        for (_i = 0, _len = name.length; _i < _len; _i++) {
-          attName = name[_i];
-          delete this.attributes[attName];
-        }
-      } else {
-        delete this.attributes[name];
-      }
-      return this;
-    };
-
-    XMLElement.prototype.instruction = function(target, value) {
-      var insTarget, insValue, instruction, _i, _len;
-      if (_.isArray(target)) {
-        for (_i = 0, _len = target.length; _i < _len; _i++) {
-          insTarget = target[_i];
-          this.instruction(insTarget);
-        }
-      } else if (_.isObject(target)) {
-        for (insTarget in target) {
-          if (!__hasProp.call(target, insTarget)) continue;
-          insValue = target[insTarget];
-          this.instruction(insTarget, insValue);
-        }
-      } else {
-        if (_.isFunction(value)) {
-          value = value.apply();
-        }
-        instruction = new XMLProcessingInstruction(this, target, value);
-        this.instructions.push(instruction);
-      }
-      return this;
-    };
-
-    XMLElement.prototype.toString = function(options, level) {
-      var att, child, indent, instruction, name, newline, pretty, r, space, _i, _j, _len, _len1, _ref, _ref1, _ref2;
-      pretty = (options != null ? options.pretty : void 0) || false;
-      indent = (options != null ? options.indent : void 0) || '  ';
-      newline = (options != null ? options.newline : void 0) || '\n';
-      level || (level = 0);
-      space = new Array(level + 1).join(indent);
-      r = '';
-      _ref = this.instructions;
-      for (_i = 0, _len = _ref.length; _i < _len; _i++) {
-        instruction = _ref[_i];
-        r += instruction.toString(options, level + 1);
-      }
-      if (pretty) {
-        r += space;
-      }
-      r += '<' + this.name;
-      _ref1 = this.attributes;
-      for (name in _ref1) {
-        if (!__hasProp.call(_ref1, name)) continue;
-        att = _ref1[name];
-        r += att.toString(options);
-      }
-      if (this.children.length === 0) {
-        r += '/>';
-        if (pretty) {
-          r += newline;
-        }
-      } else if (pretty && this.children.length === 1 && (this.children[0].value != null)) {
-        r += '>';
-        r += this.children[0].value;
-        r += '</' + this.name + '>';
-        r += newline;
-      } else {
-        r += '>';
-        if (pretty) {
-          r += newline;
-        }
-        _ref2 = this.children;
-        for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) {
-          child = _ref2[_j];
-          r += child.toString(options, level + 1);
-        }
-        if (pretty) {
-          r += space;
-        }
-        r += '</' + this.name + '>';
-        if (pretty) {
-          r += newline;
-        }
-      }
-      return r;
-    };
-
-    XMLElement.prototype.att = function(name, value) {
-      return this.attribute(name, value);
-    };
-
-    XMLElement.prototype.ins = function(target, value) {
-      return this.instruction(target, value);
-    };
-
-    XMLElement.prototype.a = function(name, value) {
-      return this.attribute(name, value);
-    };
-
-    XMLElement.prototype.i = function(target, value) {
-      return this.instruction(target, value);
-    };
-
-    return XMLElement;
-
-  })(XMLNode);
-
-}).call(this);
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/lib/XMLNode.js b/bin/node_modules/plist/node_modules/xmlbuilder/lib/XMLNode.js
deleted file mode 100644
index 1551647..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/lib/XMLNode.js
+++ /dev/null
@@ -1,304 +0,0 @@
-// Generated by CoffeeScript 1.6.3
-(function() {
-  var XMLNode, _,
-    __hasProp = {}.hasOwnProperty;
-
-  _ = require('lodash-node');
-
-  module.exports = XMLNode = (function() {
-    function XMLNode(parent) {
-      this.parent = parent;
-      this.options = this.parent.options;
-      this.stringify = this.parent.stringify;
-    }
-
-    XMLNode.prototype.clone = function() {
-      throw new Error("Cannot clone generic XMLNode");
-    };
-
-    XMLNode.prototype.element = function(name, attributes, text) {
-      var item, key, lastChild, val, _i, _len, _ref;
-      lastChild = null;
-      if (attributes == null) {
-        attributes = {};
-      }
-      if (!_.isObject(attributes)) {
-        _ref = [attributes, text], text = _ref[0], attributes = _ref[1];
-      }
-      if (_.isArray(name)) {
-        for (_i = 0, _len = name.length; _i < _len; _i++) {
-          item = name[_i];
-          lastChild = this.element(item);
-        }
-      } else if (_.isFunction(name)) {
-        lastChild = this.element(name.apply());
-      } else if (_.isObject(name)) {
-        for (key in name) {
-          if (!__hasProp.call(name, key)) continue;
-          val = name[key];
-          if (!(val != null)) {
-            continue;
-          }
-          if (_.isFunction(val)) {
-            val = val.apply();
-          }
-          if (!this.options.ignoreDecorators && this.stringify.convertAttKey && key.indexOf(this.stringify.convertAttKey) === 0) {
-            lastChild = this.attribute(key.substr(this.stringify.convertAttKey.length), val);
-          } else if (!this.options.ignoreDecorators && this.stringify.convertPIKey && key.indexOf(this.stringify.convertPIKey) === 0) {
-            lastChild = this.instruction(key.substr(this.stringify.convertPIKey.length), val);
-          } else if (_.isObject(val)) {
-            if (!this.options.ignoreDecorators && this.stringify.convertListKey && key.indexOf(this.stringify.convertListKey) === 0 && _.isArray(val)) {
-              lastChild = this.element(val);
-            } else {
-              lastChild = this.element(key);
-              lastChild.element(val);
-            }
-          } else {
-            lastChild = this.element(key, val);
-          }
-        }
-      } else {
-        if (!this.options.ignoreDecorators && this.stringify.convertTextKey && name.indexOf(this.stringify.convertTextKey) === 0) {
-          lastChild = this.text(text);
-        } else if (!this.options.ignoreDecorators && this.stringify.convertCDataKey && name.indexOf(this.stringify.convertCDataKey) === 0) {
-          lastChild = this.cdata(text);
-        } else if (!this.options.ignoreDecorators && this.stringify.convertCommentKey && name.indexOf(this.stringify.convertCommentKey) === 0) {
-          lastChild = this.comment(text);
-        } else if (!this.options.ignoreDecorators && this.stringify.convertRawKey && name.indexOf(this.stringify.convertRawKey) === 0) {
-          lastChild = this.raw(text);
-        } else {
-          lastChild = this.node(name, attributes, text);
-        }
-      }
-      if (lastChild == null) {
-        throw new Error("Could not create any elements with: " + name);
-      }
-      return lastChild;
-    };
-
-    XMLNode.prototype.insertBefore = function(name, attributes, text) {
-      var child, i, removed;
-      if (this.isRoot) {
-        throw new Error("Cannot insert elements at root level");
-      }
-      i = this.parent.children.indexOf(this);
-      removed = this.parent.children.splice(i);
-      child = this.parent.element(name, attributes, text);
-      Array.prototype.push.apply(this.parent.children, removed);
-      return child;
-    };
-
-    XMLNode.prototype.insertAfter = function(name, attributes, text) {
-      var child, i, removed;
-      if (this.isRoot) {
-        throw new Error("Cannot insert elements at root level");
-      }
-      i = this.parent.children.indexOf(this);
-      removed = this.parent.children.splice(i + 1);
-      child = this.parent.element(name, attributes, text);
-      Array.prototype.push.apply(this.parent.children, removed);
-      return child;
-    };
-
-    XMLNode.prototype.remove = function() {
-      var i, _ref;
-      if (this.isRoot) {
-        throw new Error("Cannot remove the root element");
-      }
-      i = this.parent.children.indexOf(this);
-      [].splice.apply(this.parent.children, [i, i - i + 1].concat(_ref = [])), _ref;
-      return this.parent;
-    };
-
-    XMLNode.prototype.node = function(name, attributes, text) {
-      var XMLElement, child, _ref;
-      if (attributes == null) {
-        attributes = {};
-      }
-      if (!_.isObject(attributes)) {
-        _ref = [attributes, text], text = _ref[0], attributes = _ref[1];
-      }
-      XMLElement = require('./XMLElement');
-      child = new XMLElement(this, name, attributes);
-      if (text != null) {
-        child.text(text);
-      }
-      this.children.push(child);
-      return child;
-    };
-
-    XMLNode.prototype.text = function(value) {
-      var XMLText, child;
-      XMLText = require('./XMLText');
-      child = new XMLText(this, value);
-      this.children.push(child);
-      return this;
-    };
-
-    XMLNode.prototype.cdata = function(value) {
-      var XMLCData, child;
-      XMLCData = require('./XMLCData');
-      child = new XMLCData(this, value);
-      this.children.push(child);
-      return this;
-    };
-
-    XMLNode.prototype.comment = function(value) {
-      var XMLComment, child;
-      XMLComment = require('./XMLComment');
-      child = new XMLComment(this, value);
-      this.children.push(child);
-      return this;
-    };
-
-    XMLNode.prototype.raw = function(value) {
-      var XMLRaw, child;
-      XMLRaw = require('./XMLRaw');
-      child = new XMLRaw(this, value);
-      this.children.push(child);
-      return this;
-    };
-
-    XMLNode.prototype.declaration = function(version, encoding, standalone) {
-      var XMLDeclaration, doc, xmldec;
-      doc = this.document();
-      XMLDeclaration = require('./XMLDeclaration');
-      xmldec = new XMLDeclaration(doc, version, encoding, standalone);
-      doc.xmldec = xmldec;
-      return doc.root();
-    };
-
-    XMLNode.prototype.doctype = function(pubID, sysID) {
-      var XMLDocType, doc, doctype;
-      doc = this.document();
-      XMLDocType = require('./XMLDocType');
-      doctype = new XMLDocType(doc, pubID, sysID);
-      doc.doctype = doctype;
-      return doctype;
-    };
-
-    XMLNode.prototype.up = function() {
-      if (this.isRoot) {
-        throw new Error("The root node has no parent. Use doc() if you need to get the document object.");
-      }
-      return this.parent;
-    };
-
-    XMLNode.prototype.root = function() {
-      var child;
-      if (this.isRoot) {
-        return this;
-      }
-      child = this.parent;
-      while (!child.isRoot) {
-        child = child.parent;
-      }
-      return child;
-    };
-
-    XMLNode.prototype.document = function() {
-      return this.root().documentObject;
-    };
-
-    XMLNode.prototype.end = function(options) {
-      return this.document().toString(options);
-    };
-
-    XMLNode.prototype.prev = function() {
-      var i;
-      if (this.isRoot) {
-        throw new Error("Root node has no siblings");
-      }
-      i = this.parent.children.indexOf(this);
-      if (i < 1) {
-        throw new Error("Already at the first node");
-      }
-      return this.parent.children[i - 1];
-    };
-
-    XMLNode.prototype.next = function() {
-      var i;
-      if (this.isRoot) {
-        throw new Error("Root node has no siblings");
-      }
-      i = this.parent.children.indexOf(this);
-      if (i === -1 || i === this.parent.children.length - 1) {
-        throw new Error("Already at the last node");
-      }
-      return this.parent.children[i + 1];
-    };
-
-    XMLNode.prototype.importXMLBuilder = function(xmlbuilder) {
-      var clonedRoot;
-      clonedRoot = xmlbuilder.root().clone();
-      clonedRoot.parent = this;
-      clonedRoot.isRoot = false;
-      this.children.push(clonedRoot);
-      return this;
-    };
-
-    XMLNode.prototype.ele = function(name, attributes, text) {
-      return this.element(name, attributes, text);
-    };
-
-    XMLNode.prototype.nod = function(name, attributes, text) {
-      return this.node(name, attributes, text);
-    };
-
-    XMLNode.prototype.txt = function(value) {
-      return this.text(value);
-    };
-
-    XMLNode.prototype.dat = function(value) {
-      return this.cdata(value);
-    };
-
-    XMLNode.prototype.com = function(value) {
-      return this.comment(value);
-    };
-
-    XMLNode.prototype.doc = function() {
-      return this.document();
-    };
-
-    XMLNode.prototype.dec = function(version, encoding, standalone) {
-      return this.declaration(version, encoding, standalone);
-    };
-
-    XMLNode.prototype.dtd = function(pubID, sysID) {
-      return this.doctype(pubID, sysID);
-    };
-
-    XMLNode.prototype.e = function(name, attributes, text) {
-      return this.element(name, attributes, text);
-    };
-
-    XMLNode.prototype.n = function(name, attributes, text) {
-      return this.node(name, attributes, text);
-    };
-
-    XMLNode.prototype.t = function(value) {
-      return this.text(value);
-    };
-
-    XMLNode.prototype.d = function(value) {
-      return this.cdata(value);
-    };
-
-    XMLNode.prototype.c = function(value) {
-      return this.comment(value);
-    };
-
-    XMLNode.prototype.r = function(value) {
-      return this.raw(value);
-    };
-
-    XMLNode.prototype.u = function() {
-      return this.up();
-    };
-
-    return XMLNode;
-
-  })();
-
-}).call(this);
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/lib/XMLProcessingInstruction.js b/bin/node_modules/plist/node_modules/xmlbuilder/lib/XMLProcessingInstruction.js
deleted file mode 100644
index bf85ed3..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/lib/XMLProcessingInstruction.js
+++ /dev/null
@@ -1,50 +0,0 @@
-// Generated by CoffeeScript 1.6.3
-(function() {
-  var XMLProcessingInstruction, _;
-
-  _ = require('lodash-node');
-
-  module.exports = XMLProcessingInstruction = (function() {
-    function XMLProcessingInstruction(parent, target, value) {
-      this.stringify = parent.stringify;
-      if (target == null) {
-        throw new Error("Missing instruction target");
-      }
-      this.target = this.stringify.insTarget(target);
-      if (value) {
-        this.value = this.stringify.insValue(value);
-      }
-    }
-
-    XMLProcessingInstruction.prototype.clone = function() {
-      return _.create(XMLProcessingInstruction.prototype, this);
-    };
-
-    XMLProcessingInstruction.prototype.toString = function(options, level) {
-      var indent, newline, pretty, r, space;
-      pretty = (options != null ? options.pretty : void 0) || false;
-      indent = (options != null ? options.indent : void 0) || '  ';
-      newline = (options != null ? options.newline : void 0) || '\n';
-      level || (level = 0);
-      space = new Array(level + 1).join(indent);
-      r = '';
-      if (pretty) {
-        r += space;
-      }
-      r += '<?';
-      r += this.target;
-      if (this.value) {
-        r += ' ' + this.value;
-      }
-      r += '?>';
-      if (pretty) {
-        r += newline;
-      }
-      return r;
-    };
-
-    return XMLProcessingInstruction;
-
-  })();
-
-}).call(this);
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/lib/XMLRaw.js b/bin/node_modules/plist/node_modules/xmlbuilder/lib/XMLRaw.js
deleted file mode 100644
index 9761c42..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/lib/XMLRaw.js
+++ /dev/null
@@ -1,48 +0,0 @@
-// Generated by CoffeeScript 1.6.3
-(function() {
-  var XMLNode, XMLRaw, _,
-    __hasProp = {}.hasOwnProperty,
-    __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
-
-  _ = require('lodash-node');
-
-  XMLNode = require('./XMLNode');
-
-  module.exports = XMLRaw = (function(_super) {
-    __extends(XMLRaw, _super);
-
-    function XMLRaw(parent, text) {
-      XMLRaw.__super__.constructor.call(this, parent);
-      if (text == null) {
-        throw new Error("Missing raw text");
-      }
-      this.value = this.stringify.raw(text);
-    }
-
-    XMLRaw.prototype.clone = function() {
-      return _.create(XMLRaw.prototype, this);
-    };
-
-    XMLRaw.prototype.toString = function(options, level) {
-      var indent, newline, pretty, r, space;
-      pretty = (options != null ? options.pretty : void 0) || false;
-      indent = (options != null ? options.indent : void 0) || '  ';
-      newline = (options != null ? options.newline : void 0) || '\n';
-      level || (level = 0);
-      space = new Array(level + 1).join(indent);
-      r = '';
-      if (pretty) {
-        r += space;
-      }
-      r += this.value;
-      if (pretty) {
-        r += newline;
-      }
-      return r;
-    };
-
-    return XMLRaw;
-
-  })(XMLNode);
-
-}).call(this);
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/lib/XMLStringifier.js b/bin/node_modules/plist/node_modules/xmlbuilder/lib/XMLStringifier.js
deleted file mode 100644
index 460b626..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/lib/XMLStringifier.js
+++ /dev/null
@@ -1,163 +0,0 @@
-// Generated by CoffeeScript 1.6.3
-(function() {
-  var XMLStringifier,
-    __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },
-    __hasProp = {}.hasOwnProperty;
-
-  module.exports = XMLStringifier = (function() {
-    function XMLStringifier(options) {
-      this.assertLegalChar = __bind(this.assertLegalChar, this);
-      var key, value, _ref;
-      this.allowSurrogateChars = options != null ? options.allowSurrogateChars : void 0;
-      _ref = (options != null ? options.stringify : void 0) || {};
-      for (key in _ref) {
-        if (!__hasProp.call(_ref, key)) continue;
-        value = _ref[key];
-        this[key] = value;
-      }
-    }
-
-    XMLStringifier.prototype.eleName = function(val) {
-      val = '' + val || '';
-      return this.assertLegalChar(val);
-    };
-
-    XMLStringifier.prototype.eleText = function(val) {
-      val = '' + val || '';
-      return this.assertLegalChar(this.escape(val));
-    };
-
-    XMLStringifier.prototype.cdata = function(val) {
-      val = '' + val || '';
-      if (val.match(/]]>/)) {
-        throw new Error("Invalid CDATA text: " + val);
-      }
-      return this.assertLegalChar(val);
-    };
-
-    XMLStringifier.prototype.comment = function(val) {
-      val = '' + val || '';
-      if (val.match(/--/)) {
-        throw new Error("Comment text cannot contain double-hypen: " + val);
-      }
-      return this.assertLegalChar(this.escape(val));
-    };
-
-    XMLStringifier.prototype.raw = function(val) {
-      return '' + val || '';
-    };
-
-    XMLStringifier.prototype.attName = function(val) {
-      return '' + val || '';
-    };
-
-    XMLStringifier.prototype.attValue = function(val) {
-      val = '' + val || '';
-      return this.escape(val);
-    };
-
-    XMLStringifier.prototype.insTarget = function(val) {
-      return '' + val || '';
-    };
-
-    XMLStringifier.prototype.insValue = function(val) {
-      val = '' + val || '';
-      if (val.match(/\?>/)) {
-        throw new Error("Invalid processing instruction value: " + val);
-      }
-      return val;
-    };
-
-    XMLStringifier.prototype.xmlVersion = function(val) {
-      val = '' + val || '';
-      if (!val.match(/1\.[0-9]+/)) {
-        throw new Error("Invalid version number: " + val);
-      }
-      return val;
-    };
-
-    XMLStringifier.prototype.xmlEncoding = function(val) {
-      val = '' + val || '';
-      if (!val.match(/[A-Za-z](?:[A-Za-z0-9._-]|-)*/)) {
-        throw new Error("Invalid encoding: " + options.val);
-      }
-      return val;
-    };
-
-    XMLStringifier.prototype.xmlStandalone = function(val) {
-      if (val) {
-        return "yes";
-      } else {
-        return "no";
-      }
-    };
-
-    XMLStringifier.prototype.dtdPubID = function(val) {
-      return '' + val || '';
-    };
-
-    XMLStringifier.prototype.dtdSysID = function(val) {
-      return '' + val || '';
-    };
-
-    XMLStringifier.prototype.dtdElementValue = function(val) {
-      return '' + val || '';
-    };
-
-    XMLStringifier.prototype.dtdAttType = function(val) {
-      return '' + val || '';
-    };
-
-    XMLStringifier.prototype.dtdAttDefault = function(val) {
-      if (val != null) {
-        return '' + val || '';
-      } else {
-        return val;
-      }
-    };
-
-    XMLStringifier.prototype.dtdEntityValue = function(val) {
-      return '' + val || '';
-    };
-
-    XMLStringifier.prototype.dtdNData = function(val) {
-      return '' + val || '';
-    };
-
-    XMLStringifier.prototype.convertAttKey = '@';
-
-    XMLStringifier.prototype.convertPIKey = '?';
-
-    XMLStringifier.prototype.convertTextKey = '#text';
-
-    XMLStringifier.prototype.convertCDataKey = '#cdata';
-
-    XMLStringifier.prototype.convertCommentKey = '#comment';
-
-    XMLStringifier.prototype.convertRawKey = '#raw';
-
-    XMLStringifier.prototype.convertListKey = '#list';
-
-    XMLStringifier.prototype.assertLegalChar = function(str) {
-      var chars, chr;
-      if (this.allowSurrogateChars) {
-        chars = /[\u0000-\u0008\u000B-\u000C\u000E-\u001F\uFFFE-\uFFFF]/;
-      } else {
-        chars = /[\u0000-\u0008\u000B-\u000C\u000E-\u001F\uD800-\uDFFF\uFFFE-\uFFFF]/;
-      }
-      chr = str.match(chars);
-      if (chr) {
-        throw new Error("Invalid character (" + chr + ") in string: " + str + " at index " + chr.index);
-      }
-      return str;
-    };
-
-    XMLStringifier.prototype.escape = function(str) {
-      return str.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/'/g, '&apos;').replace(/"/g, '&quot;');
-    };
-
-    return XMLStringifier;
-
-  })();
-
-}).call(this);
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/lib/XMLText.js b/bin/node_modules/plist/node_modules/xmlbuilder/lib/XMLText.js
deleted file mode 100644
index 9afe447..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/lib/XMLText.js
+++ /dev/null
@@ -1,49 +0,0 @@
-// Generated by CoffeeScript 1.6.3
-(function() {
-  var XMLNode, XMLText, _,
-    __hasProp = {}.hasOwnProperty,
-    __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
-
-  _ = require('lodash-node');
-
-  XMLNode = require('./XMLNode');
-
-  module.exports = XMLText = (function(_super) {
-    __extends(XMLText, _super);
-
-    function XMLText(parent, text) {
-      this.parent = parent;
-      XMLText.__super__.constructor.call(this, parent);
-      if (text == null) {
-        throw new Error("Missing element text");
-      }
-      this.value = this.stringify.eleText(text);
-    }
-
-    XMLText.prototype.clone = function() {
-      return _.create(XMLText.prototype, this);
-    };
-
-    XMLText.prototype.toString = function(options, level) {
-      var indent, newline, pretty, r, space;
-      pretty = (options != null ? options.pretty : void 0) || false;
-      indent = (options != null ? options.indent : void 0) || '  ';
-      newline = (options != null ? options.newline : void 0) || '\n';
-      level || (level = 0);
-      space = new Array(level + 1).join(indent);
-      r = '';
-      if (pretty) {
-        r += space;
-      }
-      r += this.value;
-      if (pretty) {
-        r += newline;
-      }
-      return r;
-    };
-
-    return XMLText;
-
-  })(XMLNode);
-
-}).call(this);
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/lib/index.js b/bin/node_modules/plist/node_modules/xmlbuilder/lib/index.js
deleted file mode 100644
index cd9ac48..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/lib/index.js
+++ /dev/null
@@ -1,14 +0,0 @@
-// Generated by CoffeeScript 1.6.3
-(function() {
-  var XMLBuilder, _;
-
-  _ = require('lodash-node');
-
-  XMLBuilder = require('./XMLBuilder');
-
-  module.exports.create = function(name, xmldec, doctype, options) {
-    options = _.extend({}, xmldec, doctype, options);
-    return new XMLBuilder(name, options).root();
-  };
-
-}).call(this);
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/LICENSE.txt b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/LICENSE.txt
deleted file mode 100644
index 49869bb..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/LICENSE.txt
+++ /dev/null
@@ -1,22 +0,0 @@
-Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
-Based on Underscore.js 1.5.2, copyright 2009-2013 Jeremy Ashkenas,
-DocumentCloud and Investigative Reporters & Editors <http://underscorejs.org/>
-
-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.
\ No newline at end of file
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/README.md b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/README.md
deleted file mode 100644
index 3bc410e..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/README.md
+++ /dev/null
@@ -1,44 +0,0 @@
-# lodash-node v2.4.1
-
-A collection of [Lo-Dash](http://lodash.com/) methods as [Node.js](http://nodejs.org/) modules generated by [lodash-cli](https://npmjs.org/package/lodash-cli).
-
-## Installation & usage
-
-Using [`npm`](http://npmjs.org/):
-
-```bash
-npm i --save lodash-node
-
-{sudo} npm i -g lodash-node
-npm ln lodash-node
-```
-
-In Node.js:
-
-```js
-var _ = require('lodash-node');
-
-// or as Underscore
-var _ = require('lodash-node/underscore');
-
-// or by method category
-var collections = require('lodash-node/modern/collections');
-
-// or individual methods
-var isEqual = require('lodash-node/modern/objects/isEqual');
-var findWhere = require('lodash-node/underscore/collections/findWhere');
-```
-
-## Author
-
-| [![twitter/jdalton](http://gravatar.com/avatar/299a3d891ff1920b69c364d061007043?s=70)](https://twitter.com/jdalton "Follow @jdalton on Twitter") |
-|---|
-| [John-David Dalton](http://allyoucanleet.com/) |
-
-## Contributors
-
-| [![twitter/blainebublitz](http://gravatar.com/avatar/ac1c67fd906c9fecd823ce302283b4c1?s=70)](https://twitter.com/blainebublitz "Follow @BlaineBublitz on Twitter") | [![twitter/kitcambridge](http://gravatar.com/avatar/6662a1d02f351b5ef2f8b4d815804661?s=70)](https://twitter.com/kitcambridge "Follow @kitcambridge on Twitter") | [![twitter/mathias](http://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](https://twitter.com/mathias "Follow @mathias on Twitter") |
-|---|---|---|
-| [Blaine Bublitz](http://www.iceddev.com/) | [Kit Cambridge](http://kitcambridge.be/) | [Mathias Bynens](http://mathiasbynens.be/) |
-
-[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/lodash/lodash-node/trend.png)](https://bitdeli.com/free "Bitdeli Badge")
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/arrays.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/arrays.js
deleted file mode 100644
index 86f6dcf..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/arrays.js
+++ /dev/null
@@ -1,40 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-module.exports = {
-  'compact': require('./arrays/compact'),
-  'difference': require('./arrays/difference'),
-  'drop': require('./arrays/rest'),
-  'findIndex': require('./arrays/findIndex'),
-  'findLastIndex': require('./arrays/findLastIndex'),
-  'first': require('./arrays/first'),
-  'flatten': require('./arrays/flatten'),
-  'head': require('./arrays/first'),
-  'indexOf': require('./arrays/indexOf'),
-  'initial': require('./arrays/initial'),
-  'intersection': require('./arrays/intersection'),
-  'last': require('./arrays/last'),
-  'lastIndexOf': require('./arrays/lastIndexOf'),
-  'object': require('./arrays/zipObject'),
-  'pull': require('./arrays/pull'),
-  'range': require('./arrays/range'),
-  'remove': require('./arrays/remove'),
-  'rest': require('./arrays/rest'),
-  'sortedIndex': require('./arrays/sortedIndex'),
-  'tail': require('./arrays/rest'),
-  'take': require('./arrays/first'),
-  'union': require('./arrays/union'),
-  'uniq': require('./arrays/uniq'),
-  'unique': require('./arrays/uniq'),
-  'unzip': require('./arrays/zip'),
-  'without': require('./arrays/without'),
-  'xor': require('./arrays/xor'),
-  'zip': require('./arrays/zip'),
-  'zipObject': require('./arrays/zipObject')
-};
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/arrays/compact.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/arrays/compact.js
deleted file mode 100644
index f52dc22..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/arrays/compact.js
+++ /dev/null
@@ -1,38 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * Creates an array with all falsey values removed. The values `false`, `null`,
- * `0`, `""`, `undefined`, and `NaN` are all falsey.
- *
- * @static
- * @memberOf _
- * @category Arrays
- * @param {Array} array The array to compact.
- * @returns {Array} Returns a new array of filtered values.
- * @example
- *
- * _.compact([0, 1, false, 2, '', 3]);
- * // => [1, 2, 3]
- */
-function compact(array) {
-  var index = -1,
-      length = array ? array.length : 0,
-      result = [];
-
-  while (++index < length) {
-    var value = array[index];
-    if (value) {
-      result.push(value);
-    }
-  }
-  return result;
-}
-
-module.exports = compact;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/arrays/difference.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/arrays/difference.js
deleted file mode 100644
index f646752..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/arrays/difference.js
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseDifference = require('../internals/baseDifference'),
-    baseFlatten = require('../internals/baseFlatten');
-
-/**
- * Creates an array excluding all values of the provided arrays using strict
- * equality for comparisons, i.e. `===`.
- *
- * @static
- * @memberOf _
- * @category Arrays
- * @param {Array} array The array to process.
- * @param {...Array} [values] The arrays of values to exclude.
- * @returns {Array} Returns a new array of filtered values.
- * @example
- *
- * _.difference([1, 2, 3, 4, 5], [5, 2, 10]);
- * // => [1, 3, 4]
- */
-function difference(array) {
-  return baseDifference(array, baseFlatten(arguments, true, true, 1));
-}
-
-module.exports = difference;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/arrays/findIndex.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/arrays/findIndex.js
deleted file mode 100644
index cabf7c0..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/arrays/findIndex.js
+++ /dev/null
@@ -1,65 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback');
-
-/**
- * This method is like `_.find` except that it returns the index of the first
- * element that passes the callback check, instead of the element itself.
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @category Arrays
- * @param {Array} array The array to search.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {number} Returns the index of the found element, else `-1`.
- * @example
- *
- * var characters = [
- *   { 'name': 'barney',  'age': 36, 'blocked': false },
- *   { 'name': 'fred',    'age': 40, 'blocked': true },
- *   { 'name': 'pebbles', 'age': 1,  'blocked': false }
- * ];
- *
- * _.findIndex(characters, function(chr) {
- *   return chr.age < 20;
- * });
- * // => 2
- *
- * // using "_.where" callback shorthand
- * _.findIndex(characters, { 'age': 36 });
- * // => 0
- *
- * // using "_.pluck" callback shorthand
- * _.findIndex(characters, 'blocked');
- * // => 1
- */
-function findIndex(array, callback, thisArg) {
-  var index = -1,
-      length = array ? array.length : 0;
-
-  callback = createCallback(callback, thisArg, 3);
-  while (++index < length) {
-    if (callback(array[index], index, array)) {
-      return index;
-    }
-  }
-  return -1;
-}
-
-module.exports = findIndex;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/arrays/findLastIndex.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/arrays/findLastIndex.js
deleted file mode 100644
index 2a74e31..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/arrays/findLastIndex.js
+++ /dev/null
@@ -1,63 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback');
-
-/**
- * This method is like `_.findIndex` except that it iterates over elements
- * of a `collection` from right to left.
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @category Arrays
- * @param {Array} array The array to search.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {number} Returns the index of the found element, else `-1`.
- * @example
- *
- * var characters = [
- *   { 'name': 'barney',  'age': 36, 'blocked': true },
- *   { 'name': 'fred',    'age': 40, 'blocked': false },
- *   { 'name': 'pebbles', 'age': 1,  'blocked': true }
- * ];
- *
- * _.findLastIndex(characters, function(chr) {
- *   return chr.age > 30;
- * });
- * // => 1
- *
- * // using "_.where" callback shorthand
- * _.findLastIndex(characters, { 'age': 36 });
- * // => 0
- *
- * // using "_.pluck" callback shorthand
- * _.findLastIndex(characters, 'blocked');
- * // => 2
- */
-function findLastIndex(array, callback, thisArg) {
-  var length = array ? array.length : 0;
-  callback = createCallback(callback, thisArg, 3);
-  while (length--) {
-    if (callback(array[length], length, array)) {
-      return length;
-    }
-  }
-  return -1;
-}
-
-module.exports = findLastIndex;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/arrays/first.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/arrays/first.js
deleted file mode 100644
index c4b1c38..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/arrays/first.js
+++ /dev/null
@@ -1,86 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback'),
-    slice = require('../internals/slice');
-
-/* Native method shortcuts for methods with the same name as other `lodash` methods */
-var nativeMax = Math.max,
-    nativeMin = Math.min;
-
-/**
- * Gets the first element or first `n` elements of an array. If a callback
- * is provided elements at the beginning of the array are returned as long
- * as the callback returns truey. The callback is bound to `thisArg` and
- * invoked with three arguments; (value, index, array).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @alias head, take
- * @category Arrays
- * @param {Array} array The array to query.
- * @param {Function|Object|number|string} [callback] The function called
- *  per element or the number of elements to return. If a property name or
- *  object is provided it will be used to create a "_.pluck" or "_.where"
- *  style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {*} Returns the first element(s) of `array`.
- * @example
- *
- * _.first([1, 2, 3]);
- * // => 1
- *
- * _.first([1, 2, 3], 2);
- * // => [1, 2]
- *
- * _.first([1, 2, 3], function(num) {
- *   return num < 3;
- * });
- * // => [1, 2]
- *
- * var characters = [
- *   { 'name': 'barney',  'blocked': true,  'employer': 'slate' },
- *   { 'name': 'fred',    'blocked': false, 'employer': 'slate' },
- *   { 'name': 'pebbles', 'blocked': true,  'employer': 'na' }
- * ];
- *
- * // using "_.pluck" callback shorthand
- * _.first(characters, 'blocked');
- * // => [{ 'name': 'barney', 'blocked': true, 'employer': 'slate' }]
- *
- * // using "_.where" callback shorthand
- * _.pluck(_.first(characters, { 'employer': 'slate' }), 'name');
- * // => ['barney', 'fred']
- */
-function first(array, callback, thisArg) {
-  var n = 0,
-      length = array ? array.length : 0;
-
-  if (typeof callback != 'number' && callback != null) {
-    var index = -1;
-    callback = createCallback(callback, thisArg, 3);
-    while (++index < length && callback(array[index], index, array)) {
-      n++;
-    }
-  } else {
-    n = callback;
-    if (n == null || thisArg) {
-      return array ? array[0] : undefined;
-    }
-  }
-  return slice(array, 0, nativeMin(nativeMax(0, n), length));
-}
-
-module.exports = first;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/arrays/flatten.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/arrays/flatten.js
deleted file mode 100644
index 54dc494..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/arrays/flatten.js
+++ /dev/null
@@ -1,66 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseFlatten = require('../internals/baseFlatten'),
-    map = require('../collections/map');
-
-/**
- * Flattens a nested array (the nesting can be to any depth). If `isShallow`
- * is truey, the array will only be flattened a single level. If a callback
- * is provided each element of the array is passed through the callback before
- * flattening. The callback is bound to `thisArg` and invoked with three
- * arguments; (value, index, array).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @category Arrays
- * @param {Array} array The array to flatten.
- * @param {boolean} [isShallow=false] A flag to restrict flattening to a single level.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Array} Returns a new flattened array.
- * @example
- *
- * _.flatten([1, [2], [3, [[4]]]]);
- * // => [1, 2, 3, 4];
- *
- * _.flatten([1, [2], [3, [[4]]]], true);
- * // => [1, 2, 3, [[4]]];
- *
- * var characters = [
- *   { 'name': 'barney', 'age': 30, 'pets': ['hoppy'] },
- *   { 'name': 'fred',   'age': 40, 'pets': ['baby puss', 'dino'] }
- * ];
- *
- * // using "_.pluck" callback shorthand
- * _.flatten(characters, 'pets');
- * // => ['hoppy', 'baby puss', 'dino']
- */
-function flatten(array, isShallow, callback, thisArg) {
-  // juggle arguments
-  if (typeof isShallow != 'boolean' && isShallow != null) {
-    thisArg = callback;
-    callback = (typeof isShallow != 'function' && thisArg && thisArg[isShallow] === array) ? null : isShallow;
-    isShallow = false;
-  }
-  if (callback != null) {
-    array = map(array, callback, thisArg);
-  }
-  return baseFlatten(array, isShallow);
-}
-
-module.exports = flatten;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/arrays/indexOf.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/arrays/indexOf.js
deleted file mode 100644
index 19238b5..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/arrays/indexOf.js
+++ /dev/null
@@ -1,50 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseIndexOf = require('../internals/baseIndexOf'),
-    sortedIndex = require('./sortedIndex');
-
-/* Native method shortcuts for methods with the same name as other `lodash` methods */
-var nativeMax = Math.max;
-
-/**
- * Gets the index at which the first occurrence of `value` is found using
- * strict equality for comparisons, i.e. `===`. If the array is already sorted
- * providing `true` for `fromIndex` will run a faster binary search.
- *
- * @static
- * @memberOf _
- * @category Arrays
- * @param {Array} array The array to search.
- * @param {*} value The value to search for.
- * @param {boolean|number} [fromIndex=0] The index to search from or `true`
- *  to perform a binary search on a sorted array.
- * @returns {number} Returns the index of the matched value or `-1`.
- * @example
- *
- * _.indexOf([1, 2, 3, 1, 2, 3], 2);
- * // => 1
- *
- * _.indexOf([1, 2, 3, 1, 2, 3], 2, 3);
- * // => 4
- *
- * _.indexOf([1, 1, 2, 2, 3, 3], 2, true);
- * // => 2
- */
-function indexOf(array, value, fromIndex) {
-  if (typeof fromIndex == 'number') {
-    var length = array ? array.length : 0;
-    fromIndex = (fromIndex < 0 ? nativeMax(0, length + fromIndex) : fromIndex || 0);
-  } else if (fromIndex) {
-    var index = sortedIndex(array, value);
-    return array[index] === value ? index : -1;
-  }
-  return baseIndexOf(array, value, fromIndex);
-}
-
-module.exports = indexOf;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/arrays/initial.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/arrays/initial.js
deleted file mode 100644
index 77ea68b..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/arrays/initial.js
+++ /dev/null
@@ -1,82 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback'),
-    slice = require('../internals/slice');
-
-/* Native method shortcuts for methods with the same name as other `lodash` methods */
-var nativeMax = Math.max,
-    nativeMin = Math.min;
-
-/**
- * Gets all but the last element or last `n` elements of an array. If a
- * callback is provided elements at the end of the array are excluded from
- * the result as long as the callback returns truey. The callback is bound
- * to `thisArg` and invoked with three arguments; (value, index, array).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @category Arrays
- * @param {Array} array The array to query.
- * @param {Function|Object|number|string} [callback=1] The function called
- *  per element or the number of elements to exclude. If a property name or
- *  object is provided it will be used to create a "_.pluck" or "_.where"
- *  style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Array} Returns a slice of `array`.
- * @example
- *
- * _.initial([1, 2, 3]);
- * // => [1, 2]
- *
- * _.initial([1, 2, 3], 2);
- * // => [1]
- *
- * _.initial([1, 2, 3], function(num) {
- *   return num > 1;
- * });
- * // => [1]
- *
- * var characters = [
- *   { 'name': 'barney',  'blocked': false, 'employer': 'slate' },
- *   { 'name': 'fred',    'blocked': true,  'employer': 'slate' },
- *   { 'name': 'pebbles', 'blocked': true,  'employer': 'na' }
- * ];
- *
- * // using "_.pluck" callback shorthand
- * _.initial(characters, 'blocked');
- * // => [{ 'name': 'barney',  'blocked': false, 'employer': 'slate' }]
- *
- * // using "_.where" callback shorthand
- * _.pluck(_.initial(characters, { 'employer': 'na' }), 'name');
- * // => ['barney', 'fred']
- */
-function initial(array, callback, thisArg) {
-  var n = 0,
-      length = array ? array.length : 0;
-
-  if (typeof callback != 'number' && callback != null) {
-    var index = length;
-    callback = createCallback(callback, thisArg, 3);
-    while (index-- && callback(array[index], index, array)) {
-      n++;
-    }
-  } else {
-    n = (callback == null || thisArg) ? 1 : callback || n;
-  }
-  return slice(array, 0, nativeMin(nativeMax(0, length - n), length));
-}
-
-module.exports = initial;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/arrays/intersection.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/arrays/intersection.js
deleted file mode 100644
index fd7bf65..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/arrays/intersection.js
+++ /dev/null
@@ -1,83 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseIndexOf = require('../internals/baseIndexOf'),
-    cacheIndexOf = require('../internals/cacheIndexOf'),
-    createCache = require('../internals/createCache'),
-    getArray = require('../internals/getArray'),
-    isArguments = require('../objects/isArguments'),
-    isArray = require('../objects/isArray'),
-    largeArraySize = require('../internals/largeArraySize'),
-    releaseArray = require('../internals/releaseArray'),
-    releaseObject = require('../internals/releaseObject');
-
-/**
- * Creates an array of unique values present in all provided arrays using
- * strict equality for comparisons, i.e. `===`.
- *
- * @static
- * @memberOf _
- * @category Arrays
- * @param {...Array} [array] The arrays to inspect.
- * @returns {Array} Returns an array of shared values.
- * @example
- *
- * _.intersection([1, 2, 3], [5, 2, 1, 4], [2, 1]);
- * // => [1, 2]
- */
-function intersection() {
-  var args = [],
-      argsIndex = -1,
-      argsLength = arguments.length,
-      caches = getArray(),
-      indexOf = baseIndexOf,
-      trustIndexOf = indexOf === baseIndexOf,
-      seen = getArray();
-
-  while (++argsIndex < argsLength) {
-    var value = arguments[argsIndex];
-    if (isArray(value) || isArguments(value)) {
-      args.push(value);
-      caches.push(trustIndexOf && value.length >= largeArraySize &&
-        createCache(argsIndex ? args[argsIndex] : seen));
-    }
-  }
-  var array = args[0],
-      index = -1,
-      length = array ? array.length : 0,
-      result = [];
-
-  outer:
-  while (++index < length) {
-    var cache = caches[0];
-    value = array[index];
-
-    if ((cache ? cacheIndexOf(cache, value) : indexOf(seen, value)) < 0) {
-      argsIndex = argsLength;
-      (cache || seen).push(value);
-      while (--argsIndex) {
-        cache = caches[argsIndex];
-        if ((cache ? cacheIndexOf(cache, value) : indexOf(args[argsIndex], value)) < 0) {
-          continue outer;
-        }
-      }
-      result.push(value);
-    }
-  }
-  while (argsLength--) {
-    cache = caches[argsLength];
-    if (cache) {
-      releaseObject(cache);
-    }
-  }
-  releaseArray(caches);
-  releaseArray(seen);
-  return result;
-}
-
-module.exports = intersection;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/arrays/last.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/arrays/last.js
deleted file mode 100644
index b54f370..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/arrays/last.js
+++ /dev/null
@@ -1,84 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback'),
-    slice = require('../internals/slice');
-
-/* Native method shortcuts for methods with the same name as other `lodash` methods */
-var nativeMax = Math.max;
-
-/**
- * Gets the last element or last `n` elements of an array. If a callback is
- * provided elements at the end of the array are returned as long as the
- * callback returns truey. The callback is bound to `thisArg` and invoked
- * with three arguments; (value, index, array).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @category Arrays
- * @param {Array} array The array to query.
- * @param {Function|Object|number|string} [callback] The function called
- *  per element or the number of elements to return. If a property name or
- *  object is provided it will be used to create a "_.pluck" or "_.where"
- *  style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {*} Returns the last element(s) of `array`.
- * @example
- *
- * _.last([1, 2, 3]);
- * // => 3
- *
- * _.last([1, 2, 3], 2);
- * // => [2, 3]
- *
- * _.last([1, 2, 3], function(num) {
- *   return num > 1;
- * });
- * // => [2, 3]
- *
- * var characters = [
- *   { 'name': 'barney',  'blocked': false, 'employer': 'slate' },
- *   { 'name': 'fred',    'blocked': true,  'employer': 'slate' },
- *   { 'name': 'pebbles', 'blocked': true,  'employer': 'na' }
- * ];
- *
- * // using "_.pluck" callback shorthand
- * _.pluck(_.last(characters, 'blocked'), 'name');
- * // => ['fred', 'pebbles']
- *
- * // using "_.where" callback shorthand
- * _.last(characters, { 'employer': 'na' });
- * // => [{ 'name': 'pebbles', 'blocked': true, 'employer': 'na' }]
- */
-function last(array, callback, thisArg) {
-  var n = 0,
-      length = array ? array.length : 0;
-
-  if (typeof callback != 'number' && callback != null) {
-    var index = length;
-    callback = createCallback(callback, thisArg, 3);
-    while (index-- && callback(array[index], index, array)) {
-      n++;
-    }
-  } else {
-    n = callback;
-    if (n == null || thisArg) {
-      return array ? array[length - 1] : undefined;
-    }
-  }
-  return slice(array, nativeMax(0, length - n));
-}
-
-module.exports = last;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/arrays/lastIndexOf.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/arrays/lastIndexOf.js
deleted file mode 100644
index c7b8817..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/arrays/lastIndexOf.js
+++ /dev/null
@@ -1,54 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/* Native method shortcuts for methods with the same name as other `lodash` methods */
-var nativeMax = Math.max,
-    nativeMin = Math.min;
-
-/**
- * Gets the index at which the last occurrence of `value` is found using strict
- * equality for comparisons, i.e. `===`. If `fromIndex` is negative, it is used
- * as the offset from the end of the collection.
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @category Arrays
- * @param {Array} array The array to search.
- * @param {*} value The value to search for.
- * @param {number} [fromIndex=array.length-1] The index to search from.
- * @returns {number} Returns the index of the matched value or `-1`.
- * @example
- *
- * _.lastIndexOf([1, 2, 3, 1, 2, 3], 2);
- * // => 4
- *
- * _.lastIndexOf([1, 2, 3, 1, 2, 3], 2, 3);
- * // => 1
- */
-function lastIndexOf(array, value, fromIndex) {
-  var index = array ? array.length : 0;
-  if (typeof fromIndex == 'number') {
-    index = (fromIndex < 0 ? nativeMax(0, index + fromIndex) : nativeMin(fromIndex, index - 1)) + 1;
-  }
-  while (index--) {
-    if (array[index] === value) {
-      return index;
-    }
-  }
-  return -1;
-}
-
-module.exports = lastIndexOf;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/arrays/pull.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/arrays/pull.js
deleted file mode 100644
index d7f60d0..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/arrays/pull.js
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * Used for `Array` method references.
- *
- * Normally `Array.prototype` would suffice, however, using an array literal
- * avoids issues in Narwhal.
- */
-var arrayRef = [];
-
-/** Native method shortcuts */
-var splice = arrayRef.splice;
-
-/**
- * Removes all provided values from the given array using strict equality for
- * comparisons, i.e. `===`.
- *
- * @static
- * @memberOf _
- * @category Arrays
- * @param {Array} array The array to modify.
- * @param {...*} [value] The values to remove.
- * @returns {Array} Returns `array`.
- * @example
- *
- * var array = [1, 2, 3, 1, 2, 3];
- * _.pull(array, 2, 3);
- * console.log(array);
- * // => [1, 1]
- */
-function pull(array) {
-  var args = arguments,
-      argsIndex = 0,
-      argsLength = args.length,
-      length = array ? array.length : 0;
-
-  while (++argsIndex < argsLength) {
-    var index = -1,
-        value = args[argsIndex];
-    while (++index < length) {
-      if (array[index] === value) {
-        splice.call(array, index--, 1);
-        length--;
-      }
-    }
-  }
-  return array;
-}
-
-module.exports = pull;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/arrays/range.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/arrays/range.js
deleted file mode 100644
index 5ea7f49..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/arrays/range.js
+++ /dev/null
@@ -1,69 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** Native method shortcuts */
-var ceil = Math.ceil;
-
-/* Native method shortcuts for methods with the same name as other `lodash` methods */
-var nativeMax = Math.max;
-
-/**
- * Creates an array of numbers (positive and/or negative) progressing from
- * `start` up to but not including `end`. If `start` is less than `stop` a
- * zero-length range is created unless a negative `step` is specified.
- *
- * @static
- * @memberOf _
- * @category Arrays
- * @param {number} [start=0] The start of the range.
- * @param {number} end The end of the range.
- * @param {number} [step=1] The value to increment or decrement by.
- * @returns {Array} Returns a new range array.
- * @example
- *
- * _.range(4);
- * // => [0, 1, 2, 3]
- *
- * _.range(1, 5);
- * // => [1, 2, 3, 4]
- *
- * _.range(0, 20, 5);
- * // => [0, 5, 10, 15]
- *
- * _.range(0, -4, -1);
- * // => [0, -1, -2, -3]
- *
- * _.range(1, 4, 0);
- * // => [1, 1, 1]
- *
- * _.range(0);
- * // => []
- */
-function range(start, end, step) {
-  start = +start || 0;
-  step = typeof step == 'number' ? step : (+step || 1);
-
-  if (end == null) {
-    end = start;
-    start = 0;
-  }
-  // use `Array(length)` so engines like Chakra and V8 avoid slower modes
-  // http://youtu.be/XAqIpGU8ZZk#t=17m25s
-  var index = -1,
-      length = nativeMax(0, ceil((end - start) / (step || 1))),
-      result = Array(length);
-
-  while (++index < length) {
-    result[index] = start;
-    start += step;
-  }
-  return result;
-}
-
-module.exports = range;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/arrays/remove.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/arrays/remove.js
deleted file mode 100644
index 7c0f8f0..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/arrays/remove.js
+++ /dev/null
@@ -1,71 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback');
-
-/**
- * Used for `Array` method references.
- *
- * Normally `Array.prototype` would suffice, however, using an array literal
- * avoids issues in Narwhal.
- */
-var arrayRef = [];
-
-/** Native method shortcuts */
-var splice = arrayRef.splice;
-
-/**
- * Removes all elements from an array that the callback returns truey for
- * and returns an array of removed elements. The callback is bound to `thisArg`
- * and invoked with three arguments; (value, index, array).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @category Arrays
- * @param {Array} array The array to modify.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Array} Returns a new array of removed elements.
- * @example
- *
- * var array = [1, 2, 3, 4, 5, 6];
- * var evens = _.remove(array, function(num) { return num % 2 == 0; });
- *
- * console.log(array);
- * // => [1, 3, 5]
- *
- * console.log(evens);
- * // => [2, 4, 6]
- */
-function remove(array, callback, thisArg) {
-  var index = -1,
-      length = array ? array.length : 0,
-      result = [];
-
-  callback = createCallback(callback, thisArg, 3);
-  while (++index < length) {
-    var value = array[index];
-    if (callback(value, index, array)) {
-      result.push(value);
-      splice.call(array, index--, 1);
-      length--;
-    }
-  }
-  return result;
-}
-
-module.exports = remove;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/arrays/rest.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/arrays/rest.js
deleted file mode 100644
index d778fb6..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/arrays/rest.js
+++ /dev/null
@@ -1,83 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback'),
-    slice = require('../internals/slice');
-
-/* Native method shortcuts for methods with the same name as other `lodash` methods */
-var nativeMax = Math.max;
-
-/**
- * The opposite of `_.initial` this method gets all but the first element or
- * first `n` elements of an array. If a callback function is provided elements
- * at the beginning of the array are excluded from the result as long as the
- * callback returns truey. The callback is bound to `thisArg` and invoked
- * with three arguments; (value, index, array).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @alias drop, tail
- * @category Arrays
- * @param {Array} array The array to query.
- * @param {Function|Object|number|string} [callback=1] The function called
- *  per element or the number of elements to exclude. If a property name or
- *  object is provided it will be used to create a "_.pluck" or "_.where"
- *  style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Array} Returns a slice of `array`.
- * @example
- *
- * _.rest([1, 2, 3]);
- * // => [2, 3]
- *
- * _.rest([1, 2, 3], 2);
- * // => [3]
- *
- * _.rest([1, 2, 3], function(num) {
- *   return num < 3;
- * });
- * // => [3]
- *
- * var characters = [
- *   { 'name': 'barney',  'blocked': true,  'employer': 'slate' },
- *   { 'name': 'fred',    'blocked': false,  'employer': 'slate' },
- *   { 'name': 'pebbles', 'blocked': true, 'employer': 'na' }
- * ];
- *
- * // using "_.pluck" callback shorthand
- * _.pluck(_.rest(characters, 'blocked'), 'name');
- * // => ['fred', 'pebbles']
- *
- * // using "_.where" callback shorthand
- * _.rest(characters, { 'employer': 'slate' });
- * // => [{ 'name': 'pebbles', 'blocked': true, 'employer': 'na' }]
- */
-function rest(array, callback, thisArg) {
-  if (typeof callback != 'number' && callback != null) {
-    var n = 0,
-        index = -1,
-        length = array ? array.length : 0;
-
-    callback = createCallback(callback, thisArg, 3);
-    while (++index < length && callback(array[index], index, array)) {
-      n++;
-    }
-  } else {
-    n = (callback == null || thisArg) ? 1 : nativeMax(0, callback);
-  }
-  return slice(array, n);
-}
-
-module.exports = rest;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/arrays/sortedIndex.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/arrays/sortedIndex.js
deleted file mode 100644
index 1bcb5b5..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/arrays/sortedIndex.js
+++ /dev/null
@@ -1,77 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback'),
-    identity = require('../utilities/identity');
-
-/**
- * Uses a binary search to determine the smallest index at which a value
- * should be inserted into a given sorted array in order to maintain the sort
- * order of the array. If a callback is provided it will be executed for
- * `value` and each element of `array` to compute their sort ranking. The
- * callback is bound to `thisArg` and invoked with one argument; (value).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @category Arrays
- * @param {Array} array The array to inspect.
- * @param {*} value The value to evaluate.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {number} Returns the index at which `value` should be inserted
- *  into `array`.
- * @example
- *
- * _.sortedIndex([20, 30, 50], 40);
- * // => 2
- *
- * // using "_.pluck" callback shorthand
- * _.sortedIndex([{ 'x': 20 }, { 'x': 30 }, { 'x': 50 }], { 'x': 40 }, 'x');
- * // => 2
- *
- * var dict = {
- *   'wordToNumber': { 'twenty': 20, 'thirty': 30, 'fourty': 40, 'fifty': 50 }
- * };
- *
- * _.sortedIndex(['twenty', 'thirty', 'fifty'], 'fourty', function(word) {
- *   return dict.wordToNumber[word];
- * });
- * // => 2
- *
- * _.sortedIndex(['twenty', 'thirty', 'fifty'], 'fourty', function(word) {
- *   return this.wordToNumber[word];
- * }, dict);
- * // => 2
- */
-function sortedIndex(array, value, callback, thisArg) {
-  var low = 0,
-      high = array ? array.length : low;
-
-  // explicitly reference `identity` for better inlining in Firefox
-  callback = callback ? createCallback(callback, thisArg, 1) : identity;
-  value = callback(value);
-
-  while (low < high) {
-    var mid = (low + high) >>> 1;
-    (callback(array[mid]) < value)
-      ? low = mid + 1
-      : high = mid;
-  }
-  return low;
-}
-
-module.exports = sortedIndex;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/arrays/union.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/arrays/union.js
deleted file mode 100644
index 854f7b1..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/arrays/union.js
+++ /dev/null
@@ -1,30 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseFlatten = require('../internals/baseFlatten'),
-    baseUniq = require('../internals/baseUniq');
-
-/**
- * Creates an array of unique values, in order, of the provided arrays using
- * strict equality for comparisons, i.e. `===`.
- *
- * @static
- * @memberOf _
- * @category Arrays
- * @param {...Array} [array] The arrays to inspect.
- * @returns {Array} Returns an array of combined values.
- * @example
- *
- * _.union([1, 2, 3], [5, 2, 1, 4], [2, 1]);
- * // => [1, 2, 3, 5, 4]
- */
-function union() {
-  return baseUniq(baseFlatten(arguments, true, true));
-}
-
-module.exports = union;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/arrays/uniq.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/arrays/uniq.js
deleted file mode 100644
index 50df292..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/arrays/uniq.js
+++ /dev/null
@@ -1,69 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseUniq = require('../internals/baseUniq'),
-    createCallback = require('../functions/createCallback');
-
-/**
- * Creates a duplicate-value-free version of an array using strict equality
- * for comparisons, i.e. `===`. If the array is sorted, providing
- * `true` for `isSorted` will use a faster algorithm. If a callback is provided
- * each element of `array` is passed through the callback before uniqueness
- * is computed. The callback is bound to `thisArg` and invoked with three
- * arguments; (value, index, array).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @alias unique
- * @category Arrays
- * @param {Array} array The array to process.
- * @param {boolean} [isSorted=false] A flag to indicate that `array` is sorted.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Array} Returns a duplicate-value-free array.
- * @example
- *
- * _.uniq([1, 2, 1, 3, 1]);
- * // => [1, 2, 3]
- *
- * _.uniq([1, 1, 2, 2, 3], true);
- * // => [1, 2, 3]
- *
- * _.uniq(['A', 'b', 'C', 'a', 'B', 'c'], function(letter) { return letter.toLowerCase(); });
- * // => ['A', 'b', 'C']
- *
- * _.uniq([1, 2.5, 3, 1.5, 2, 3.5], function(num) { return this.floor(num); }, Math);
- * // => [1, 2.5, 3]
- *
- * // using "_.pluck" callback shorthand
- * _.uniq([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');
- * // => [{ 'x': 1 }, { 'x': 2 }]
- */
-function uniq(array, isSorted, callback, thisArg) {
-  // juggle arguments
-  if (typeof isSorted != 'boolean' && isSorted != null) {
-    thisArg = callback;
-    callback = (typeof isSorted != 'function' && thisArg && thisArg[isSorted] === array) ? null : isSorted;
-    isSorted = false;
-  }
-  if (callback != null) {
-    callback = createCallback(callback, thisArg, 3);
-  }
-  return baseUniq(array, isSorted, callback);
-}
-
-module.exports = uniq;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/arrays/without.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/arrays/without.js
deleted file mode 100644
index 5fda56c..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/arrays/without.js
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseDifference = require('../internals/baseDifference'),
-    slice = require('../internals/slice');
-
-/**
- * Creates an array excluding all provided values using strict equality for
- * comparisons, i.e. `===`.
- *
- * @static
- * @memberOf _
- * @category Arrays
- * @param {Array} array The array to filter.
- * @param {...*} [value] The values to exclude.
- * @returns {Array} Returns a new array of filtered values.
- * @example
- *
- * _.without([1, 2, 1, 0, 3, 1, 4], 0, 1);
- * // => [2, 3, 4]
- */
-function without(array) {
-  return baseDifference(array, slice(arguments, 1));
-}
-
-module.exports = without;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/arrays/xor.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/arrays/xor.js
deleted file mode 100644
index 1a444a1..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/arrays/xor.js
+++ /dev/null
@@ -1,46 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseDifference = require('../internals/baseDifference'),
-    baseUniq = require('../internals/baseUniq'),
-    isArguments = require('../objects/isArguments'),
-    isArray = require('../objects/isArray');
-
-/**
- * Creates an array that is the symmetric difference of the provided arrays.
- * See http://en.wikipedia.org/wiki/Symmetric_difference.
- *
- * @static
- * @memberOf _
- * @category Arrays
- * @param {...Array} [array] The arrays to inspect.
- * @returns {Array} Returns an array of values.
- * @example
- *
- * _.xor([1, 2, 3], [5, 2, 1, 4]);
- * // => [3, 5, 4]
- *
- * _.xor([1, 2, 5], [2, 3, 5], [3, 4, 5]);
- * // => [1, 4, 5]
- */
-function xor() {
-  var index = -1,
-      length = arguments.length;
-
-  while (++index < length) {
-    var array = arguments[index];
-    if (isArray(array) || isArguments(array)) {
-      var result = result
-        ? baseUniq(baseDifference(result, array).concat(baseDifference(array, result)))
-        : array;
-    }
-  }
-  return result || [];
-}
-
-module.exports = xor;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/arrays/zip.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/arrays/zip.js
deleted file mode 100644
index 7d3d6e6..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/arrays/zip.js
+++ /dev/null
@@ -1,40 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var max = require('../collections/max'),
-    pluck = require('../collections/pluck');
-
-/**
- * Creates an array of grouped elements, the first of which contains the first
- * elements of the given arrays, the second of which contains the second
- * elements of the given arrays, and so on.
- *
- * @static
- * @memberOf _
- * @alias unzip
- * @category Arrays
- * @param {...Array} [array] Arrays to process.
- * @returns {Array} Returns a new array of grouped elements.
- * @example
- *
- * _.zip(['fred', 'barney'], [30, 40], [true, false]);
- * // => [['fred', 30, true], ['barney', 40, false]]
- */
-function zip() {
-  var array = arguments.length > 1 ? arguments : arguments[0],
-      index = -1,
-      length = array ? max(pluck(array, 'length')) : 0,
-      result = Array(length < 0 ? 0 : length);
-
-  while (++index < length) {
-    result[index] = pluck(array, index);
-  }
-  return result;
-}
-
-module.exports = zip;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/arrays/zipObject.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/arrays/zipObject.js
deleted file mode 100644
index 6f901ef..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/arrays/zipObject.js
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isArray = require('../objects/isArray');
-
-/**
- * Creates an object composed from arrays of `keys` and `values`. Provide
- * either a single two dimensional array, i.e. `[[key1, value1], [key2, value2]]`
- * or two arrays, one of `keys` and one of corresponding `values`.
- *
- * @static
- * @memberOf _
- * @alias object
- * @category Arrays
- * @param {Array} keys The array of keys.
- * @param {Array} [values=[]] The array of values.
- * @returns {Object} Returns an object composed of the given keys and
- *  corresponding values.
- * @example
- *
- * _.zipObject(['fred', 'barney'], [30, 40]);
- * // => { 'fred': 30, 'barney': 40 }
- */
-function zipObject(keys, values) {
-  var index = -1,
-      length = keys ? keys.length : 0,
-      result = {};
-
-  if (!values && length && !isArray(keys[0])) {
-    values = [];
-  }
-  while (++index < length) {
-    var key = keys[index];
-    if (values) {
-      result[key] = values[index];
-    } else if (key) {
-      result[key[0]] = key[1];
-    }
-  }
-  return result;
-}
-
-module.exports = zipObject;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/chaining.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/chaining.js
deleted file mode 100644
index 6cde453..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/chaining.js
+++ /dev/null
@@ -1,17 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-module.exports = {
-  'chain': require('./chaining/chain'),
-  'tap': require('./chaining/tap'),
-  'value': require('./chaining/wrapperValueOf'),
-  'wrapperChain': require('./chaining/wrapperChain'),
-  'wrapperToString': require('./chaining/wrapperToString'),
-  'wrapperValueOf': require('./chaining/wrapperValueOf')
-};
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/chaining/chain.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/chaining/chain.js
deleted file mode 100644
index d613c55..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/chaining/chain.js
+++ /dev/null
@@ -1,41 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var lodashWrapper = require('../internals/lodashWrapper');
-
-/**
- * Creates a `lodash` object that wraps the given value with explicit
- * method chaining enabled.
- *
- * @static
- * @memberOf _
- * @category Chaining
- * @param {*} value The value to wrap.
- * @returns {Object} Returns the wrapper object.
- * @example
- *
- * var characters = [
- *   { 'name': 'barney',  'age': 36 },
- *   { 'name': 'fred',    'age': 40 },
- *   { 'name': 'pebbles', 'age': 1 }
- * ];
- *
- * var youngest = _.chain(characters)
- *     .sortBy('age')
- *     .map(function(chr) { return chr.name + ' is ' + chr.age; })
- *     .first()
- *     .value();
- * // => 'pebbles is 1'
- */
-function chain(value) {
-  value = new lodashWrapper(value);
-  value.__chain__ = true;
-  return value;
-}
-
-module.exports = chain;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/chaining/tap.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/chaining/tap.js
deleted file mode 100644
index 0be66d3..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/chaining/tap.js
+++ /dev/null
@@ -1,35 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * Invokes `interceptor` with the `value` as the first argument and then
- * returns `value`. The purpose of this method is to "tap into" a method
- * chain in order to perform operations on intermediate results within
- * the chain.
- *
- * @static
- * @memberOf _
- * @category Chaining
- * @param {*} value The value to provide to `interceptor`.
- * @param {Function} interceptor The function to invoke.
- * @returns {*} Returns `value`.
- * @example
- *
- * _([1, 2, 3, 4])
- *  .tap(function(array) { array.pop(); })
- *  .reverse()
- *  .value();
- * // => [3, 2, 1]
- */
-function tap(value, interceptor) {
-  interceptor(value);
-  return value;
-}
-
-module.exports = tap;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/chaining/wrapperChain.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/chaining/wrapperChain.js
deleted file mode 100644
index e6bf9a8..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/chaining/wrapperChain.js
+++ /dev/null
@@ -1,40 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * Enables explicit method chaining on the wrapper object.
- *
- * @name chain
- * @memberOf _
- * @category Chaining
- * @returns {*} Returns the wrapper object.
- * @example
- *
- * var characters = [
- *   { 'name': 'barney', 'age': 36 },
- *   { 'name': 'fred',   'age': 40 }
- * ];
- *
- * // without explicit chaining
- * _(characters).first();
- * // => { 'name': 'barney', 'age': 36 }
- *
- * // with explicit chaining
- * _(characters).chain()
- *   .first()
- *   .pick('age')
- *   .value();
- * // => { 'age': 36 }
- */
-function wrapperChain() {
-  this.__chain__ = true;
-  return this;
-}
-
-module.exports = wrapperChain;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/chaining/wrapperToString.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/chaining/wrapperToString.js
deleted file mode 100644
index 393d86d..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/chaining/wrapperToString.js
+++ /dev/null
@@ -1,26 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * Produces the `toString` result of the wrapped value.
- *
- * @name toString
- * @memberOf _
- * @category Chaining
- * @returns {string} Returns the string result.
- * @example
- *
- * _([1, 2, 3]).toString();
- * // => '1,2,3'
- */
-function wrapperToString() {
-  return String(this.__wrapped__);
-}
-
-module.exports = wrapperToString;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/chaining/wrapperValueOf.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/chaining/wrapperValueOf.js
deleted file mode 100644
index 96bd2f4..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/chaining/wrapperValueOf.js
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var support = require('../support');
-
-/**
- * Extracts the wrapped value.
- *
- * @name valueOf
- * @memberOf _
- * @alias value
- * @category Chaining
- * @returns {*} Returns the wrapped value.
- * @example
- *
- * _([1, 2, 3]).valueOf();
- * // => [1, 2, 3]
- */
-function wrapperValueOf() {
-  return this.__wrapped__;
-}
-
-module.exports = wrapperValueOf;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/collections.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/collections.js
deleted file mode 100644
index 5d2fc99..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/collections.js
+++ /dev/null
@@ -1,49 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-module.exports = {
-  'all': require('./collections/every'),
-  'any': require('./collections/some'),
-  'at': require('./collections/at'),
-  'collect': require('./collections/map'),
-  'contains': require('./collections/contains'),
-  'countBy': require('./collections/countBy'),
-  'detect': require('./collections/find'),
-  'each': require('./collections/forEach'),
-  'eachRight': require('./collections/forEachRight'),
-  'every': require('./collections/every'),
-  'filter': require('./collections/filter'),
-  'find': require('./collections/find'),
-  'findLast': require('./collections/findLast'),
-  'findWhere': require('./collections/find'),
-  'foldl': require('./collections/reduce'),
-  'foldr': require('./collections/reduceRight'),
-  'forEach': require('./collections/forEach'),
-  'forEachRight': require('./collections/forEachRight'),
-  'groupBy': require('./collections/groupBy'),
-  'include': require('./collections/contains'),
-  'indexBy': require('./collections/indexBy'),
-  'inject': require('./collections/reduce'),
-  'invoke': require('./collections/invoke'),
-  'map': require('./collections/map'),
-  'max': require('./collections/max'),
-  'min': require('./collections/min'),
-  'pluck': require('./collections/pluck'),
-  'reduce': require('./collections/reduce'),
-  'reduceRight': require('./collections/reduceRight'),
-  'reject': require('./collections/reject'),
-  'sample': require('./collections/sample'),
-  'select': require('./collections/filter'),
-  'shuffle': require('./collections/shuffle'),
-  'size': require('./collections/size'),
-  'some': require('./collections/some'),
-  'sortBy': require('./collections/sortBy'),
-  'toArray': require('./collections/toArray'),
-  'where': require('./collections/where')
-};
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/collections/at.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/collections/at.js
deleted file mode 100644
index a994bb7..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/collections/at.js
+++ /dev/null
@@ -1,50 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseFlatten = require('../internals/baseFlatten'),
-    isString = require('../objects/isString'),
-    support = require('../support');
-
-/**
- * Creates an array of elements from the specified indexes, or keys, of the
- * `collection`. Indexes may be specified as individual arguments or as arrays
- * of indexes.
- *
- * @static
- * @memberOf _
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {...(number|number[]|string|string[])} [index] The indexes of `collection`
- *   to retrieve, specified as individual indexes or arrays of indexes.
- * @returns {Array} Returns a new array of elements corresponding to the
- *  provided indexes.
- * @example
- *
- * _.at(['a', 'b', 'c', 'd', 'e'], [0, 2, 4]);
- * // => ['a', 'c', 'e']
- *
- * _.at(['fred', 'barney', 'pebbles'], 0, 2);
- * // => ['fred', 'pebbles']
- */
-function at(collection) {
-  var args = arguments,
-      index = -1,
-      props = baseFlatten(args, true, false, 1),
-      length = (args[2] && args[2][args[1]] === collection) ? 1 : props.length,
-      result = Array(length);
-
-  if (support.unindexedChars && isString(collection)) {
-    collection = collection.split('');
-  }
-  while(++index < length) {
-    result[index] = collection[props[index]];
-  }
-  return result;
-}
-
-module.exports = at;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/collections/contains.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/collections/contains.js
deleted file mode 100644
index 69e552d..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/collections/contains.js
+++ /dev/null
@@ -1,65 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseEach = require('../internals/baseEach'),
-    baseIndexOf = require('../internals/baseIndexOf'),
-    isArray = require('../objects/isArray'),
-    isString = require('../objects/isString');
-
-/* Native method shortcuts for methods with the same name as other `lodash` methods */
-var nativeMax = Math.max;
-
-/**
- * Checks if a given value is present in a collection using strict equality
- * for comparisons, i.e. `===`. If `fromIndex` is negative, it is used as the
- * offset from the end of the collection.
- *
- * @static
- * @memberOf _
- * @alias include
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {*} target The value to check for.
- * @param {number} [fromIndex=0] The index to search from.
- * @returns {boolean} Returns `true` if the `target` element is found, else `false`.
- * @example
- *
- * _.contains([1, 2, 3], 1);
- * // => true
- *
- * _.contains([1, 2, 3], 1, 2);
- * // => false
- *
- * _.contains({ 'name': 'fred', 'age': 40 }, 'fred');
- * // => true
- *
- * _.contains('pebbles', 'eb');
- * // => true
- */
-function contains(collection, target, fromIndex) {
-  var index = -1,
-      indexOf = baseIndexOf,
-      length = collection ? collection.length : 0,
-      result = false;
-
-  fromIndex = (fromIndex < 0 ? nativeMax(0, length + fromIndex) : fromIndex) || 0;
-  if (isArray(collection)) {
-    result = indexOf(collection, target, fromIndex) > -1;
-  } else if (typeof length == 'number') {
-    result = (isString(collection) ? collection.indexOf(target, fromIndex) : indexOf(collection, target, fromIndex)) > -1;
-  } else {
-    baseEach(collection, function(value) {
-      if (++index >= fromIndex) {
-        return !(result = value === target);
-      }
-    });
-  }
-  return result;
-}
-
-module.exports = contains;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/collections/countBy.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/collections/countBy.js
deleted file mode 100644
index ece9ece..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/collections/countBy.js
+++ /dev/null
@@ -1,55 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createAggregator = require('../internals/createAggregator');
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Native method shortcuts */
-var hasOwnProperty = objectProto.hasOwnProperty;
-
-/**
- * Creates an object composed of keys generated from the results of running
- * each element of `collection` through the callback. The corresponding value
- * of each key is the number of times the key was returned by the callback.
- * The callback is bound to `thisArg` and invoked with three arguments;
- * (value, index|key, collection).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Object} Returns the composed aggregate object.
- * @example
- *
- * _.countBy([4.3, 6.1, 6.4], function(num) { return Math.floor(num); });
- * // => { '4': 1, '6': 2 }
- *
- * _.countBy([4.3, 6.1, 6.4], function(num) { return this.floor(num); }, Math);
- * // => { '4': 1, '6': 2 }
- *
- * _.countBy(['one', 'two', 'three'], 'length');
- * // => { '3': 2, '5': 1 }
- */
-var countBy = createAggregator(function(result, value, key) {
-  (hasOwnProperty.call(result, key) ? result[key]++ : result[key] = 1);
-});
-
-module.exports = countBy;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/collections/every.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/collections/every.js
deleted file mode 100644
index 633489c..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/collections/every.js
+++ /dev/null
@@ -1,75 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseEach = require('../internals/baseEach'),
-    createCallback = require('../functions/createCallback'),
-    isArray = require('../objects/isArray');
-
-/**
- * Checks if the given callback returns truey value for **all** elements of
- * a collection. The callback is bound to `thisArg` and invoked with three
- * arguments; (value, index|key, collection).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @alias all
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {boolean} Returns `true` if all elements passed the callback check,
- *  else `false`.
- * @example
- *
- * _.every([true, 1, null, 'yes']);
- * // => false
- *
- * var characters = [
- *   { 'name': 'barney', 'age': 36 },
- *   { 'name': 'fred',   'age': 40 }
- * ];
- *
- * // using "_.pluck" callback shorthand
- * _.every(characters, 'age');
- * // => true
- *
- * // using "_.where" callback shorthand
- * _.every(characters, { 'age': 36 });
- * // => false
- */
-function every(collection, callback, thisArg) {
-  var result = true;
-  callback = createCallback(callback, thisArg, 3);
-
-  if (isArray(collection)) {
-    var index = -1,
-        length = collection.length;
-
-    while (++index < length) {
-      if (!(result = !!callback(collection[index], index, collection))) {
-        break;
-      }
-    }
-  } else {
-    baseEach(collection, function(value, index, collection) {
-      return (result = !!callback(value, index, collection));
-    });
-  }
-  return result;
-}
-
-module.exports = every;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/collections/filter.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/collections/filter.js
deleted file mode 100644
index 30c351e..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/collections/filter.js
+++ /dev/null
@@ -1,77 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseEach = require('../internals/baseEach'),
-    createCallback = require('../functions/createCallback'),
-    isArray = require('../objects/isArray');
-
-/**
- * Iterates over elements of a collection, returning an array of all elements
- * the callback returns truey for. The callback is bound to `thisArg` and
- * invoked with three arguments; (value, index|key, collection).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @alias select
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Array} Returns a new array of elements that passed the callback check.
- * @example
- *
- * var evens = _.filter([1, 2, 3, 4, 5, 6], function(num) { return num % 2 == 0; });
- * // => [2, 4, 6]
- *
- * var characters = [
- *   { 'name': 'barney', 'age': 36, 'blocked': false },
- *   { 'name': 'fred',   'age': 40, 'blocked': true }
- * ];
- *
- * // using "_.pluck" callback shorthand
- * _.filter(characters, 'blocked');
- * // => [{ 'name': 'fred', 'age': 40, 'blocked': true }]
- *
- * // using "_.where" callback shorthand
- * _.filter(characters, { 'age': 36 });
- * // => [{ 'name': 'barney', 'age': 36, 'blocked': false }]
- */
-function filter(collection, callback, thisArg) {
-  var result = [];
-  callback = createCallback(callback, thisArg, 3);
-
-  if (isArray(collection)) {
-    var index = -1,
-        length = collection.length;
-
-    while (++index < length) {
-      var value = collection[index];
-      if (callback(value, index, collection)) {
-        result.push(value);
-      }
-    }
-  } else {
-    baseEach(collection, function(value, index, collection) {
-      if (callback(value, index, collection)) {
-        result.push(value);
-      }
-    });
-  }
-  return result;
-}
-
-module.exports = filter;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/collections/find.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/collections/find.js
deleted file mode 100644
index 59f9853..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/collections/find.js
+++ /dev/null
@@ -1,81 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseEach = require('../internals/baseEach'),
-    createCallback = require('../functions/createCallback'),
-    isArray = require('../objects/isArray');
-
-/**
- * Iterates over elements of a collection, returning the first element that
- * the callback returns truey for. The callback is bound to `thisArg` and
- * invoked with three arguments; (value, index|key, collection).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @alias detect, findWhere
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {*} Returns the found element, else `undefined`.
- * @example
- *
- * var characters = [
- *   { 'name': 'barney',  'age': 36, 'blocked': false },
- *   { 'name': 'fred',    'age': 40, 'blocked': true },
- *   { 'name': 'pebbles', 'age': 1,  'blocked': false }
- * ];
- *
- * _.find(characters, function(chr) {
- *   return chr.age < 40;
- * });
- * // => { 'name': 'barney', 'age': 36, 'blocked': false }
- *
- * // using "_.where" callback shorthand
- * _.find(characters, { 'age': 1 });
- * // =>  { 'name': 'pebbles', 'age': 1, 'blocked': false }
- *
- * // using "_.pluck" callback shorthand
- * _.find(characters, 'blocked');
- * // => { 'name': 'fred', 'age': 40, 'blocked': true }
- */
-function find(collection, callback, thisArg) {
-  callback = createCallback(callback, thisArg, 3);
-
-  if (isArray(collection)) {
-    var index = -1,
-        length = collection.length;
-
-    while (++index < length) {
-      var value = collection[index];
-      if (callback(value, index, collection)) {
-        return value;
-      }
-    }
-  } else {
-    var result;
-    baseEach(collection, function(value, index, collection) {
-      if (callback(value, index, collection)) {
-        result = value;
-        return false;
-      }
-    });
-    return result;
-  }
-}
-
-module.exports = find;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/collections/findLast.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/collections/findLast.js
deleted file mode 100644
index 43d18e8..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/collections/findLast.js
+++ /dev/null
@@ -1,44 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback'),
-    forEachRight = require('./forEachRight');
-
-/**
- * This method is like `_.find` except that it iterates over elements
- * of a `collection` from right to left.
- *
- * @static
- * @memberOf _
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {*} Returns the found element, else `undefined`.
- * @example
- *
- * _.findLast([1, 2, 3, 4], function(num) {
- *   return num % 2 == 1;
- * });
- * // => 3
- */
-function findLast(collection, callback, thisArg) {
-  var result;
-  callback = createCallback(callback, thisArg, 3);
-  forEachRight(collection, function(value, index, collection) {
-    if (callback(value, index, collection)) {
-      result = value;
-      return false;
-    }
-  });
-  return result;
-}
-
-module.exports = findLast;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/collections/forEach.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/collections/forEach.js
deleted file mode 100644
index 4f89582..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/collections/forEach.js
+++ /dev/null
@@ -1,55 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseCreateCallback = require('../internals/baseCreateCallback'),
-    baseEach = require('../internals/baseEach'),
-    isArray = require('../objects/isArray');
-
-/**
- * Iterates over elements of a collection, executing the callback for each
- * element. The callback is bound to `thisArg` and invoked with three arguments;
- * (value, index|key, collection). Callbacks may exit iteration early by
- * explicitly returning `false`.
- *
- * Note: As with other "Collections" methods, objects with a `length` property
- * are iterated like arrays. To avoid this behavior `_.forIn` or `_.forOwn`
- * may be used for object iteration.
- *
- * @static
- * @memberOf _
- * @alias each
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function} [callback=identity] The function called per iteration.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Array|Object|string} Returns `collection`.
- * @example
- *
- * _([1, 2, 3]).forEach(function(num) { console.log(num); }).join(',');
- * // => logs each number and returns '1,2,3'
- *
- * _.forEach({ 'one': 1, 'two': 2, 'three': 3 }, function(num) { console.log(num); });
- * // => logs each number and returns the object (property order is not guaranteed across environments)
- */
-function forEach(collection, callback, thisArg) {
-  if (callback && typeof thisArg == 'undefined' && isArray(collection)) {
-    var index = -1,
-        length = collection.length;
-
-    while (++index < length) {
-      if (callback(collection[index], index, collection) === false) {
-        break;
-      }
-    }
-  } else {
-    baseEach(collection, callback, thisArg);
-  }
-  return collection;
-}
-
-module.exports = forEach;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/collections/forEachRight.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/collections/forEachRight.js
deleted file mode 100644
index fc003a1..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/collections/forEachRight.js
+++ /dev/null
@@ -1,59 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseCreateCallback = require('../internals/baseCreateCallback'),
-    baseEach = require('../internals/baseEach'),
-    isArray = require('../objects/isArray'),
-    isString = require('../objects/isString'),
-    keys = require('../objects/keys'),
-    support = require('../support');
-
-/**
- * This method is like `_.forEach` except that it iterates over elements
- * of a `collection` from right to left.
- *
- * @static
- * @memberOf _
- * @alias eachRight
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function} [callback=identity] The function called per iteration.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Array|Object|string} Returns `collection`.
- * @example
- *
- * _([1, 2, 3]).forEachRight(function(num) { console.log(num); }).join(',');
- * // => logs each number from right to left and returns '3,2,1'
- */
-function forEachRight(collection, callback, thisArg) {
-  var iterable = collection,
-      length = collection ? collection.length : 0;
-
-  callback = callback && typeof thisArg == 'undefined' ? callback : baseCreateCallback(callback, thisArg, 3);
-  if (isArray(collection)) {
-    while (length--) {
-      if (callback(collection[length], length, collection) === false) {
-        break;
-      }
-    }
-  } else {
-    if (typeof length != 'number') {
-      var props = keys(collection);
-      length = props.length;
-    } else if (support.unindexedChars && isString(collection)) {
-      iterable = collection.split('');
-    }
-    baseEach(collection, function(value, key, collection) {
-      key = props ? props[--length] : --length;
-      return callback(iterable[key], key, collection);
-    });
-  }
-  return collection;
-}
-
-module.exports = forEachRight;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/collections/groupBy.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/collections/groupBy.js
deleted file mode 100644
index 90756c4..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/collections/groupBy.js
+++ /dev/null
@@ -1,56 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createAggregator = require('../internals/createAggregator');
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Native method shortcuts */
-var hasOwnProperty = objectProto.hasOwnProperty;
-
-/**
- * Creates an object composed of keys generated from the results of running
- * each element of a collection through the callback. The corresponding value
- * of each key is an array of the elements responsible for generating the key.
- * The callback is bound to `thisArg` and invoked with three arguments;
- * (value, index|key, collection).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`
- *
- * @static
- * @memberOf _
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Object} Returns the composed aggregate object.
- * @example
- *
- * _.groupBy([4.2, 6.1, 6.4], function(num) { return Math.floor(num); });
- * // => { '4': [4.2], '6': [6.1, 6.4] }
- *
- * _.groupBy([4.2, 6.1, 6.4], function(num) { return this.floor(num); }, Math);
- * // => { '4': [4.2], '6': [6.1, 6.4] }
- *
- * // using "_.pluck" callback shorthand
- * _.groupBy(['one', 'two', 'three'], 'length');
- * // => { '3': ['one', 'two'], '5': ['three'] }
- */
-var groupBy = createAggregator(function(result, value, key) {
-  (hasOwnProperty.call(result, key) ? result[key] : result[key] = []).push(value);
-});
-
-module.exports = groupBy;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/collections/indexBy.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/collections/indexBy.js
deleted file mode 100644
index b8c277e..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/collections/indexBy.js
+++ /dev/null
@@ -1,54 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createAggregator = require('../internals/createAggregator');
-
-/**
- * Creates an object composed of keys generated from the results of running
- * each element of the collection through the given callback. The corresponding
- * value of each key is the last element responsible for generating the key.
- * The callback is bound to `thisArg` and invoked with three arguments;
- * (value, index|key, collection).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Object} Returns the composed aggregate object.
- * @example
- *
- * var keys = [
- *   { 'dir': 'left', 'code': 97 },
- *   { 'dir': 'right', 'code': 100 }
- * ];
- *
- * _.indexBy(keys, 'dir');
- * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }
- *
- * _.indexBy(keys, function(key) { return String.fromCharCode(key.code); });
- * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }
- *
- * _.indexBy(characters, function(key) { this.fromCharCode(key.code); }, String);
- * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }
- */
-var indexBy = createAggregator(function(result, value, key) {
-  result[key] = value;
-});
-
-module.exports = indexBy;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/collections/invoke.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/collections/invoke.js
deleted file mode 100644
index 17de1ee..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/collections/invoke.js
+++ /dev/null
@@ -1,47 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var forEach = require('./forEach'),
-    slice = require('../internals/slice');
-
-/**
- * Invokes the method named by `methodName` on each element in the `collection`
- * returning an array of the results of each invoked method. Additional arguments
- * will be provided to each invoked method. If `methodName` is a function it
- * will be invoked for, and `this` bound to, each element in the `collection`.
- *
- * @static
- * @memberOf _
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function|string} methodName The name of the method to invoke or
- *  the function invoked per iteration.
- * @param {...*} [arg] Arguments to invoke the method with.
- * @returns {Array} Returns a new array of the results of each invoked method.
- * @example
- *
- * _.invoke([[5, 1, 7], [3, 2, 1]], 'sort');
- * // => [[1, 5, 7], [1, 2, 3]]
- *
- * _.invoke([123, 456], String.prototype.split, '');
- * // => [['1', '2', '3'], ['4', '5', '6']]
- */
-function invoke(collection, methodName) {
-  var args = slice(arguments, 2),
-      index = -1,
-      isFunc = typeof methodName == 'function',
-      length = collection ? collection.length : 0,
-      result = Array(typeof length == 'number' ? length : 0);
-
-  forEach(collection, function(value) {
-    result[++index] = (isFunc ? methodName : value[methodName]).apply(value, args);
-  });
-  return result;
-}
-
-module.exports = invoke;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/collections/map.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/collections/map.js
deleted file mode 100644
index cd371e8..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/collections/map.js
+++ /dev/null
@@ -1,70 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseEach = require('../internals/baseEach'),
-    createCallback = require('../functions/createCallback'),
-    isArray = require('../objects/isArray');
-
-/**
- * Creates an array of values by running each element in the collection
- * through the callback. The callback is bound to `thisArg` and invoked with
- * three arguments; (value, index|key, collection).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @alias collect
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Array} Returns a new array of the results of each `callback` execution.
- * @example
- *
- * _.map([1, 2, 3], function(num) { return num * 3; });
- * // => [3, 6, 9]
- *
- * _.map({ 'one': 1, 'two': 2, 'three': 3 }, function(num) { return num * 3; });
- * // => [3, 6, 9] (property order is not guaranteed across environments)
- *
- * var characters = [
- *   { 'name': 'barney', 'age': 36 },
- *   { 'name': 'fred',   'age': 40 }
- * ];
- *
- * // using "_.pluck" callback shorthand
- * _.map(characters, 'name');
- * // => ['barney', 'fred']
- */
-function map(collection, callback, thisArg) {
-  var index = -1,
-      length = collection ? collection.length : 0,
-      result = Array(typeof length == 'number' ? length : 0);
-
-  callback = createCallback(callback, thisArg, 3);
-  if (isArray(collection)) {
-    while (++index < length) {
-      result[index] = callback(collection[index], index, collection);
-    }
-  } else {
-    baseEach(collection, function(value, key, collection) {
-      result[++index] = callback(value, key, collection);
-    });
-  }
-  return result;
-}
-
-module.exports = map;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/collections/max.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/collections/max.js
deleted file mode 100644
index 8547613..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/collections/max.js
+++ /dev/null
@@ -1,90 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseEach = require('../internals/baseEach'),
-    charAtCallback = require('../internals/charAtCallback'),
-    createCallback = require('../functions/createCallback'),
-    isArray = require('../objects/isArray'),
-    isString = require('../objects/isString');
-
-/**
- * Retrieves the maximum value of a collection. If the collection is empty or
- * falsey `-Infinity` is returned. If a callback is provided it will be executed
- * for each value in the collection to generate the criterion by which the value
- * is ranked. The callback is bound to `thisArg` and invoked with three
- * arguments; (value, index, collection).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {*} Returns the maximum value.
- * @example
- *
- * _.max([4, 2, 8, 6]);
- * // => 8
- *
- * var characters = [
- *   { 'name': 'barney', 'age': 36 },
- *   { 'name': 'fred',   'age': 40 }
- * ];
- *
- * _.max(characters, function(chr) { return chr.age; });
- * // => { 'name': 'fred', 'age': 40 };
- *
- * // using "_.pluck" callback shorthand
- * _.max(characters, 'age');
- * // => { 'name': 'fred', 'age': 40 };
- */
-function max(collection, callback, thisArg) {
-  var computed = -Infinity,
-      result = computed;
-
-  // allows working with functions like `_.map` without using
-  // their `index` argument as a callback
-  if (typeof callback != 'function' && thisArg && thisArg[callback] === collection) {
-    callback = null;
-  }
-  if (callback == null && isArray(collection)) {
-    var index = -1,
-        length = collection.length;
-
-    while (++index < length) {
-      var value = collection[index];
-      if (value > result) {
-        result = value;
-      }
-    }
-  } else {
-    callback = (callback == null && isString(collection))
-      ? charAtCallback
-      : createCallback(callback, thisArg, 3);
-
-    baseEach(collection, function(value, index, collection) {
-      var current = callback(value, index, collection);
-      if (current > computed) {
-        computed = current;
-        result = value;
-      }
-    });
-  }
-  return result;
-}
-
-module.exports = max;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/collections/min.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/collections/min.js
deleted file mode 100644
index 925f32c..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/collections/min.js
+++ /dev/null
@@ -1,90 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseEach = require('../internals/baseEach'),
-    charAtCallback = require('../internals/charAtCallback'),
-    createCallback = require('../functions/createCallback'),
-    isArray = require('../objects/isArray'),
-    isString = require('../objects/isString');
-
-/**
- * Retrieves the minimum value of a collection. If the collection is empty or
- * falsey `Infinity` is returned. If a callback is provided it will be executed
- * for each value in the collection to generate the criterion by which the value
- * is ranked. The callback is bound to `thisArg` and invoked with three
- * arguments; (value, index, collection).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {*} Returns the minimum value.
- * @example
- *
- * _.min([4, 2, 8, 6]);
- * // => 2
- *
- * var characters = [
- *   { 'name': 'barney', 'age': 36 },
- *   { 'name': 'fred',   'age': 40 }
- * ];
- *
- * _.min(characters, function(chr) { return chr.age; });
- * // => { 'name': 'barney', 'age': 36 };
- *
- * // using "_.pluck" callback shorthand
- * _.min(characters, 'age');
- * // => { 'name': 'barney', 'age': 36 };
- */
-function min(collection, callback, thisArg) {
-  var computed = Infinity,
-      result = computed;
-
-  // allows working with functions like `_.map` without using
-  // their `index` argument as a callback
-  if (typeof callback != 'function' && thisArg && thisArg[callback] === collection) {
-    callback = null;
-  }
-  if (callback == null && isArray(collection)) {
-    var index = -1,
-        length = collection.length;
-
-    while (++index < length) {
-      var value = collection[index];
-      if (value < result) {
-        result = value;
-      }
-    }
-  } else {
-    callback = (callback == null && isString(collection))
-      ? charAtCallback
-      : createCallback(callback, thisArg, 3);
-
-    baseEach(collection, function(value, index, collection) {
-      var current = callback(value, index, collection);
-      if (current < computed) {
-        computed = current;
-        result = value;
-      }
-    });
-  }
-  return result;
-}
-
-module.exports = min;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/collections/pluck.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/collections/pluck.js
deleted file mode 100644
index 8ef0be0..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/collections/pluck.js
+++ /dev/null
@@ -1,33 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var map = require('./map');
-
-/**
- * Retrieves the value of a specified property from all elements in the collection.
- *
- * @static
- * @memberOf _
- * @type Function
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {string} property The name of the property to pluck.
- * @returns {Array} Returns a new array of property values.
- * @example
- *
- * var characters = [
- *   { 'name': 'barney', 'age': 36 },
- *   { 'name': 'fred',   'age': 40 }
- * ];
- *
- * _.pluck(characters, 'name');
- * // => ['barney', 'fred']
- */
-var pluck = map;
-
-module.exports = pluck;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/collections/reduce.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/collections/reduce.js
deleted file mode 100644
index fb7854b..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/collections/reduce.js
+++ /dev/null
@@ -1,67 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseEach = require('../internals/baseEach'),
-    createCallback = require('../functions/createCallback'),
-    isArray = require('../objects/isArray');
-
-/**
- * Reduces a collection to a value which is the accumulated result of running
- * each element in the collection through the callback, where each successive
- * callback execution consumes the return value of the previous execution. If
- * `accumulator` is not provided the first element of the collection will be
- * used as the initial `accumulator` value. The callback is bound to `thisArg`
- * and invoked with four arguments; (accumulator, value, index|key, collection).
- *
- * @static
- * @memberOf _
- * @alias foldl, inject
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function} [callback=identity] The function called per iteration.
- * @param {*} [accumulator] Initial value of the accumulator.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {*} Returns the accumulated value.
- * @example
- *
- * var sum = _.reduce([1, 2, 3], function(sum, num) {
- *   return sum + num;
- * });
- * // => 6
- *
- * var mapped = _.reduce({ 'a': 1, 'b': 2, 'c': 3 }, function(result, num, key) {
- *   result[key] = num * 3;
- *   return result;
- * }, {});
- * // => { 'a': 3, 'b': 6, 'c': 9 }
- */
-function reduce(collection, callback, accumulator, thisArg) {
-  var noaccum = arguments.length < 3;
-  callback = createCallback(callback, thisArg, 4);
-
-  if (isArray(collection)) {
-    var index = -1,
-        length = collection.length;
-
-    if (noaccum) {
-      accumulator = collection[++index];
-    }
-    while (++index < length) {
-      accumulator = callback(accumulator, collection[index], index, collection);
-    }
-  } else {
-    baseEach(collection, function(value, index, collection) {
-      accumulator = noaccum
-        ? (noaccum = false, value)
-        : callback(accumulator, value, index, collection)
-    });
-  }
-  return accumulator;
-}
-
-module.exports = reduce;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/collections/reduceRight.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/collections/reduceRight.js
deleted file mode 100644
index 58625ea..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/collections/reduceRight.js
+++ /dev/null
@@ -1,42 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback'),
-    forEachRight = require('./forEachRight');
-
-/**
- * This method is like `_.reduce` except that it iterates over elements
- * of a `collection` from right to left.
- *
- * @static
- * @memberOf _
- * @alias foldr
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function} [callback=identity] The function called per iteration.
- * @param {*} [accumulator] Initial value of the accumulator.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {*} Returns the accumulated value.
- * @example
- *
- * var list = [[0, 1], [2, 3], [4, 5]];
- * var flat = _.reduceRight(list, function(a, b) { return a.concat(b); }, []);
- * // => [4, 5, 2, 3, 0, 1]
- */
-function reduceRight(collection, callback, accumulator, thisArg) {
-  var noaccum = arguments.length < 3;
-  callback = createCallback(callback, thisArg, 4);
-  forEachRight(collection, function(value, index, collection) {
-    accumulator = noaccum
-      ? (noaccum = false, value)
-      : callback(accumulator, value, index, collection);
-  });
-  return accumulator;
-}
-
-module.exports = reduceRight;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/collections/reject.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/collections/reject.js
deleted file mode 100644
index f33239b..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/collections/reject.js
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback'),
-    filter = require('./filter');
-
-/**
- * The opposite of `_.filter` this method returns the elements of a
- * collection that the callback does **not** return truey for.
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Array} Returns a new array of elements that failed the callback check.
- * @example
- *
- * var odds = _.reject([1, 2, 3, 4, 5, 6], function(num) { return num % 2 == 0; });
- * // => [1, 3, 5]
- *
- * var characters = [
- *   { 'name': 'barney', 'age': 36, 'blocked': false },
- *   { 'name': 'fred',   'age': 40, 'blocked': true }
- * ];
- *
- * // using "_.pluck" callback shorthand
- * _.reject(characters, 'blocked');
- * // => [{ 'name': 'barney', 'age': 36, 'blocked': false }]
- *
- * // using "_.where" callback shorthand
- * _.reject(characters, { 'age': 36 });
- * // => [{ 'name': 'fred', 'age': 40, 'blocked': true }]
- */
-function reject(collection, callback, thisArg) {
-  callback = createCallback(callback, thisArg, 3);
-  return filter(collection, function(value, index, collection) {
-    return !callback(value, index, collection);
-  });
-}
-
-module.exports = reject;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/collections/sample.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/collections/sample.js
deleted file mode 100644
index 481c7e4..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/collections/sample.js
+++ /dev/null
@@ -1,52 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseRandom = require('../internals/baseRandom'),
-    isString = require('../objects/isString'),
-    shuffle = require('./shuffle'),
-    support = require('../support'),
-    values = require('../objects/values');
-
-/* Native method shortcuts for methods with the same name as other `lodash` methods */
-var nativeMax = Math.max,
-    nativeMin = Math.min;
-
-/**
- * Retrieves a random element or `n` random elements from a collection.
- *
- * @static
- * @memberOf _
- * @category Collections
- * @param {Array|Object|string} collection The collection to sample.
- * @param {number} [n] The number of elements to sample.
- * @param- {Object} [guard] Allows working with functions like `_.map`
- *  without using their `index` arguments as `n`.
- * @returns {Array} Returns the random sample(s) of `collection`.
- * @example
- *
- * _.sample([1, 2, 3, 4]);
- * // => 2
- *
- * _.sample([1, 2, 3, 4], 2);
- * // => [3, 1]
- */
-function sample(collection, n, guard) {
-  if (collection && typeof collection.length != 'number') {
-    collection = values(collection);
-  } else if (support.unindexedChars && isString(collection)) {
-    collection = collection.split('');
-  }
-  if (n == null || guard) {
-    return collection ? collection[baseRandom(0, collection.length - 1)] : undefined;
-  }
-  var result = shuffle(collection);
-  result.length = nativeMin(nativeMax(0, n), result.length);
-  return result;
-}
-
-module.exports = sample;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/collections/shuffle.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/collections/shuffle.js
deleted file mode 100644
index d37777c..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/collections/shuffle.js
+++ /dev/null
@@ -1,39 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseRandom = require('../internals/baseRandom'),
-    forEach = require('./forEach');
-
-/**
- * Creates an array of shuffled values, using a version of the Fisher-Yates
- * shuffle. See http://en.wikipedia.org/wiki/Fisher-Yates_shuffle.
- *
- * @static
- * @memberOf _
- * @category Collections
- * @param {Array|Object|string} collection The collection to shuffle.
- * @returns {Array} Returns a new shuffled collection.
- * @example
- *
- * _.shuffle([1, 2, 3, 4, 5, 6]);
- * // => [4, 1, 6, 3, 5, 2]
- */
-function shuffle(collection) {
-  var index = -1,
-      length = collection ? collection.length : 0,
-      result = Array(typeof length == 'number' ? length : 0);
-
-  forEach(collection, function(value) {
-    var rand = baseRandom(0, ++index);
-    result[index] = result[rand];
-    result[rand] = value;
-  });
-  return result;
-}
-
-module.exports = shuffle;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/collections/size.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/collections/size.js
deleted file mode 100644
index bfc821f..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/collections/size.js
+++ /dev/null
@@ -1,36 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var keys = require('../objects/keys');
-
-/**
- * Gets the size of the `collection` by returning `collection.length` for arrays
- * and array-like objects or the number of own enumerable properties for objects.
- *
- * @static
- * @memberOf _
- * @category Collections
- * @param {Array|Object|string} collection The collection to inspect.
- * @returns {number} Returns `collection.length` or number of own enumerable properties.
- * @example
- *
- * _.size([1, 2]);
- * // => 2
- *
- * _.size({ 'one': 1, 'two': 2, 'three': 3 });
- * // => 3
- *
- * _.size('pebbles');
- * // => 7
- */
-function size(collection) {
-  var length = collection ? collection.length : 0;
-  return typeof length == 'number' ? length : keys(collection).length;
-}
-
-module.exports = size;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/collections/some.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/collections/some.js
deleted file mode 100644
index c8d7ee5..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/collections/some.js
+++ /dev/null
@@ -1,76 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseEach = require('../internals/baseEach'),
-    createCallback = require('../functions/createCallback'),
-    isArray = require('../objects/isArray');
-
-/**
- * Checks if the callback returns a truey value for **any** element of a
- * collection. The function returns as soon as it finds a passing value and
- * does not iterate over the entire collection. The callback is bound to
- * `thisArg` and invoked with three arguments; (value, index|key, collection).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @alias any
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {boolean} Returns `true` if any element passed the callback check,
- *  else `false`.
- * @example
- *
- * _.some([null, 0, 'yes', false], Boolean);
- * // => true
- *
- * var characters = [
- *   { 'name': 'barney', 'age': 36, 'blocked': false },
- *   { 'name': 'fred',   'age': 40, 'blocked': true }
- * ];
- *
- * // using "_.pluck" callback shorthand
- * _.some(characters, 'blocked');
- * // => true
- *
- * // using "_.where" callback shorthand
- * _.some(characters, { 'age': 1 });
- * // => false
- */
-function some(collection, callback, thisArg) {
-  var result;
-  callback = createCallback(callback, thisArg, 3);
-
-  if (isArray(collection)) {
-    var index = -1,
-        length = collection.length;
-
-    while (++index < length) {
-      if ((result = callback(collection[index], index, collection))) {
-        break;
-      }
-    }
-  } else {
-    baseEach(collection, function(value, index, collection) {
-      return !(result = callback(value, index, collection));
-    });
-  }
-  return !!result;
-}
-
-module.exports = some;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/collections/sortBy.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/collections/sortBy.js
deleted file mode 100644
index 777b152..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/collections/sortBy.js
+++ /dev/null
@@ -1,101 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var compareAscending = require('../internals/compareAscending'),
-    createCallback = require('../functions/createCallback'),
-    forEach = require('./forEach'),
-    getArray = require('../internals/getArray'),
-    getObject = require('../internals/getObject'),
-    isArray = require('../objects/isArray'),
-    map = require('./map'),
-    releaseArray = require('../internals/releaseArray'),
-    releaseObject = require('../internals/releaseObject');
-
-/**
- * Creates an array of elements, sorted in ascending order by the results of
- * running each element in a collection through the callback. This method
- * performs a stable sort, that is, it will preserve the original sort order
- * of equal elements. The callback is bound to `thisArg` and invoked with
- * three arguments; (value, index|key, collection).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an array of property names is provided for `callback` the collection
- * will be sorted by each property value.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Array|Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Array} Returns a new array of sorted elements.
- * @example
- *
- * _.sortBy([1, 2, 3], function(num) { return Math.sin(num); });
- * // => [3, 1, 2]
- *
- * _.sortBy([1, 2, 3], function(num) { return this.sin(num); }, Math);
- * // => [3, 1, 2]
- *
- * var characters = [
- *   { 'name': 'barney',  'age': 36 },
- *   { 'name': 'fred',    'age': 40 },
- *   { 'name': 'barney',  'age': 26 },
- *   { 'name': 'fred',    'age': 30 }
- * ];
- *
- * // using "_.pluck" callback shorthand
- * _.map(_.sortBy(characters, 'age'), _.values);
- * // => [['barney', 26], ['fred', 30], ['barney', 36], ['fred', 40]]
- *
- * // sorting by multiple properties
- * _.map(_.sortBy(characters, ['name', 'age']), _.values);
- * // = > [['barney', 26], ['barney', 36], ['fred', 30], ['fred', 40]]
- */
-function sortBy(collection, callback, thisArg) {
-  var index = -1,
-      isArr = isArray(callback),
-      length = collection ? collection.length : 0,
-      result = Array(typeof length == 'number' ? length : 0);
-
-  if (!isArr) {
-    callback = createCallback(callback, thisArg, 3);
-  }
-  forEach(collection, function(value, key, collection) {
-    var object = result[++index] = getObject();
-    if (isArr) {
-      object.criteria = map(callback, function(key) { return value[key]; });
-    } else {
-      (object.criteria = getArray())[0] = callback(value, key, collection);
-    }
-    object.index = index;
-    object.value = value;
-  });
-
-  length = result.length;
-  result.sort(compareAscending);
-  while (length--) {
-    var object = result[length];
-    result[length] = object.value;
-    if (!isArr) {
-      releaseArray(object.criteria);
-    }
-    releaseObject(object);
-  }
-  return result;
-}
-
-module.exports = sortBy;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/collections/toArray.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/collections/toArray.js
deleted file mode 100644
index 223cf21..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/collections/toArray.js
+++ /dev/null
@@ -1,36 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isString = require('../objects/isString'),
-    slice = require('../internals/slice'),
-    support = require('../support'),
-    values = require('../objects/values');
-
-/**
- * Converts the `collection` to an array.
- *
- * @static
- * @memberOf _
- * @category Collections
- * @param {Array|Object|string} collection The collection to convert.
- * @returns {Array} Returns the new converted array.
- * @example
- *
- * (function() { return _.toArray(arguments).slice(1); })(1, 2, 3, 4);
- * // => [2, 3, 4]
- */
-function toArray(collection) {
-  if (collection && typeof collection.length == 'number') {
-    return (support.unindexedChars && isString(collection))
-      ? collection.split('')
-      : slice(collection);
-  }
-  return values(collection);
-}
-
-module.exports = toArray;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/collections/where.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/collections/where.js
deleted file mode 100644
index c035b72..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/collections/where.js
+++ /dev/null
@@ -1,38 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var filter = require('./filter');
-
-/**
- * Performs a deep comparison of each element in a `collection` to the given
- * `properties` object, returning an array of all elements that have equivalent
- * property values.
- *
- * @static
- * @memberOf _
- * @type Function
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Object} props The object of property values to filter by.
- * @returns {Array} Returns a new array of elements that have the given properties.
- * @example
- *
- * var characters = [
- *   { 'name': 'barney', 'age': 36, 'pets': ['hoppy'] },
- *   { 'name': 'fred',   'age': 40, 'pets': ['baby puss', 'dino'] }
- * ];
- *
- * _.where(characters, { 'age': 36 });
- * // => [{ 'name': 'barney', 'age': 36, 'pets': ['hoppy'] }]
- *
- * _.where(characters, { 'pets': ['dino'] });
- * // => [{ 'name': 'fred', 'age': 40, 'pets': ['baby puss', 'dino'] }]
- */
-var where = filter;
-
-module.exports = where;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/functions.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/functions.js
deleted file mode 100644
index 084bdd4..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/functions.js
+++ /dev/null
@@ -1,27 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-module.exports = {
-  'after': require('./functions/after'),
-  'bind': require('./functions/bind'),
-  'bindAll': require('./functions/bindAll'),
-  'bindKey': require('./functions/bindKey'),
-  'compose': require('./functions/compose'),
-  'createCallback': require('./functions/createCallback'),
-  'curry': require('./functions/curry'),
-  'debounce': require('./functions/debounce'),
-  'defer': require('./functions/defer'),
-  'delay': require('./functions/delay'),
-  'memoize': require('./functions/memoize'),
-  'once': require('./functions/once'),
-  'partial': require('./functions/partial'),
-  'partialRight': require('./functions/partialRight'),
-  'throttle': require('./functions/throttle'),
-  'wrap': require('./functions/wrap')
-};
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/functions/after.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/functions/after.js
deleted file mode 100644
index 48ef88e..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/functions/after.js
+++ /dev/null
@@ -1,46 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isFunction = require('../objects/isFunction');
-
-/**
- * Creates a function that executes `func`, with  the `this` binding and
- * arguments of the created function, only after being called `n` times.
- *
- * @static
- * @memberOf _
- * @category Functions
- * @param {number} n The number of times the function must be called before
- *  `func` is executed.
- * @param {Function} func The function to restrict.
- * @returns {Function} Returns the new restricted function.
- * @example
- *
- * var saves = ['profile', 'settings'];
- *
- * var done = _.after(saves.length, function() {
- *   console.log('Done saving!');
- * });
- *
- * _.forEach(saves, function(type) {
- *   asyncSave({ 'type': type, 'complete': done });
- * });
- * // => logs 'Done saving!', after all saves have completed
- */
-function after(n, func) {
-  if (!isFunction(func)) {
-    throw new TypeError;
-  }
-  return function() {
-    if (--n < 1) {
-      return func.apply(this, arguments);
-    }
-  };
-}
-
-module.exports = after;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/functions/bind.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/functions/bind.js
deleted file mode 100644
index 42284b3..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/functions/bind.js
+++ /dev/null
@@ -1,41 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createWrapper = require('../internals/createWrapper'),
-    slice = require('../internals/slice'),
-    support = require('../support');
-
-/**
- * Creates a function that, when called, invokes `func` with the `this`
- * binding of `thisArg` and prepends any additional `bind` arguments to those
- * provided to the bound function.
- *
- * @static
- * @memberOf _
- * @category Functions
- * @param {Function} func The function to bind.
- * @param {*} [thisArg] The `this` binding of `func`.
- * @param {...*} [arg] Arguments to be partially applied.
- * @returns {Function} Returns the new bound function.
- * @example
- *
- * var func = function(greeting) {
- *   return greeting + ' ' + this.name;
- * };
- *
- * func = _.bind(func, { 'name': 'fred' }, 'hi');
- * func();
- * // => 'hi fred'
- */
-function bind(func, thisArg) {
-  return arguments.length > 2
-    ? createWrapper(func, 17, slice(arguments, 2), null, thisArg)
-    : createWrapper(func, 1, null, null, thisArg);
-}
-
-module.exports = bind;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/functions/bindAll.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/functions/bindAll.js
deleted file mode 100644
index f62d906..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/functions/bindAll.js
+++ /dev/null
@@ -1,49 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseFlatten = require('../internals/baseFlatten'),
-    createWrapper = require('../internals/createWrapper'),
-    functions = require('../objects/functions');
-
-/**
- * Binds methods of an object to the object itself, overwriting the existing
- * method. Method names may be specified as individual arguments or as arrays
- * of method names. If no method names are provided all the function properties
- * of `object` will be bound.
- *
- * @static
- * @memberOf _
- * @category Functions
- * @param {Object} object The object to bind and assign the bound methods to.
- * @param {...string} [methodName] The object method names to
- *  bind, specified as individual method names or arrays of method names.
- * @returns {Object} Returns `object`.
- * @example
- *
- * var view = {
- *   'label': 'docs',
- *   'onClick': function() { console.log('clicked ' + this.label); }
- * };
- *
- * _.bindAll(view);
- * jQuery('#docs').on('click', view.onClick);
- * // => logs 'clicked docs', when the button is clicked
- */
-function bindAll(object) {
-  var funcs = arguments.length > 1 ? baseFlatten(arguments, true, false, 1) : functions(object),
-      index = -1,
-      length = funcs.length;
-
-  while (++index < length) {
-    var key = funcs[index];
-    object[key] = createWrapper(object[key], 1, null, null, object);
-  }
-  return object;
-}
-
-module.exports = bindAll;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/functions/bindKey.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/functions/bindKey.js
deleted file mode 100644
index 7e07139..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/functions/bindKey.js
+++ /dev/null
@@ -1,52 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createWrapper = require('../internals/createWrapper'),
-    slice = require('../internals/slice');
-
-/**
- * Creates a function that, when called, invokes the method at `object[key]`
- * and prepends any additional `bindKey` arguments to those provided to the bound
- * function. This method differs from `_.bind` by allowing bound functions to
- * reference methods that will be redefined or don't yet exist.
- * See http://michaux.ca/articles/lazy-function-definition-pattern.
- *
- * @static
- * @memberOf _
- * @category Functions
- * @param {Object} object The object the method belongs to.
- * @param {string} key The key of the method.
- * @param {...*} [arg] Arguments to be partially applied.
- * @returns {Function} Returns the new bound function.
- * @example
- *
- * var object = {
- *   'name': 'fred',
- *   'greet': function(greeting) {
- *     return greeting + ' ' + this.name;
- *   }
- * };
- *
- * var func = _.bindKey(object, 'greet', 'hi');
- * func();
- * // => 'hi fred'
- *
- * object.greet = function(greeting) {
- *   return greeting + 'ya ' + this.name + '!';
- * };
- *
- * func();
- * // => 'hiya fred!'
- */
-function bindKey(object, key) {
-  return arguments.length > 2
-    ? createWrapper(key, 19, slice(arguments, 2), null, object)
-    : createWrapper(key, 3, null, null, object);
-}
-
-module.exports = bindKey;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/functions/compose.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/functions/compose.js
deleted file mode 100644
index 2a70d65..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/functions/compose.js
+++ /dev/null
@@ -1,61 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isFunction = require('../objects/isFunction');
-
-/**
- * Creates a function that is the composition of the provided functions,
- * where each function consumes the return value of the function that follows.
- * For example, composing the functions `f()`, `g()`, and `h()` produces `f(g(h()))`.
- * Each function is executed with the `this` binding of the composed function.
- *
- * @static
- * @memberOf _
- * @category Functions
- * @param {...Function} [func] Functions to compose.
- * @returns {Function} Returns the new composed function.
- * @example
- *
- * var realNameMap = {
- *   'pebbles': 'penelope'
- * };
- *
- * var format = function(name) {
- *   name = realNameMap[name.toLowerCase()] || name;
- *   return name.charAt(0).toUpperCase() + name.slice(1).toLowerCase();
- * };
- *
- * var greet = function(formatted) {
- *   return 'Hiya ' + formatted + '!';
- * };
- *
- * var welcome = _.compose(greet, format);
- * welcome('pebbles');
- * // => 'Hiya Penelope!'
- */
-function compose() {
-  var funcs = arguments,
-      length = funcs.length;
-
-  while (length--) {
-    if (!isFunction(funcs[length])) {
-      throw new TypeError;
-    }
-  }
-  return function() {
-    var args = arguments,
-        length = funcs.length;
-
-    while (length--) {
-      args = [funcs[length].apply(this, args)];
-    }
-    return args[0];
-  };
-}
-
-module.exports = compose;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/functions/createCallback.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/functions/createCallback.js
deleted file mode 100644
index 460b80e..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/functions/createCallback.js
+++ /dev/null
@@ -1,81 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseCreateCallback = require('../internals/baseCreateCallback'),
-    baseIsEqual = require('../internals/baseIsEqual'),
-    isObject = require('../objects/isObject'),
-    keys = require('../objects/keys'),
-    property = require('../utilities/property');
-
-/**
- * Produces a callback bound to an optional `thisArg`. If `func` is a property
- * name the created callback will return the property value for a given element.
- * If `func` is an object the created callback will return `true` for elements
- * that contain the equivalent object properties, otherwise it will return `false`.
- *
- * @static
- * @memberOf _
- * @category Utilities
- * @param {*} [func=identity] The value to convert to a callback.
- * @param {*} [thisArg] The `this` binding of the created callback.
- * @param {number} [argCount] The number of arguments the callback accepts.
- * @returns {Function} Returns a callback function.
- * @example
- *
- * var characters = [
- *   { 'name': 'barney', 'age': 36 },
- *   { 'name': 'fred',   'age': 40 }
- * ];
- *
- * // wrap to create custom callback shorthands
- * _.createCallback = _.wrap(_.createCallback, function(func, callback, thisArg) {
- *   var match = /^(.+?)__([gl]t)(.+)$/.exec(callback);
- *   return !match ? func(callback, thisArg) : function(object) {
- *     return match[2] == 'gt' ? object[match[1]] > match[3] : object[match[1]] < match[3];
- *   };
- * });
- *
- * _.filter(characters, 'age__gt38');
- * // => [{ 'name': 'fred', 'age': 40 }]
- */
-function createCallback(func, thisArg, argCount) {
-  var type = typeof func;
-  if (func == null || type == 'function') {
-    return baseCreateCallback(func, thisArg, argCount);
-  }
-  // handle "_.pluck" style callback shorthands
-  if (type != 'object') {
-    return property(func);
-  }
-  var props = keys(func),
-      key = props[0],
-      a = func[key];
-
-  // handle "_.where" style callback shorthands
-  if (props.length == 1 && a === a && !isObject(a)) {
-    // fast path the common case of providing an object with a single
-    // property containing a primitive value
-    return function(object) {
-      var b = object[key];
-      return a === b && (a !== 0 || (1 / a == 1 / b));
-    };
-  }
-  return function(object) {
-    var length = props.length,
-        result = false;
-
-    while (length--) {
-      if (!(result = baseIsEqual(object[props[length]], func[props[length]], null, true))) {
-        break;
-      }
-    }
-    return result;
-  };
-}
-
-module.exports = createCallback;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/functions/curry.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/functions/curry.js
deleted file mode 100644
index 77fb780..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/functions/curry.js
+++ /dev/null
@@ -1,44 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createWrapper = require('../internals/createWrapper');
-
-/**
- * Creates a function which accepts one or more arguments of `func` that when
- * invoked either executes `func` returning its result, if all `func` arguments
- * have been provided, or returns a function that accepts one or more of the
- * remaining `func` arguments, and so on. The arity of `func` can be specified
- * if `func.length` is not sufficient.
- *
- * @static
- * @memberOf _
- * @category Functions
- * @param {Function} func The function to curry.
- * @param {number} [arity=func.length] The arity of `func`.
- * @returns {Function} Returns the new curried function.
- * @example
- *
- * var curried = _.curry(function(a, b, c) {
- *   console.log(a + b + c);
- * });
- *
- * curried(1)(2)(3);
- * // => 6
- *
- * curried(1, 2)(3);
- * // => 6
- *
- * curried(1, 2, 3);
- * // => 6
- */
-function curry(func, arity) {
-  arity = typeof arity == 'number' ? arity : (+arity || func.length);
-  return createWrapper(func, 4, null, null, null, arity);
-}
-
-module.exports = curry;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/functions/debounce.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/functions/debounce.js
deleted file mode 100644
index 6bc27f4..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/functions/debounce.js
+++ /dev/null
@@ -1,156 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isFunction = require('../objects/isFunction'),
-    isObject = require('../objects/isObject'),
-    now = require('../utilities/now');
-
-/* Native method shortcuts for methods with the same name as other `lodash` methods */
-var nativeMax = Math.max;
-
-/**
- * Creates a function that will delay the execution of `func` until after
- * `wait` milliseconds have elapsed since the last time it was invoked.
- * Provide an options object to indicate that `func` should be invoked on
- * the leading and/or trailing edge of the `wait` timeout. Subsequent calls
- * to the debounced function will return the result of the last `func` call.
- *
- * Note: If `leading` and `trailing` options are `true` `func` will be called
- * on the trailing edge of the timeout only if the the debounced function is
- * invoked more than once during the `wait` timeout.
- *
- * @static
- * @memberOf _
- * @category Functions
- * @param {Function} func The function to debounce.
- * @param {number} wait The number of milliseconds to delay.
- * @param {Object} [options] The options object.
- * @param {boolean} [options.leading=false] Specify execution on the leading edge of the timeout.
- * @param {number} [options.maxWait] The maximum time `func` is allowed to be delayed before it's called.
- * @param {boolean} [options.trailing=true] Specify execution on the trailing edge of the timeout.
- * @returns {Function} Returns the new debounced function.
- * @example
- *
- * // avoid costly calculations while the window size is in flux
- * var lazyLayout = _.debounce(calculateLayout, 150);
- * jQuery(window).on('resize', lazyLayout);
- *
- * // execute `sendMail` when the click event is fired, debouncing subsequent calls
- * jQuery('#postbox').on('click', _.debounce(sendMail, 300, {
- *   'leading': true,
- *   'trailing': false
- * });
- *
- * // ensure `batchLog` is executed once after 1 second of debounced calls
- * var source = new EventSource('/stream');
- * source.addEventListener('message', _.debounce(batchLog, 250, {
- *   'maxWait': 1000
- * }, false);
- */
-function debounce(func, wait, options) {
-  var args,
-      maxTimeoutId,
-      result,
-      stamp,
-      thisArg,
-      timeoutId,
-      trailingCall,
-      lastCalled = 0,
-      maxWait = false,
-      trailing = true;
-
-  if (!isFunction(func)) {
-    throw new TypeError;
-  }
-  wait = nativeMax(0, wait) || 0;
-  if (options === true) {
-    var leading = true;
-    trailing = false;
-  } else if (isObject(options)) {
-    leading = options.leading;
-    maxWait = 'maxWait' in options && (nativeMax(wait, options.maxWait) || 0);
-    trailing = 'trailing' in options ? options.trailing : trailing;
-  }
-  var delayed = function() {
-    var remaining = wait - (now() - stamp);
-    if (remaining <= 0) {
-      if (maxTimeoutId) {
-        clearTimeout(maxTimeoutId);
-      }
-      var isCalled = trailingCall;
-      maxTimeoutId = timeoutId = trailingCall = undefined;
-      if (isCalled) {
-        lastCalled = now();
-        result = func.apply(thisArg, args);
-        if (!timeoutId && !maxTimeoutId) {
-          args = thisArg = null;
-        }
-      }
-    } else {
-      timeoutId = setTimeout(delayed, remaining);
-    }
-  };
-
-  var maxDelayed = function() {
-    if (timeoutId) {
-      clearTimeout(timeoutId);
-    }
-    maxTimeoutId = timeoutId = trailingCall = undefined;
-    if (trailing || (maxWait !== wait)) {
-      lastCalled = now();
-      result = func.apply(thisArg, args);
-      if (!timeoutId && !maxTimeoutId) {
-        args = thisArg = null;
-      }
-    }
-  };
-
-  return function() {
-    args = arguments;
-    stamp = now();
-    thisArg = this;
-    trailingCall = trailing && (timeoutId || !leading);
-
-    if (maxWait === false) {
-      var leadingCall = leading && !timeoutId;
-    } else {
-      if (!maxTimeoutId && !leading) {
-        lastCalled = stamp;
-      }
-      var remaining = maxWait - (stamp - lastCalled),
-          isCalled = remaining <= 0;
-
-      if (isCalled) {
-        if (maxTimeoutId) {
-          maxTimeoutId = clearTimeout(maxTimeoutId);
-        }
-        lastCalled = stamp;
-        result = func.apply(thisArg, args);
-      }
-      else if (!maxTimeoutId) {
-        maxTimeoutId = setTimeout(maxDelayed, remaining);
-      }
-    }
-    if (isCalled && timeoutId) {
-      timeoutId = clearTimeout(timeoutId);
-    }
-    else if (!timeoutId && wait !== maxWait) {
-      timeoutId = setTimeout(delayed, wait);
-    }
-    if (leadingCall) {
-      isCalled = true;
-      result = func.apply(thisArg, args);
-    }
-    if (isCalled && !timeoutId && !maxTimeoutId) {
-      args = thisArg = null;
-    }
-    return result;
-  };
-}
-
-module.exports = debounce;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/functions/defer.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/functions/defer.js
deleted file mode 100644
index 7a7bf32..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/functions/defer.js
+++ /dev/null
@@ -1,35 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isFunction = require('../objects/isFunction'),
-    slice = require('../internals/slice');
-
-/**
- * Defers executing the `func` function until the current call stack has cleared.
- * Additional arguments will be provided to `func` when it is invoked.
- *
- * @static
- * @memberOf _
- * @category Functions
- * @param {Function} func The function to defer.
- * @param {...*} [arg] Arguments to invoke the function with.
- * @returns {number} Returns the timer id.
- * @example
- *
- * _.defer(function(text) { console.log(text); }, 'deferred');
- * // logs 'deferred' after one or more milliseconds
- */
-function defer(func) {
-  if (!isFunction(func)) {
-    throw new TypeError;
-  }
-  var args = slice(arguments, 1);
-  return setTimeout(function() { func.apply(undefined, args); }, 1);
-}
-
-module.exports = defer;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/functions/delay.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/functions/delay.js
deleted file mode 100644
index 5a466ae..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/functions/delay.js
+++ /dev/null
@@ -1,36 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isFunction = require('../objects/isFunction'),
-    slice = require('../internals/slice');
-
-/**
- * Executes the `func` function after `wait` milliseconds. Additional arguments
- * will be provided to `func` when it is invoked.
- *
- * @static
- * @memberOf _
- * @category Functions
- * @param {Function} func The function to delay.
- * @param {number} wait The number of milliseconds to delay execution.
- * @param {...*} [arg] Arguments to invoke the function with.
- * @returns {number} Returns the timer id.
- * @example
- *
- * _.delay(function(text) { console.log(text); }, 1000, 'later');
- * // => logs 'later' after one second
- */
-function delay(func, wait) {
-  if (!isFunction(func)) {
-    throw new TypeError;
-  }
-  var args = slice(arguments, 2);
-  return setTimeout(function() { func.apply(undefined, args); }, wait);
-}
-
-module.exports = delay;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/functions/memoize.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/functions/memoize.js
deleted file mode 100644
index 4ba8192..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/functions/memoize.js
+++ /dev/null
@@ -1,71 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isFunction = require('../objects/isFunction'),
-    keyPrefix = require('../internals/keyPrefix');
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Native method shortcuts */
-var hasOwnProperty = objectProto.hasOwnProperty;
-
-/**
- * Creates a function that memoizes the result of `func`. If `resolver` is
- * provided it will be used to determine the cache key for storing the result
- * based on the arguments provided to the memoized function. By default, the
- * first argument provided to the memoized function is used as the cache key.
- * The `func` is executed with the `this` binding of the memoized function.
- * The result cache is exposed as the `cache` property on the memoized function.
- *
- * @static
- * @memberOf _
- * @category Functions
- * @param {Function} func The function to have its output memoized.
- * @param {Function} [resolver] A function used to resolve the cache key.
- * @returns {Function} Returns the new memoizing function.
- * @example
- *
- * var fibonacci = _.memoize(function(n) {
- *   return n < 2 ? n : fibonacci(n - 1) + fibonacci(n - 2);
- * });
- *
- * fibonacci(9)
- * // => 34
- *
- * var data = {
- *   'fred': { 'name': 'fred', 'age': 40 },
- *   'pebbles': { 'name': 'pebbles', 'age': 1 }
- * };
- *
- * // modifying the result cache
- * var get = _.memoize(function(name) { return data[name]; }, _.identity);
- * get('pebbles');
- * // => { 'name': 'pebbles', 'age': 1 }
- *
- * get.cache.pebbles.name = 'penelope';
- * get('pebbles');
- * // => { 'name': 'penelope', 'age': 1 }
- */
-function memoize(func, resolver) {
-  if (!isFunction(func)) {
-    throw new TypeError;
-  }
-  var memoized = function() {
-    var cache = memoized.cache,
-        key = resolver ? resolver.apply(this, arguments) : keyPrefix + arguments[0];
-
-    return hasOwnProperty.call(cache, key)
-      ? cache[key]
-      : (cache[key] = func.apply(this, arguments));
-  }
-  memoized.cache = {};
-  return memoized;
-}
-
-module.exports = memoize;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/functions/once.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/functions/once.js
deleted file mode 100644
index 6409810..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/functions/once.js
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isFunction = require('../objects/isFunction');
-
-/**
- * Creates a function that is restricted to execute `func` once. Repeat calls to
- * the function will return the value of the first call. The `func` is executed
- * with the `this` binding of the created function.
- *
- * @static
- * @memberOf _
- * @category Functions
- * @param {Function} func The function to restrict.
- * @returns {Function} Returns the new restricted function.
- * @example
- *
- * var initialize = _.once(createApplication);
- * initialize();
- * initialize();
- * // `initialize` executes `createApplication` once
- */
-function once(func) {
-  var ran,
-      result;
-
-  if (!isFunction(func)) {
-    throw new TypeError;
-  }
-  return function() {
-    if (ran) {
-      return result;
-    }
-    ran = true;
-    result = func.apply(this, arguments);
-
-    // clear the `func` variable so the function may be garbage collected
-    func = null;
-    return result;
-  };
-}
-
-module.exports = once;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/functions/partial.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/functions/partial.js
deleted file mode 100644
index 64ff0ee..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/functions/partial.js
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createWrapper = require('../internals/createWrapper'),
-    slice = require('../internals/slice');
-
-/**
- * Creates a function that, when called, invokes `func` with any additional
- * `partial` arguments prepended to those provided to the new function. This
- * method is similar to `_.bind` except it does **not** alter the `this` binding.
- *
- * @static
- * @memberOf _
- * @category Functions
- * @param {Function} func The function to partially apply arguments to.
- * @param {...*} [arg] Arguments to be partially applied.
- * @returns {Function} Returns the new partially applied function.
- * @example
- *
- * var greet = function(greeting, name) { return greeting + ' ' + name; };
- * var hi = _.partial(greet, 'hi');
- * hi('fred');
- * // => 'hi fred'
- */
-function partial(func) {
-  return createWrapper(func, 16, slice(arguments, 1));
-}
-
-module.exports = partial;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/functions/partialRight.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/functions/partialRight.js
deleted file mode 100644
index 3028819..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/functions/partialRight.js
+++ /dev/null
@@ -1,43 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createWrapper = require('../internals/createWrapper'),
-    slice = require('../internals/slice');
-
-/**
- * This method is like `_.partial` except that `partial` arguments are
- * appended to those provided to the new function.
- *
- * @static
- * @memberOf _
- * @category Functions
- * @param {Function} func The function to partially apply arguments to.
- * @param {...*} [arg] Arguments to be partially applied.
- * @returns {Function} Returns the new partially applied function.
- * @example
- *
- * var defaultsDeep = _.partialRight(_.merge, _.defaults);
- *
- * var options = {
- *   'variable': 'data',
- *   'imports': { 'jq': $ }
- * };
- *
- * defaultsDeep(options, _.templateSettings);
- *
- * options.variable
- * // => 'data'
- *
- * options.imports
- * // => { '_': _, 'jq': $ }
- */
-function partialRight(func) {
-  return createWrapper(func, 32, null, slice(arguments, 1));
-}
-
-module.exports = partialRight;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/functions/throttle.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/functions/throttle.js
deleted file mode 100644
index 8300c65..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/functions/throttle.js
+++ /dev/null
@@ -1,71 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var debounce = require('./debounce'),
-    isFunction = require('../objects/isFunction'),
-    isObject = require('../objects/isObject');
-
-/** Used as an internal `_.debounce` options object */
-var debounceOptions = {
-  'leading': false,
-  'maxWait': 0,
-  'trailing': false
-};
-
-/**
- * Creates a function that, when executed, will only call the `func` function
- * at most once per every `wait` milliseconds. Provide an options object to
- * indicate that `func` should be invoked on the leading and/or trailing edge
- * of the `wait` timeout. Subsequent calls to the throttled function will
- * return the result of the last `func` call.
- *
- * Note: If `leading` and `trailing` options are `true` `func` will be called
- * on the trailing edge of the timeout only if the the throttled function is
- * invoked more than once during the `wait` timeout.
- *
- * @static
- * @memberOf _
- * @category Functions
- * @param {Function} func The function to throttle.
- * @param {number} wait The number of milliseconds to throttle executions to.
- * @param {Object} [options] The options object.
- * @param {boolean} [options.leading=true] Specify execution on the leading edge of the timeout.
- * @param {boolean} [options.trailing=true] Specify execution on the trailing edge of the timeout.
- * @returns {Function} Returns the new throttled function.
- * @example
- *
- * // avoid excessively updating the position while scrolling
- * var throttled = _.throttle(updatePosition, 100);
- * jQuery(window).on('scroll', throttled);
- *
- * // execute `renewToken` when the click event is fired, but not more than once every 5 minutes
- * jQuery('.interactive').on('click', _.throttle(renewToken, 300000, {
- *   'trailing': false
- * }));
- */
-function throttle(func, wait, options) {
-  var leading = true,
-      trailing = true;
-
-  if (!isFunction(func)) {
-    throw new TypeError;
-  }
-  if (options === false) {
-    leading = false;
-  } else if (isObject(options)) {
-    leading = 'leading' in options ? options.leading : leading;
-    trailing = 'trailing' in options ? options.trailing : trailing;
-  }
-  debounceOptions.leading = leading;
-  debounceOptions.maxWait = wait;
-  debounceOptions.trailing = trailing;
-
-  return debounce(func, wait, debounceOptions);
-}
-
-module.exports = throttle;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/functions/wrap.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/functions/wrap.js
deleted file mode 100644
index 9168ffc..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/functions/wrap.js
+++ /dev/null
@@ -1,36 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createWrapper = require('../internals/createWrapper');
-
-/**
- * Creates a function that provides `value` to the wrapper function as its
- * first argument. Additional arguments provided to the function are appended
- * to those provided to the wrapper function. The wrapper is executed with
- * the `this` binding of the created function.
- *
- * @static
- * @memberOf _
- * @category Functions
- * @param {*} value The value to wrap.
- * @param {Function} wrapper The wrapper function.
- * @returns {Function} Returns the new function.
- * @example
- *
- * var p = _.wrap(_.escape, function(func, text) {
- *   return '<p>' + func(text) + '</p>';
- * });
- *
- * p('Fred, Wilma, & Pebbles');
- * // => '<p>Fred, Wilma, &amp; Pebbles</p>'
- */
-function wrap(value, wrapper) {
-  return createWrapper(wrapper, 16, [value]);
-}
-
-module.exports = wrap;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/index.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/index.js
deleted file mode 100644
index cbea241..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/index.js
+++ /dev/null
@@ -1,376 +0,0 @@
-/**
- * @license
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var arrays = require('./arrays'),
-    chaining = require('./chaining'),
-    collections = require('./collections'),
-    functions = require('./functions'),
-    objects = require('./objects'),
-    utilities = require('./utilities'),
-    baseEach = require('./internals/baseEach'),
-    forOwn = require('./objects/forOwn'),
-    isArray = require('./objects/isArray'),
-    lodashWrapper = require('./internals/lodashWrapper'),
-    mixin = require('./utilities/mixin'),
-    support = require('./support'),
-    templateSettings = require('./utilities/templateSettings');
-
-/**
- * Used for `Array` method references.
- *
- * Normally `Array.prototype` would suffice, however, using an array literal
- * avoids issues in Narwhal.
- */
-var arrayRef = [];
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Native method shortcuts */
-var hasOwnProperty = objectProto.hasOwnProperty;
-
-/**
- * Creates a `lodash` object which wraps the given value to enable intuitive
- * method chaining.
- *
- * In addition to Lo-Dash methods, wrappers also have the following `Array` methods:
- * `concat`, `join`, `pop`, `push`, `reverse`, `shift`, `slice`, `sort`, `splice`,
- * and `unshift`
- *
- * Chaining is supported in custom builds as long as the `value` method is
- * implicitly or explicitly included in the build.
- *
- * The chainable wrapper functions are:
- * `after`, `assign`, `bind`, `bindAll`, `bindKey`, `chain`, `compact`,
- * `compose`, `concat`, `countBy`, `create`, `createCallback`, `curry`,
- * `debounce`, `defaults`, `defer`, `delay`, `difference`, `filter`, `flatten`,
- * `forEach`, `forEachRight`, `forIn`, `forInRight`, `forOwn`, `forOwnRight`,
- * `functions`, `groupBy`, `indexBy`, `initial`, `intersection`, `invert`,
- * `invoke`, `keys`, `map`, `max`, `memoize`, `merge`, `min`, `object`, `omit`,
- * `once`, `pairs`, `partial`, `partialRight`, `pick`, `pluck`, `pull`, `push`,
- * `range`, `reject`, `remove`, `rest`, `reverse`, `shuffle`, `slice`, `sort`,
- * `sortBy`, `splice`, `tap`, `throttle`, `times`, `toArray`, `transform`,
- * `union`, `uniq`, `unshift`, `unzip`, `values`, `where`, `without`, `wrap`,
- * and `zip`
- *
- * The non-chainable wrapper functions are:
- * `clone`, `cloneDeep`, `contains`, `escape`, `every`, `find`, `findIndex`,
- * `findKey`, `findLast`, `findLastIndex`, `findLastKey`, `has`, `identity`,
- * `indexOf`, `isArguments`, `isArray`, `isBoolean`, `isDate`, `isElement`,
- * `isEmpty`, `isEqual`, `isFinite`, `isFunction`, `isNaN`, `isNull`, `isNumber`,
- * `isObject`, `isPlainObject`, `isRegExp`, `isString`, `isUndefined`, `join`,
- * `lastIndexOf`, `mixin`, `noConflict`, `parseInt`, `pop`, `random`, `reduce`,
- * `reduceRight`, `result`, `shift`, `size`, `some`, `sortedIndex`, `runInContext`,
- * `template`, `unescape`, `uniqueId`, and `value`
- *
- * The wrapper functions `first` and `last` return wrapped values when `n` is
- * provided, otherwise they return unwrapped values.
- *
- * Explicit chaining can be enabled by using the `_.chain` method.
- *
- * @name _
- * @constructor
- * @category Chaining
- * @param {*} value The value to wrap in a `lodash` instance.
- * @returns {Object} Returns a `lodash` instance.
- * @example
- *
- * var wrapped = _([1, 2, 3]);
- *
- * // returns an unwrapped value
- * wrapped.reduce(function(sum, num) {
- *   return sum + num;
- * });
- * // => 6
- *
- * // returns a wrapped value
- * var squares = wrapped.map(function(num) {
- *   return num * num;
- * });
- *
- * _.isArray(squares);
- * // => false
- *
- * _.isArray(squares.value());
- * // => true
- */
-function lodash(value) {
-  // don't wrap if already wrapped, even if wrapped by a different `lodash` constructor
-  return (value && typeof value == 'object' && !isArray(value) && hasOwnProperty.call(value, '__wrapped__'))
-   ? value
-   : new lodashWrapper(value);
-}
-// ensure `new lodashWrapper` is an instance of `lodash`
-lodashWrapper.prototype = lodash.prototype;
-
-// wrap `_.mixin` so it works when provided only one argument
-mixin = (function(fn) {
-  var functions = objects.functions;
-  return function(object, source, options) {
-    if (!source || (!options && !functions(source).length)) {
-      if (options == null) {
-        options = source;
-      }
-      source = object;
-      object = lodash;
-    }
-    return fn(object, source, options);
-  };
-}(mixin));
-
-// add functions that return wrapped values when chaining
-lodash.after = functions.after;
-lodash.assign = objects.assign;
-lodash.at = collections.at;
-lodash.bind = functions.bind;
-lodash.bindAll = functions.bindAll;
-lodash.bindKey = functions.bindKey;
-lodash.chain = chaining.chain;
-lodash.compact = arrays.compact;
-lodash.compose = functions.compose;
-lodash.constant = utilities.constant;
-lodash.countBy = collections.countBy;
-lodash.create = objects.create;
-lodash.createCallback = functions.createCallback;
-lodash.curry = functions.curry;
-lodash.debounce = functions.debounce;
-lodash.defaults = objects.defaults;
-lodash.defer = functions.defer;
-lodash.delay = functions.delay;
-lodash.difference = arrays.difference;
-lodash.filter = collections.filter;
-lodash.flatten = arrays.flatten;
-lodash.forEach = collections.forEach;
-lodash.forEachRight = collections.forEachRight;
-lodash.forIn = objects.forIn;
-lodash.forInRight = objects.forInRight;
-lodash.forOwn = forOwn;
-lodash.forOwnRight = objects.forOwnRight;
-lodash.functions = objects.functions;
-lodash.groupBy = collections.groupBy;
-lodash.indexBy = collections.indexBy;
-lodash.initial = arrays.initial;
-lodash.intersection = arrays.intersection;
-lodash.invert = objects.invert;
-lodash.invoke = collections.invoke;
-lodash.keys = objects.keys;
-lodash.map = collections.map;
-lodash.mapValues = objects.mapValues;
-lodash.max = collections.max;
-lodash.memoize = functions.memoize;
-lodash.merge = objects.merge;
-lodash.min = collections.min;
-lodash.omit = objects.omit;
-lodash.once = functions.once;
-lodash.pairs = objects.pairs;
-lodash.partial = functions.partial;
-lodash.partialRight = functions.partialRight;
-lodash.pick = objects.pick;
-lodash.pluck = collections.pluck;
-lodash.property = utilities.property;
-lodash.pull = arrays.pull;
-lodash.range = arrays.range;
-lodash.reject = collections.reject;
-lodash.remove = arrays.remove;
-lodash.rest = arrays.rest;
-lodash.shuffle = collections.shuffle;
-lodash.sortBy = collections.sortBy;
-lodash.tap = chaining.tap;
-lodash.throttle = functions.throttle;
-lodash.times = utilities.times;
-lodash.toArray = collections.toArray;
-lodash.transform = objects.transform;
-lodash.union = arrays.union;
-lodash.uniq = arrays.uniq;
-lodash.values = objects.values;
-lodash.where = collections.where;
-lodash.without = arrays.without;
-lodash.wrap = functions.wrap;
-lodash.xor = arrays.xor;
-lodash.zip = arrays.zip;
-lodash.zipObject = arrays.zipObject;
-
-// add aliases
-lodash.collect = collections.map;
-lodash.drop = arrays.rest;
-lodash.each = collections.forEach;
-lodash.eachRight = collections.forEachRight;
-lodash.extend = objects.assign;
-lodash.methods = objects.functions;
-lodash.object = arrays.zipObject;
-lodash.select = collections.filter;
-lodash.tail = arrays.rest;
-lodash.unique = arrays.uniq;
-lodash.unzip = arrays.zip;
-
-// add functions to `lodash.prototype`
-mixin(lodash);
-
-// add functions that return unwrapped values when chaining
-lodash.clone = objects.clone;
-lodash.cloneDeep = objects.cloneDeep;
-lodash.contains = collections.contains;
-lodash.escape = utilities.escape;
-lodash.every = collections.every;
-lodash.find = collections.find;
-lodash.findIndex = arrays.findIndex;
-lodash.findKey = objects.findKey;
-lodash.findLast = collections.findLast;
-lodash.findLastIndex = arrays.findLastIndex;
-lodash.findLastKey = objects.findLastKey;
-lodash.has = objects.has;
-lodash.identity = utilities.identity;
-lodash.indexOf = arrays.indexOf;
-lodash.isArguments = objects.isArguments;
-lodash.isArray = isArray;
-lodash.isBoolean = objects.isBoolean;
-lodash.isDate = objects.isDate;
-lodash.isElement = objects.isElement;
-lodash.isEmpty = objects.isEmpty;
-lodash.isEqual = objects.isEqual;
-lodash.isFinite = objects.isFinite;
-lodash.isFunction = objects.isFunction;
-lodash.isNaN = objects.isNaN;
-lodash.isNull = objects.isNull;
-lodash.isNumber = objects.isNumber;
-lodash.isObject = objects.isObject;
-lodash.isPlainObject = objects.isPlainObject;
-lodash.isRegExp = objects.isRegExp;
-lodash.isString = objects.isString;
-lodash.isUndefined = objects.isUndefined;
-lodash.lastIndexOf = arrays.lastIndexOf;
-lodash.mixin = mixin;
-lodash.noConflict = utilities.noConflict;
-lodash.noop = utilities.noop;
-lodash.now = utilities.now;
-lodash.parseInt = utilities.parseInt;
-lodash.random = utilities.random;
-lodash.reduce = collections.reduce;
-lodash.reduceRight = collections.reduceRight;
-lodash.result = utilities.result;
-lodash.size = collections.size;
-lodash.some = collections.some;
-lodash.sortedIndex = arrays.sortedIndex;
-lodash.template = utilities.template;
-lodash.unescape = utilities.unescape;
-lodash.uniqueId = utilities.uniqueId;
-
-// add aliases
-lodash.all = collections.every;
-lodash.any = collections.some;
-lodash.detect = collections.find;
-lodash.findWhere = collections.find;
-lodash.foldl = collections.reduce;
-lodash.foldr = collections.reduceRight;
-lodash.include = collections.contains;
-lodash.inject = collections.reduce;
-
-mixin(function() {
-  var source = {}
-  forOwn(lodash, function(func, methodName) {
-    if (!lodash.prototype[methodName]) {
-      source[methodName] = func;
-    }
-  });
-  return source;
-}(), false);
-
-// add functions capable of returning wrapped and unwrapped values when chaining
-lodash.first = arrays.first;
-lodash.last = arrays.last;
-lodash.sample = collections.sample;
-
-// add aliases
-lodash.take = arrays.first;
-lodash.head = arrays.first;
-
-forOwn(lodash, function(func, methodName) {
-  var callbackable = methodName !== 'sample';
-  if (!lodash.prototype[methodName]) {
-    lodash.prototype[methodName]= function(n, guard) {
-      var chainAll = this.__chain__,
-          result = func(this.__wrapped__, n, guard);
-
-      return !chainAll && (n == null || (guard && !(callbackable && typeof n == 'function')))
-        ? result
-        : new lodashWrapper(result, chainAll);
-    };
-  }
-});
-
-/**
- * The semantic version number.
- *
- * @static
- * @memberOf _
- * @type string
- */
-lodash.VERSION = '2.4.1';
-
-// add "Chaining" functions to the wrapper
-lodash.prototype.chain = chaining.wrapperChain;
-lodash.prototype.toString = chaining.wrapperToString;
-lodash.prototype.value = chaining.wrapperValueOf;
-lodash.prototype.valueOf = chaining.wrapperValueOf;
-
-// add `Array` functions that return unwrapped values
-baseEach(['join', 'pop', 'shift'], function(methodName) {
-  var func = arrayRef[methodName];
-  lodash.prototype[methodName] = function() {
-    var chainAll = this.__chain__,
-        result = func.apply(this.__wrapped__, arguments);
-
-    return chainAll
-      ? new lodashWrapper(result, chainAll)
-      : result;
-  };
-});
-
-// add `Array` functions that return the existing wrapped value
-baseEach(['push', 'reverse', 'sort', 'unshift'], function(methodName) {
-  var func = arrayRef[methodName];
-  lodash.prototype[methodName] = function() {
-    func.apply(this.__wrapped__, arguments);
-    return this;
-  };
-});
-
-// add `Array` functions that return new wrapped values
-baseEach(['concat', 'slice', 'splice'], function(methodName) {
-  var func = arrayRef[methodName];
-  lodash.prototype[methodName] = function() {
-    return new lodashWrapper(func.apply(this.__wrapped__, arguments), this.__chain__);
-  };
-});
-
-// avoid array-like object bugs with `Array#shift` and `Array#splice`
-// in IE < 9, Firefox < 10, Narwhal, and RingoJS
-if (!support.spliceObjects) {
-  baseEach(['pop', 'shift', 'splice'], function(methodName) {
-    var func = arrayRef[methodName],
-        isSplice = methodName == 'splice';
-
-    lodash.prototype[methodName] = function() {
-      var chainAll = this.__chain__,
-          value = this.__wrapped__,
-          result = func.apply(value, arguments);
-
-      if (value.length === 0) {
-        delete value[0];
-      }
-      return (chainAll || isSplice)
-        ? new lodashWrapper(result, chainAll)
-        : result;
-    };
-  });
-}
-
-lodash.support = support;
-(lodash.templateSettings = utilities.templateSettings).imports._ = lodash;
-module.exports = lodash;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/arrayPool.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/arrayPool.js
deleted file mode 100644
index 56e34e5..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/arrayPool.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** Used to pool arrays and objects used internally */
-var arrayPool = [];
-
-module.exports = arrayPool;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/baseBind.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/baseBind.js
deleted file mode 100644
index 5e328f7..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/baseBind.js
+++ /dev/null
@@ -1,62 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseCreate = require('./baseCreate'),
-    isObject = require('../objects/isObject'),
-    setBindData = require('./setBindData'),
-    slice = require('./slice');
-
-/**
- * Used for `Array` method references.
- *
- * Normally `Array.prototype` would suffice, however, using an array literal
- * avoids issues in Narwhal.
- */
-var arrayRef = [];
-
-/** Native method shortcuts */
-var push = arrayRef.push;
-
-/**
- * The base implementation of `_.bind` that creates the bound function and
- * sets its meta data.
- *
- * @private
- * @param {Array} bindData The bind data array.
- * @returns {Function} Returns the new bound function.
- */
-function baseBind(bindData) {
-  var func = bindData[0],
-      partialArgs = bindData[2],
-      thisArg = bindData[4];
-
-  function bound() {
-    // `Function#bind` spec
-    // http://es5.github.io/#x15.3.4.5
-    if (partialArgs) {
-      // avoid `arguments` object deoptimizations by using `slice` instead
-      // of `Array.prototype.slice.call` and not assigning `arguments` to a
-      // variable as a ternary expression
-      var args = slice(partialArgs);
-      push.apply(args, arguments);
-    }
-    // mimic the constructor's `return` behavior
-    // http://es5.github.io/#x13.2.2
-    if (this instanceof bound) {
-      // ensure `new bound` is an instance of `func`
-      var thisBinding = baseCreate(func.prototype),
-          result = func.apply(thisBinding, args || arguments);
-      return isObject(result) ? result : thisBinding;
-    }
-    return func.apply(thisArg, args || arguments);
-  }
-  setBindData(bound, bindData);
-  return bound;
-}
-
-module.exports = baseBind;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/baseClone.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/baseClone.js
deleted file mode 100644
index fa262bf..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/baseClone.js
+++ /dev/null
@@ -1,154 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var assign = require('../objects/assign'),
-    baseEach = require('./baseEach'),
-    forOwn = require('../objects/forOwn'),
-    getArray = require('./getArray'),
-    isArray = require('../objects/isArray'),
-    isNode = require('./isNode'),
-    isObject = require('../objects/isObject'),
-    releaseArray = require('./releaseArray'),
-    slice = require('./slice'),
-    support = require('../support');
-
-/** Used to match regexp flags from their coerced string values */
-var reFlags = /\w*$/;
-
-/** `Object#toString` result shortcuts */
-var argsClass = '[object Arguments]',
-    arrayClass = '[object Array]',
-    boolClass = '[object Boolean]',
-    dateClass = '[object Date]',
-    funcClass = '[object Function]',
-    numberClass = '[object Number]',
-    objectClass = '[object Object]',
-    regexpClass = '[object RegExp]',
-    stringClass = '[object String]';
-
-/** Used to identify object classifications that `_.clone` supports */
-var cloneableClasses = {};
-cloneableClasses[funcClass] = false;
-cloneableClasses[argsClass] = cloneableClasses[arrayClass] =
-cloneableClasses[boolClass] = cloneableClasses[dateClass] =
-cloneableClasses[numberClass] = cloneableClasses[objectClass] =
-cloneableClasses[regexpClass] = cloneableClasses[stringClass] = true;
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Used to resolve the internal [[Class]] of values */
-var toString = objectProto.toString;
-
-/** Native method shortcuts */
-var hasOwnProperty = objectProto.hasOwnProperty;
-
-/** Used to lookup a built-in constructor by [[Class]] */
-var ctorByClass = {};
-ctorByClass[arrayClass] = Array;
-ctorByClass[boolClass] = Boolean;
-ctorByClass[dateClass] = Date;
-ctorByClass[funcClass] = Function;
-ctorByClass[objectClass] = Object;
-ctorByClass[numberClass] = Number;
-ctorByClass[regexpClass] = RegExp;
-ctorByClass[stringClass] = String;
-
-/**
- * The base implementation of `_.clone` without argument juggling or support
- * for `thisArg` binding.
- *
- * @private
- * @param {*} value The value to clone.
- * @param {boolean} [isDeep=false] Specify a deep clone.
- * @param {Function} [callback] The function to customize cloning values.
- * @param {Array} [stackA=[]] Tracks traversed source objects.
- * @param {Array} [stackB=[]] Associates clones with source counterparts.
- * @returns {*} Returns the cloned value.
- */
-function baseClone(value, isDeep, callback, stackA, stackB) {
-  if (callback) {
-    var result = callback(value);
-    if (typeof result != 'undefined') {
-      return result;
-    }
-  }
-  // inspect [[Class]]
-  var isObj = isObject(value);
-  if (isObj) {
-    var className = toString.call(value);
-    if (!cloneableClasses[className] || (!support.nodeClass && isNode(value))) {
-      return value;
-    }
-    var ctor = ctorByClass[className];
-    switch (className) {
-      case boolClass:
-      case dateClass:
-        return new ctor(+value);
-
-      case numberClass:
-      case stringClass:
-        return new ctor(value);
-
-      case regexpClass:
-        result = ctor(value.source, reFlags.exec(value));
-        result.lastIndex = value.lastIndex;
-        return result;
-    }
-  } else {
-    return value;
-  }
-  var isArr = isArray(value);
-  if (isDeep) {
-    // check for circular references and return corresponding clone
-    var initedStack = !stackA;
-    stackA || (stackA = getArray());
-    stackB || (stackB = getArray());
-
-    var length = stackA.length;
-    while (length--) {
-      if (stackA[length] == value) {
-        return stackB[length];
-      }
-    }
-    result = isArr ? ctor(value.length) : {};
-  }
-  else {
-    result = isArr ? slice(value) : assign({}, value);
-  }
-  // add array properties assigned by `RegExp#exec`
-  if (isArr) {
-    if (hasOwnProperty.call(value, 'index')) {
-      result.index = value.index;
-    }
-    if (hasOwnProperty.call(value, 'input')) {
-      result.input = value.input;
-    }
-  }
-  // exit for shallow clone
-  if (!isDeep) {
-    return result;
-  }
-  // add the source value to the stack of traversed objects
-  // and associate it with its clone
-  stackA.push(value);
-  stackB.push(result);
-
-  // recursively populate clone (susceptible to call stack limits)
-  (isArr ? baseEach : forOwn)(value, function(objValue, key) {
-    result[key] = baseClone(objValue, isDeep, callback, stackA, stackB);
-  });
-
-  if (initedStack) {
-    releaseArray(stackA);
-    releaseArray(stackB);
-  }
-  return result;
-}
-
-module.exports = baseClone;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/baseCreate.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/baseCreate.js
deleted file mode 100644
index 90fcd68..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/baseCreate.js
+++ /dev/null
@@ -1,42 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isNative = require('./isNative'),
-    isObject = require('../objects/isObject'),
-    noop = require('../utilities/noop');
-
-/* Native method shortcuts for methods with the same name as other `lodash` methods */
-var nativeCreate = isNative(nativeCreate = Object.create) && nativeCreate;
-
-/**
- * The base implementation of `_.create` without support for assigning
- * properties to the created object.
- *
- * @private
- * @param {Object} prototype The object to inherit from.
- * @returns {Object} Returns the new object.
- */
-function baseCreate(prototype, properties) {
-  return isObject(prototype) ? nativeCreate(prototype) : {};
-}
-// fallback for browsers without `Object.create`
-if (!nativeCreate) {
-  baseCreate = (function() {
-    function Object() {}
-    return function(prototype) {
-      if (isObject(prototype)) {
-        Object.prototype = prototype;
-        var result = new Object;
-        Object.prototype = null;
-      }
-      return result || global.Object();
-    };
-  }());
-}
-
-module.exports = baseCreate;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/baseCreateCallback.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/baseCreateCallback.js
deleted file mode 100644
index cb9657b..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/baseCreateCallback.js
+++ /dev/null
@@ -1,80 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var bind = require('../functions/bind'),
-    identity = require('../utilities/identity'),
-    setBindData = require('./setBindData'),
-    support = require('../support');
-
-/** Used to detected named functions */
-var reFuncName = /^\s*function[ \n\r\t]+\w/;
-
-/** Used to detect functions containing a `this` reference */
-var reThis = /\bthis\b/;
-
-/** Native method shortcuts */
-var fnToString = Function.prototype.toString;
-
-/**
- * The base implementation of `_.createCallback` without support for creating
- * "_.pluck" or "_.where" style callbacks.
- *
- * @private
- * @param {*} [func=identity] The value to convert to a callback.
- * @param {*} [thisArg] The `this` binding of the created callback.
- * @param {number} [argCount] The number of arguments the callback accepts.
- * @returns {Function} Returns a callback function.
- */
-function baseCreateCallback(func, thisArg, argCount) {
-  if (typeof func != 'function') {
-    return identity;
-  }
-  // exit early for no `thisArg` or already bound by `Function#bind`
-  if (typeof thisArg == 'undefined' || !('prototype' in func)) {
-    return func;
-  }
-  var bindData = func.__bindData__;
-  if (typeof bindData == 'undefined') {
-    if (support.funcNames) {
-      bindData = !func.name;
-    }
-    bindData = bindData || !support.funcDecomp;
-    if (!bindData) {
-      var source = fnToString.call(func);
-      if (!support.funcNames) {
-        bindData = !reFuncName.test(source);
-      }
-      if (!bindData) {
-        // checks if `func` references the `this` keyword and stores the result
-        bindData = reThis.test(source);
-        setBindData(func, bindData);
-      }
-    }
-  }
-  // exit early if there are no `this` references or `func` is bound
-  if (bindData === false || (bindData !== true && bindData[1] & 1)) {
-    return func;
-  }
-  switch (argCount) {
-    case 1: return function(value) {
-      return func.call(thisArg, value);
-    };
-    case 2: return function(a, b) {
-      return func.call(thisArg, a, b);
-    };
-    case 3: return function(value, index, collection) {
-      return func.call(thisArg, value, index, collection);
-    };
-    case 4: return function(accumulator, value, index, collection) {
-      return func.call(thisArg, accumulator, value, index, collection);
-    };
-  }
-  return bind(func, thisArg);
-}
-
-module.exports = baseCreateCallback;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/baseCreateWrapper.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/baseCreateWrapper.js
deleted file mode 100644
index 41bb35f..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/baseCreateWrapper.js
+++ /dev/null
@@ -1,78 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseCreate = require('./baseCreate'),
-    isObject = require('../objects/isObject'),
-    setBindData = require('./setBindData'),
-    slice = require('./slice');
-
-/**
- * Used for `Array` method references.
- *
- * Normally `Array.prototype` would suffice, however, using an array literal
- * avoids issues in Narwhal.
- */
-var arrayRef = [];
-
-/** Native method shortcuts */
-var push = arrayRef.push;
-
-/**
- * The base implementation of `createWrapper` that creates the wrapper and
- * sets its meta data.
- *
- * @private
- * @param {Array} bindData The bind data array.
- * @returns {Function} Returns the new function.
- */
-function baseCreateWrapper(bindData) {
-  var func = bindData[0],
-      bitmask = bindData[1],
-      partialArgs = bindData[2],
-      partialRightArgs = bindData[3],
-      thisArg = bindData[4],
-      arity = bindData[5];
-
-  var isBind = bitmask & 1,
-      isBindKey = bitmask & 2,
-      isCurry = bitmask & 4,
-      isCurryBound = bitmask & 8,
-      key = func;
-
-  function bound() {
-    var thisBinding = isBind ? thisArg : this;
-    if (partialArgs) {
-      var args = slice(partialArgs);
-      push.apply(args, arguments);
-    }
-    if (partialRightArgs || isCurry) {
-      args || (args = slice(arguments));
-      if (partialRightArgs) {
-        push.apply(args, partialRightArgs);
-      }
-      if (isCurry && args.length < arity) {
-        bitmask |= 16 & ~32;
-        return baseCreateWrapper([func, (isCurryBound ? bitmask : bitmask & ~3), args, null, thisArg, arity]);
-      }
-    }
-    args || (args = arguments);
-    if (isBindKey) {
-      func = thisBinding[key];
-    }
-    if (this instanceof bound) {
-      thisBinding = baseCreate(func.prototype);
-      var result = func.apply(thisBinding, args);
-      return isObject(result) ? result : thisBinding;
-    }
-    return func.apply(thisBinding, args);
-  }
-  setBindData(bound, bindData);
-  return bound;
-}
-
-module.exports = baseCreateWrapper;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/baseDifference.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/baseDifference.js
deleted file mode 100644
index cc32c28..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/baseDifference.js
+++ /dev/null
@@ -1,52 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseIndexOf = require('./baseIndexOf'),
-    cacheIndexOf = require('./cacheIndexOf'),
-    createCache = require('./createCache'),
-    largeArraySize = require('./largeArraySize'),
-    releaseObject = require('./releaseObject');
-
-/**
- * The base implementation of `_.difference` that accepts a single array
- * of values to exclude.
- *
- * @private
- * @param {Array} array The array to process.
- * @param {Array} [values] The array of values to exclude.
- * @returns {Array} Returns a new array of filtered values.
- */
-function baseDifference(array, values) {
-  var index = -1,
-      indexOf = baseIndexOf,
-      length = array ? array.length : 0,
-      isLarge = length >= largeArraySize,
-      result = [];
-
-  if (isLarge) {
-    var cache = createCache(values);
-    if (cache) {
-      indexOf = cacheIndexOf;
-      values = cache;
-    } else {
-      isLarge = false;
-    }
-  }
-  while (++index < length) {
-    var value = array[index];
-    if (indexOf(values, value) < 0) {
-      result.push(value);
-    }
-  }
-  if (isLarge) {
-    releaseObject(values);
-  }
-  return result;
-}
-
-module.exports = baseDifference;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/baseEach.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/baseEach.js
deleted file mode 100644
index 0c833bc..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/baseEach.js
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createIterator = require('./createIterator'),
-    eachIteratorOptions = require('./eachIteratorOptions');
-
-/**
- * A function compiled to iterate `arguments` objects, arrays, objects, and
- * strings consistenly across environments, executing the callback for each
- * element in the collection. The callback is bound to `thisArg` and invoked
- * with three arguments; (value, index|key, collection). Callbacks may exit
- * iteration early by explicitly returning `false`.
- *
- * @private
- * @type Function
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function} [callback=identity] The function called per iteration.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Array|Object|string} Returns `collection`.
- */
-var baseEach = createIterator(eachIteratorOptions);
-
-module.exports = baseEach;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/baseFlatten.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/baseFlatten.js
deleted file mode 100644
index aaad714..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/baseFlatten.js
+++ /dev/null
@@ -1,52 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isArguments = require('../objects/isArguments'),
-    isArray = require('../objects/isArray');
-
-/**
- * The base implementation of `_.flatten` without support for callback
- * shorthands or `thisArg` binding.
- *
- * @private
- * @param {Array} array The array to flatten.
- * @param {boolean} [isShallow=false] A flag to restrict flattening to a single level.
- * @param {boolean} [isStrict=false] A flag to restrict flattening to arrays and `arguments` objects.
- * @param {number} [fromIndex=0] The index to start from.
- * @returns {Array} Returns a new flattened array.
- */
-function baseFlatten(array, isShallow, isStrict, fromIndex) {
-  var index = (fromIndex || 0) - 1,
-      length = array ? array.length : 0,
-      result = [];
-
-  while (++index < length) {
-    var value = array[index];
-
-    if (value && typeof value == 'object' && typeof value.length == 'number'
-        && (isArray(value) || isArguments(value))) {
-      // recursively flatten arrays (susceptible to call stack limits)
-      if (!isShallow) {
-        value = baseFlatten(value, isShallow, isStrict);
-      }
-      var valIndex = -1,
-          valLength = value.length,
-          resIndex = result.length;
-
-      result.length += valLength;
-      while (++valIndex < valLength) {
-        result[resIndex++] = value[valIndex];
-      }
-    } else if (!isStrict) {
-      result.push(value);
-    }
-  }
-  return result;
-}
-
-module.exports = baseFlatten;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/baseIndexOf.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/baseIndexOf.js
deleted file mode 100644
index bb12119..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/baseIndexOf.js
+++ /dev/null
@@ -1,32 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * The base implementation of `_.indexOf` without support for binary searches
- * or `fromIndex` constraints.
- *
- * @private
- * @param {Array} array The array to search.
- * @param {*} value The value to search for.
- * @param {number} [fromIndex=0] The index to search from.
- * @returns {number} Returns the index of the matched value or `-1`.
- */
-function baseIndexOf(array, value, fromIndex) {
-  var index = (fromIndex || 0) - 1,
-      length = array ? array.length : 0;
-
-  while (++index < length) {
-    if (array[index] === value) {
-      return index;
-    }
-  }
-  return -1;
-}
-
-module.exports = baseIndexOf;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/baseIsEqual.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/baseIsEqual.js
deleted file mode 100644
index 79e26a9..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/baseIsEqual.js
+++ /dev/null
@@ -1,212 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var forIn = require('../objects/forIn'),
-    getArray = require('./getArray'),
-    isArguments = require('../objects/isArguments'),
-    isFunction = require('../objects/isFunction'),
-    isNode = require('./isNode'),
-    objectTypes = require('./objectTypes'),
-    releaseArray = require('./releaseArray'),
-    support = require('../support');
-
-/** `Object#toString` result shortcuts */
-var argsClass = '[object Arguments]',
-    arrayClass = '[object Array]',
-    boolClass = '[object Boolean]',
-    dateClass = '[object Date]',
-    numberClass = '[object Number]',
-    objectClass = '[object Object]',
-    regexpClass = '[object RegExp]',
-    stringClass = '[object String]';
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Used to resolve the internal [[Class]] of values */
-var toString = objectProto.toString;
-
-/** Native method shortcuts */
-var hasOwnProperty = objectProto.hasOwnProperty;
-
-/**
- * The base implementation of `_.isEqual`, without support for `thisArg` binding,
- * that allows partial "_.where" style comparisons.
- *
- * @private
- * @param {*} a The value to compare.
- * @param {*} b The other value to compare.
- * @param {Function} [callback] The function to customize comparing values.
- * @param {Function} [isWhere=false] A flag to indicate performing partial comparisons.
- * @param {Array} [stackA=[]] Tracks traversed `a` objects.
- * @param {Array} [stackB=[]] Tracks traversed `b` objects.
- * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
- */
-function baseIsEqual(a, b, callback, isWhere, stackA, stackB) {
-  // used to indicate that when comparing objects, `a` has at least the properties of `b`
-  if (callback) {
-    var result = callback(a, b);
-    if (typeof result != 'undefined') {
-      return !!result;
-    }
-  }
-  // exit early for identical values
-  if (a === b) {
-    // treat `+0` vs. `-0` as not equal
-    return a !== 0 || (1 / a == 1 / b);
-  }
-  var type = typeof a,
-      otherType = typeof b;
-
-  // exit early for unlike primitive values
-  if (a === a &&
-      !(a && objectTypes[type]) &&
-      !(b && objectTypes[otherType])) {
-    return false;
-  }
-  // exit early for `null` and `undefined` avoiding ES3's Function#call behavior
-  // http://es5.github.io/#x15.3.4.4
-  if (a == null || b == null) {
-    return a === b;
-  }
-  // compare [[Class]] names
-  var className = toString.call(a),
-      otherClass = toString.call(b);
-
-  if (className == argsClass) {
-    className = objectClass;
-  }
-  if (otherClass == argsClass) {
-    otherClass = objectClass;
-  }
-  if (className != otherClass) {
-    return false;
-  }
-  switch (className) {
-    case boolClass:
-    case dateClass:
-      // coerce dates and booleans to numbers, dates to milliseconds and booleans
-      // to `1` or `0` treating invalid dates coerced to `NaN` as not equal
-      return +a == +b;
-
-    case numberClass:
-      // treat `NaN` vs. `NaN` as equal
-      return (a != +a)
-        ? b != +b
-        // but treat `+0` vs. `-0` as not equal
-        : (a == 0 ? (1 / a == 1 / b) : a == +b);
-
-    case regexpClass:
-    case stringClass:
-      // coerce regexes to strings (http://es5.github.io/#x15.10.6.4)
-      // treat string primitives and their corresponding object instances as equal
-      return a == String(b);
-  }
-  var isArr = className == arrayClass;
-  if (!isArr) {
-    // unwrap any `lodash` wrapped values
-    var aWrapped = hasOwnProperty.call(a, '__wrapped__'),
-        bWrapped = hasOwnProperty.call(b, '__wrapped__');
-
-    if (aWrapped || bWrapped) {
-      return baseIsEqual(aWrapped ? a.__wrapped__ : a, bWrapped ? b.__wrapped__ : b, callback, isWhere, stackA, stackB);
-    }
-    // exit for functions and DOM nodes
-    if (className != objectClass || (!support.nodeClass && (isNode(a) || isNode(b)))) {
-      return false;
-    }
-    // in older versions of Opera, `arguments` objects have `Array` constructors
-    var ctorA = !support.argsObject && isArguments(a) ? Object : a.constructor,
-        ctorB = !support.argsObject && isArguments(b) ? Object : b.constructor;
-
-    // non `Object` object instances with different constructors are not equal
-    if (ctorA != ctorB &&
-          !(isFunction(ctorA) && ctorA instanceof ctorA && isFunction(ctorB) && ctorB instanceof ctorB) &&
-          ('constructor' in a && 'constructor' in b)
-        ) {
-      return false;
-    }
-  }
-  // assume cyclic structures are equal
-  // the algorithm for detecting cyclic structures is adapted from ES 5.1
-  // section 15.12.3, abstract operation `JO` (http://es5.github.io/#x15.12.3)
-  var initedStack = !stackA;
-  stackA || (stackA = getArray());
-  stackB || (stackB = getArray());
-
-  var length = stackA.length;
-  while (length--) {
-    if (stackA[length] == a) {
-      return stackB[length] == b;
-    }
-  }
-  var size = 0;
-  result = true;
-
-  // add `a` and `b` to the stack of traversed objects
-  stackA.push(a);
-  stackB.push(b);
-
-  // recursively compare objects and arrays (susceptible to call stack limits)
-  if (isArr) {
-    // compare lengths to determine if a deep comparison is necessary
-    length = a.length;
-    size = b.length;
-    result = size == length;
-
-    if (result || isWhere) {
-      // deep compare the contents, ignoring non-numeric properties
-      while (size--) {
-        var index = length,
-            value = b[size];
-
-        if (isWhere) {
-          while (index--) {
-            if ((result = baseIsEqual(a[index], value, callback, isWhere, stackA, stackB))) {
-              break;
-            }
-          }
-        } else if (!(result = baseIsEqual(a[size], value, callback, isWhere, stackA, stackB))) {
-          break;
-        }
-      }
-    }
-  }
-  else {
-    // deep compare objects using `forIn`, instead of `forOwn`, to avoid `Object.keys`
-    // which, in this case, is more costly
-    forIn(b, function(value, key, b) {
-      if (hasOwnProperty.call(b, key)) {
-        // count the number of properties.
-        size++;
-        // deep compare each property value.
-        return (result = hasOwnProperty.call(a, key) && baseIsEqual(a[key], value, callback, isWhere, stackA, stackB));
-      }
-    });
-
-    if (result && !isWhere) {
-      // ensure both objects have the same number of properties
-      forIn(a, function(value, key, a) {
-        if (hasOwnProperty.call(a, key)) {
-          // `size` will be `-1` if `a` has more properties than `b`
-          return (result = --size > -1);
-        }
-      });
-    }
-  }
-  stackA.pop();
-  stackB.pop();
-
-  if (initedStack) {
-    releaseArray(stackA);
-    releaseArray(stackB);
-  }
-  return result;
-}
-
-module.exports = baseIsEqual;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/baseMerge.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/baseMerge.js
deleted file mode 100644
index f0dd885..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/baseMerge.js
+++ /dev/null
@@ -1,79 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var forEach = require('../collections/forEach'),
-    forOwn = require('../objects/forOwn'),
-    isArray = require('../objects/isArray'),
-    isPlainObject = require('../objects/isPlainObject');
-
-/**
- * The base implementation of `_.merge` without argument juggling or support
- * for `thisArg` binding.
- *
- * @private
- * @param {Object} object The destination object.
- * @param {Object} source The source object.
- * @param {Function} [callback] The function to customize merging properties.
- * @param {Array} [stackA=[]] Tracks traversed source objects.
- * @param {Array} [stackB=[]] Associates values with source counterparts.
- */
-function baseMerge(object, source, callback, stackA, stackB) {
-  (isArray(source) ? forEach : forOwn)(source, function(source, key) {
-    var found,
-        isArr,
-        result = source,
-        value = object[key];
-
-    if (source && ((isArr = isArray(source)) || isPlainObject(source))) {
-      // avoid merging previously merged cyclic sources
-      var stackLength = stackA.length;
-      while (stackLength--) {
-        if ((found = stackA[stackLength] == source)) {
-          value = stackB[stackLength];
-          break;
-        }
-      }
-      if (!found) {
-        var isShallow;
-        if (callback) {
-          result = callback(value, source);
-          if ((isShallow = typeof result != 'undefined')) {
-            value = result;
-          }
-        }
-        if (!isShallow) {
-          value = isArr
-            ? (isArray(value) ? value : [])
-            : (isPlainObject(value) ? value : {});
-        }
-        // add `source` and associated `value` to the stack of traversed objects
-        stackA.push(source);
-        stackB.push(value);
-
-        // recursively merge objects and arrays (susceptible to call stack limits)
-        if (!isShallow) {
-          baseMerge(value, source, callback, stackA, stackB);
-        }
-      }
-    }
-    else {
-      if (callback) {
-        result = callback(value, source);
-        if (typeof result == 'undefined') {
-          result = source;
-        }
-      }
-      if (typeof result != 'undefined') {
-        value = result;
-      }
-    }
-    object[key] = value;
-  });
-}
-
-module.exports = baseMerge;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/baseRandom.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/baseRandom.js
deleted file mode 100644
index a9f12b9..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/baseRandom.js
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** Native method shortcuts */
-var floor = Math.floor;
-
-/* Native method shortcuts for methods with the same name as other `lodash` methods */
-var nativeRandom = Math.random;
-
-/**
- * The base implementation of `_.random` without argument juggling or support
- * for returning floating-point numbers.
- *
- * @private
- * @param {number} min The minimum possible value.
- * @param {number} max The maximum possible value.
- * @returns {number} Returns a random number.
- */
-function baseRandom(min, max) {
-  return min + floor(nativeRandom() * (max - min + 1));
-}
-
-module.exports = baseRandom;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/baseUniq.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/baseUniq.js
deleted file mode 100644
index 1d96d63..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/baseUniq.js
+++ /dev/null
@@ -1,64 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseIndexOf = require('./baseIndexOf'),
-    cacheIndexOf = require('./cacheIndexOf'),
-    createCache = require('./createCache'),
-    getArray = require('./getArray'),
-    largeArraySize = require('./largeArraySize'),
-    releaseArray = require('./releaseArray'),
-    releaseObject = require('./releaseObject');
-
-/**
- * The base implementation of `_.uniq` without support for callback shorthands
- * or `thisArg` binding.
- *
- * @private
- * @param {Array} array The array to process.
- * @param {boolean} [isSorted=false] A flag to indicate that `array` is sorted.
- * @param {Function} [callback] The function called per iteration.
- * @returns {Array} Returns a duplicate-value-free array.
- */
-function baseUniq(array, isSorted, callback) {
-  var index = -1,
-      indexOf = baseIndexOf,
-      length = array ? array.length : 0,
-      result = [];
-
-  var isLarge = !isSorted && length >= largeArraySize,
-      seen = (callback || isLarge) ? getArray() : result;
-
-  if (isLarge) {
-    var cache = createCache(seen);
-    indexOf = cacheIndexOf;
-    seen = cache;
-  }
-  while (++index < length) {
-    var value = array[index],
-        computed = callback ? callback(value, index, array) : value;
-
-    if (isSorted
-          ? !index || seen[seen.length - 1] !== computed
-          : indexOf(seen, computed) < 0
-        ) {
-      if (callback || isLarge) {
-        seen.push(computed);
-      }
-      result.push(value);
-    }
-  }
-  if (isLarge) {
-    releaseArray(seen.array);
-    releaseObject(seen);
-  } else if (callback) {
-    releaseArray(seen);
-  }
-  return result;
-}
-
-module.exports = baseUniq;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/cacheIndexOf.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/cacheIndexOf.js
deleted file mode 100644
index 7d540fd..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/cacheIndexOf.js
+++ /dev/null
@@ -1,39 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseIndexOf = require('./baseIndexOf'),
-    keyPrefix = require('./keyPrefix');
-
-/**
- * An implementation of `_.contains` for cache objects that mimics the return
- * signature of `_.indexOf` by returning `0` if the value is found, else `-1`.
- *
- * @private
- * @param {Object} cache The cache object to inspect.
- * @param {*} value The value to search for.
- * @returns {number} Returns `0` if `value` is found, else `-1`.
- */
-function cacheIndexOf(cache, value) {
-  var type = typeof value;
-  cache = cache.cache;
-
-  if (type == 'boolean' || value == null) {
-    return cache[value] ? 0 : -1;
-  }
-  if (type != 'number' && type != 'string') {
-    type = 'object';
-  }
-  var key = type == 'number' ? value : keyPrefix + value;
-  cache = (cache = cache[type]) && cache[key];
-
-  return type == 'object'
-    ? (cache && baseIndexOf(cache, value) > -1 ? 0 : -1)
-    : (cache ? 0 : -1);
-}
-
-module.exports = cacheIndexOf;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/cachePush.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/cachePush.js
deleted file mode 100644
index b16163a..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/cachePush.js
+++ /dev/null
@@ -1,38 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var keyPrefix = require('./keyPrefix');
-
-/**
- * Adds a given value to the corresponding cache object.
- *
- * @private
- * @param {*} value The value to add to the cache.
- */
-function cachePush(value) {
-  var cache = this.cache,
-      type = typeof value;
-
-  if (type == 'boolean' || value == null) {
-    cache[value] = true;
-  } else {
-    if (type != 'number' && type != 'string') {
-      type = 'object';
-    }
-    var key = type == 'number' ? value : keyPrefix + value,
-        typeCache = cache[type] || (cache[type] = {});
-
-    if (type == 'object') {
-      (typeCache[key] || (typeCache[key] = [])).push(value);
-    } else {
-      typeCache[key] = true;
-    }
-  }
-}
-
-module.exports = cachePush;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/charAtCallback.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/charAtCallback.js
deleted file mode 100644
index f754fe9..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/charAtCallback.js
+++ /dev/null
@@ -1,22 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * Used by `_.max` and `_.min` as the default callback when a given
- * collection is a string value.
- *
- * @private
- * @param {string} value The character to inspect.
- * @returns {number} Returns the code unit of given character.
- */
-function charAtCallback(value) {
-  return value.charCodeAt(0);
-}
-
-module.exports = charAtCallback;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/compareAscending.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/compareAscending.js
deleted file mode 100644
index 7387123..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/compareAscending.js
+++ /dev/null
@@ -1,47 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * Used by `sortBy` to compare transformed `collection` elements, stable sorting
- * them in ascending order.
- *
- * @private
- * @param {Object} a The object to compare to `b`.
- * @param {Object} b The object to compare to `a`.
- * @returns {number} Returns the sort order indicator of `1` or `-1`.
- */
-function compareAscending(a, b) {
-  var ac = a.criteria,
-      bc = b.criteria,
-      index = -1,
-      length = ac.length;
-
-  while (++index < length) {
-    var value = ac[index],
-        other = bc[index];
-
-    if (value !== other) {
-      if (value > other || typeof value == 'undefined') {
-        return 1;
-      }
-      if (value < other || typeof other == 'undefined') {
-        return -1;
-      }
-    }
-  }
-  // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications
-  // that causes it, under certain circumstances, to return the same value for
-  // `a` and `b`. See https://github.com/jashkenas/underscore/pull/1247
-  //
-  // This also ensures a stable sort in V8 and other engines.
-  // See http://code.google.com/p/v8/issues/detail?id=90
-  return a.index - b.index;
-}
-
-module.exports = compareAscending;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/createAggregator.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/createAggregator.js
deleted file mode 100644
index cef4290..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/createAggregator.js
+++ /dev/null
@@ -1,45 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseEach = require('./baseEach'),
-    createCallback = require('../functions/createCallback'),
-    isArray = require('../objects/isArray');
-
-/**
- * Creates a function that aggregates a collection, creating an object composed
- * of keys generated from the results of running each element of the collection
- * through a callback. The given `setter` function sets the keys and values
- * of the composed object.
- *
- * @private
- * @param {Function} setter The setter function.
- * @returns {Function} Returns the new aggregator function.
- */
-function createAggregator(setter) {
-  return function(collection, callback, thisArg) {
-    var result = {};
-    callback = createCallback(callback, thisArg, 3);
-
-    if (isArray(collection)) {
-      var index = -1,
-          length = collection.length;
-
-      while (++index < length) {
-        var value = collection[index];
-        setter(result, value, callback(value, index, collection), collection);
-      }
-    } else {
-      baseEach(collection, function(value, key, collection) {
-        setter(result, value, callback(value, key, collection), collection);
-      });
-    }
-    return result;
-  };
-}
-
-module.exports = createAggregator;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/createCache.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/createCache.js
deleted file mode 100644
index fb94745..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/createCache.js
+++ /dev/null
@@ -1,45 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var cachePush = require('./cachePush'),
-    getObject = require('./getObject'),
-    releaseObject = require('./releaseObject');
-
-/**
- * Creates a cache object to optimize linear searches of large arrays.
- *
- * @private
- * @param {Array} [array=[]] The array to search.
- * @returns {null|Object} Returns the cache object or `null` if caching should not be used.
- */
-function createCache(array) {
-  var index = -1,
-      length = array.length,
-      first = array[0],
-      mid = array[(length / 2) | 0],
-      last = array[length - 1];
-
-  if (first && typeof first == 'object' &&
-      mid && typeof mid == 'object' && last && typeof last == 'object') {
-    return false;
-  }
-  var cache = getObject();
-  cache['false'] = cache['null'] = cache['true'] = cache['undefined'] = false;
-
-  var result = getObject();
-  result.array = array;
-  result.cache = cache;
-  result.push = cachePush;
-
-  while (++index < length) {
-    result.push(array[index]);
-  }
-  return result;
-}
-
-module.exports = createCache;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/createIterator.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/createIterator.js
deleted file mode 100644
index 2dab121..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/createIterator.js
+++ /dev/null
@@ -1,127 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseCreateCallback = require('./baseCreateCallback'),
-    indicatorObject = require('./indicatorObject'),
-    isArguments = require('../objects/isArguments'),
-    isArray = require('../objects/isArray'),
-    isString = require('../objects/isString'),
-    iteratorTemplate = require('./iteratorTemplate'),
-    objectTypes = require('./objectTypes');
-
-/** Used to fix the JScript [[DontEnum]] bug */
-var shadowedProps = [
-  'constructor', 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable',
-  'toLocaleString', 'toString', 'valueOf'
-];
-
-/** `Object#toString` result shortcuts */
-var arrayClass = '[object Array]',
-    boolClass = '[object Boolean]',
-    dateClass = '[object Date]',
-    errorClass = '[object Error]',
-    funcClass = '[object Function]',
-    numberClass = '[object Number]',
-    objectClass = '[object Object]',
-    regexpClass = '[object RegExp]',
-    stringClass = '[object String]';
-
-/** Used as the data object for `iteratorTemplate` */
-var iteratorData = {
-  'args': '',
-  'array': null,
-  'bottom': '',
-  'firstArg': '',
-  'init': '',
-  'keys': null,
-  'loop': '',
-  'shadowedProps': null,
-  'support': null,
-  'top': '',
-  'useHas': false
-};
-
-/** Used for native method references */
-var errorProto = Error.prototype,
-    objectProto = Object.prototype,
-    stringProto = String.prototype;
-
-/** Used to resolve the internal [[Class]] of values */
-var toString = objectProto.toString;
-
-/** Native method shortcuts */
-var hasOwnProperty = objectProto.hasOwnProperty;
-
-/** Used to avoid iterating non-enumerable properties in IE < 9 */
-var nonEnumProps = {};
-nonEnumProps[arrayClass] = nonEnumProps[dateClass] = nonEnumProps[numberClass] = { 'constructor': true, 'toLocaleString': true, 'toString': true, 'valueOf': true };
-nonEnumProps[boolClass] = nonEnumProps[stringClass] = { 'constructor': true, 'toString': true, 'valueOf': true };
-nonEnumProps[errorClass] = nonEnumProps[funcClass] = nonEnumProps[regexpClass] = { 'constructor': true, 'toString': true };
-nonEnumProps[objectClass] = { 'constructor': true };
-
-(function() {
-  var length = shadowedProps.length;
-  while (length--) {
-    var key = shadowedProps[length];
-    for (var className in nonEnumProps) {
-      if (hasOwnProperty.call(nonEnumProps, className) && !hasOwnProperty.call(nonEnumProps[className], key)) {
-        nonEnumProps[className][key] = false;
-      }
-    }
-  }
-}());
-
-/**
- * Creates compiled iteration functions.
- *
- * @private
- * @param {...Object} [options] The compile options object(s).
- * @param {string} [options.array] Code to determine if the iterable is an array or array-like.
- * @param {boolean} [options.useHas] Specify using `hasOwnProperty` checks in the object loop.
- * @param {Function} [options.keys] A reference to `_.keys` for use in own property iteration.
- * @param {string} [options.args] A comma separated string of iteration function arguments.
- * @param {string} [options.top] Code to execute before the iteration branches.
- * @param {string} [options.loop] Code to execute in the object loop.
- * @param {string} [options.bottom] Code to execute after the iteration branches.
- * @returns {Function} Returns the compiled function.
- */
-function createIterator() {
-  // data properties
-  iteratorData.shadowedProps = shadowedProps;
-
-  // iterator options
-  iteratorData.array = iteratorData.bottom = iteratorData.loop = iteratorData.top = '';
-  iteratorData.init = 'iterable';
-  iteratorData.useHas = true;
-
-  // merge options into a template data object
-  for (var object, index = 0; object = arguments[index]; index++) {
-    for (var key in object) {
-      iteratorData[key] = object[key];
-    }
-  }
-  var args = iteratorData.args;
-  iteratorData.firstArg = /^[^,]+/.exec(args)[0];
-
-  // create the function factory
-  var factory = Function(
-      'baseCreateCallback, errorClass, errorProto, hasOwnProperty, ' +
-      'indicatorObject, isArguments, isArray, isString, keys, objectProto, ' +
-      'objectTypes, nonEnumProps, stringClass, stringProto, toString',
-    'return function(' + args + ') {\n' + iteratorTemplate(iteratorData) + '\n}'
-  );
-
-  // return the compiled function
-  return factory(
-    baseCreateCallback, errorClass, errorProto, hasOwnProperty,
-    indicatorObject, isArguments, isArray, isString, iteratorData.keys, objectProto,
-    objectTypes, nonEnumProps, stringClass, stringProto, toString
-  );
-}
-
-module.exports = createIterator;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/createWrapper.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/createWrapper.js
deleted file mode 100644
index 2525e10..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/createWrapper.js
+++ /dev/null
@@ -1,106 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseBind = require('./baseBind'),
-    baseCreateWrapper = require('./baseCreateWrapper'),
-    isFunction = require('../objects/isFunction'),
-    slice = require('./slice');
-
-/**
- * Used for `Array` method references.
- *
- * Normally `Array.prototype` would suffice, however, using an array literal
- * avoids issues in Narwhal.
- */
-var arrayRef = [];
-
-/** Native method shortcuts */
-var push = arrayRef.push,
-    unshift = arrayRef.unshift;
-
-/**
- * Creates a function that, when called, either curries or invokes `func`
- * with an optional `this` binding and partially applied arguments.
- *
- * @private
- * @param {Function|string} func The function or method name to reference.
- * @param {number} bitmask The bitmask of method flags to compose.
- *  The bitmask may be composed of the following flags:
- *  1 - `_.bind`
- *  2 - `_.bindKey`
- *  4 - `_.curry`
- *  8 - `_.curry` (bound)
- *  16 - `_.partial`
- *  32 - `_.partialRight`
- * @param {Array} [partialArgs] An array of arguments to prepend to those
- *  provided to the new function.
- * @param {Array} [partialRightArgs] An array of arguments to append to those
- *  provided to the new function.
- * @param {*} [thisArg] The `this` binding of `func`.
- * @param {number} [arity] The arity of `func`.
- * @returns {Function} Returns the new function.
- */
-function createWrapper(func, bitmask, partialArgs, partialRightArgs, thisArg, arity) {
-  var isBind = bitmask & 1,
-      isBindKey = bitmask & 2,
-      isCurry = bitmask & 4,
-      isCurryBound = bitmask & 8,
-      isPartial = bitmask & 16,
-      isPartialRight = bitmask & 32;
-
-  if (!isBindKey && !isFunction(func)) {
-    throw new TypeError;
-  }
-  if (isPartial && !partialArgs.length) {
-    bitmask &= ~16;
-    isPartial = partialArgs = false;
-  }
-  if (isPartialRight && !partialRightArgs.length) {
-    bitmask &= ~32;
-    isPartialRight = partialRightArgs = false;
-  }
-  var bindData = func && func.__bindData__;
-  if (bindData && bindData !== true) {
-    // clone `bindData`
-    bindData = slice(bindData);
-    if (bindData[2]) {
-      bindData[2] = slice(bindData[2]);
-    }
-    if (bindData[3]) {
-      bindData[3] = slice(bindData[3]);
-    }
-    // set `thisBinding` is not previously bound
-    if (isBind && !(bindData[1] & 1)) {
-      bindData[4] = thisArg;
-    }
-    // set if previously bound but not currently (subsequent curried functions)
-    if (!isBind && bindData[1] & 1) {
-      bitmask |= 8;
-    }
-    // set curried arity if not yet set
-    if (isCurry && !(bindData[1] & 4)) {
-      bindData[5] = arity;
-    }
-    // append partial left arguments
-    if (isPartial) {
-      push.apply(bindData[2] || (bindData[2] = []), partialArgs);
-    }
-    // append partial right arguments
-    if (isPartialRight) {
-      unshift.apply(bindData[3] || (bindData[3] = []), partialRightArgs);
-    }
-    // merge flags
-    bindData[1] |= bitmask;
-    return createWrapper.apply(null, bindData);
-  }
-  // fast path for `_.bind`
-  var creater = (bitmask == 1 || bitmask === 17) ? baseBind : baseCreateWrapper;
-  return creater([func, bitmask, partialArgs, partialRightArgs, thisArg, arity]);
-}
-
-module.exports = createWrapper;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/defaultsIteratorOptions.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/defaultsIteratorOptions.js
deleted file mode 100644
index 97c87dd..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/defaultsIteratorOptions.js
+++ /dev/null
@@ -1,26 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var keys = require('../objects/keys');
-
-/** Reusable iterator options for `assign` and `defaults` */
-var defaultsIteratorOptions = {
-  'args': 'object, source, guard',
-  'top':
-    'var args = arguments,\n' +
-    '    argsIndex = 0,\n' +
-    "    argsLength = typeof guard == 'number' ? 2 : args.length;\n" +
-    'while (++argsIndex < argsLength) {\n' +
-    '  iterable = args[argsIndex];\n' +
-    '  if (iterable && objectTypes[typeof iterable]) {',
-  'keys': keys,
-  'loop': "if (typeof result[index] == 'undefined') result[index] = iterable[index]",
-  'bottom': '  }\n}'
-};
-
-module.exports = defaultsIteratorOptions;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/eachIteratorOptions.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/eachIteratorOptions.js
deleted file mode 100644
index 0112c82..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/eachIteratorOptions.js
+++ /dev/null
@@ -1,20 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var keys = require('../objects/keys');
-
-/** Reusable iterator options shared by `each`, `forIn`, and `forOwn` */
-var eachIteratorOptions = {
-  'args': 'collection, callback, thisArg',
-  'top': "callback = callback && typeof thisArg == 'undefined' ? callback : baseCreateCallback(callback, thisArg, 3)",
-  'array': "typeof length == 'number'",
-  'keys': keys,
-  'loop': 'if (callback(iterable[index], index, collection) === false) return result'
-};
-
-module.exports = eachIteratorOptions;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/escapeHtmlChar.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/escapeHtmlChar.js
deleted file mode 100644
index 10fe163..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/escapeHtmlChar.js
+++ /dev/null
@@ -1,22 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var htmlEscapes = require('./htmlEscapes');
-
-/**
- * Used by `escape` to convert characters to HTML entities.
- *
- * @private
- * @param {string} match The matched character to escape.
- * @returns {string} Returns the escaped character.
- */
-function escapeHtmlChar(match) {
-  return htmlEscapes[match];
-}
-
-module.exports = escapeHtmlChar;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/escapeStringChar.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/escapeStringChar.js
deleted file mode 100644
index 00ad70a..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/escapeStringChar.js
+++ /dev/null
@@ -1,33 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** Used to escape characters for inclusion in compiled string literals */
-var stringEscapes = {
-  '\\': '\\',
-  "'": "'",
-  '\n': 'n',
-  '\r': 'r',
-  '\t': 't',
-  '\u2028': 'u2028',
-  '\u2029': 'u2029'
-};
-
-/**
- * Used by `template` to escape characters for inclusion in compiled
- * string literals.
- *
- * @private
- * @param {string} match The matched character to escape.
- * @returns {string} Returns the escaped character.
- */
-function escapeStringChar(match) {
-  return '\\' + stringEscapes[match];
-}
-
-module.exports = escapeStringChar;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/forOwnIteratorOptions.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/forOwnIteratorOptions.js
deleted file mode 100644
index 831d622..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/forOwnIteratorOptions.js
+++ /dev/null
@@ -1,17 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var eachIteratorOptions = require('./eachIteratorOptions');
-
-/** Reusable iterator options for `forIn` and `forOwn` */
-var forOwnIteratorOptions = {
-  'top': 'if (!objectTypes[typeof iterable]) return result;\n' + eachIteratorOptions.top,
-  'array': false
-};
-
-module.exports = forOwnIteratorOptions;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/getArray.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/getArray.js
deleted file mode 100644
index 9420559..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/getArray.js
+++ /dev/null
@@ -1,21 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var arrayPool = require('./arrayPool');
-
-/**
- * Gets an array from the array pool or creates a new one if the pool is empty.
- *
- * @private
- * @returns {Array} The array from the pool.
- */
-function getArray() {
-  return arrayPool.pop() || [];
-}
-
-module.exports = getArray;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/getObject.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/getObject.js
deleted file mode 100644
index 67b0cb5..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/getObject.js
+++ /dev/null
@@ -1,35 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var objectPool = require('./objectPool');
-
-/**
- * Gets an object from the object pool or creates a new one if the pool is empty.
- *
- * @private
- * @returns {Object} The object from the pool.
- */
-function getObject() {
-  return objectPool.pop() || {
-    'array': null,
-    'cache': null,
-    'criteria': null,
-    'false': false,
-    'index': 0,
-    'null': false,
-    'number': null,
-    'object': null,
-    'push': null,
-    'string': null,
-    'true': false,
-    'undefined': false,
-    'value': null
-  };
-}
-
-module.exports = getObject;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/htmlEscapes.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/htmlEscapes.js
deleted file mode 100644
index 0fd6c1d..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/htmlEscapes.js
+++ /dev/null
@@ -1,26 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * Used to convert characters to HTML entities:
- *
- * Though the `>` character is escaped for symmetry, characters like `>` and `/`
- * don't require escaping in HTML and have no special meaning unless they're part
- * of a tag or an unquoted attribute value.
- * http://mathiasbynens.be/notes/ambiguous-ampersands (under "semi-related fun fact")
- */
-var htmlEscapes = {
-  '&': '&amp;',
-  '<': '&lt;',
-  '>': '&gt;',
-  '"': '&quot;',
-  "'": '&#39;'
-};
-
-module.exports = htmlEscapes;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/htmlUnescapes.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/htmlUnescapes.js
deleted file mode 100644
index 9401df9..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/htmlUnescapes.js
+++ /dev/null
@@ -1,15 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var htmlEscapes = require('./htmlEscapes'),
-    invert = require('../objects/invert');
-
-/** Used to convert HTML entities to characters */
-var htmlUnescapes = invert(htmlEscapes);
-
-module.exports = htmlUnescapes;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/indicatorObject.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/indicatorObject.js
deleted file mode 100644
index a0f71ef..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/indicatorObject.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** Used internally to indicate various things */
-var indicatorObject = {};
-
-module.exports = indicatorObject;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/isNative.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/isNative.js
deleted file mode 100644
index 8d729ff..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/isNative.js
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Used to resolve the internal [[Class]] of values */
-var toString = objectProto.toString;
-
-/** Used to detect if a method is native */
-var reNative = RegExp('^' +
-  String(toString)
-    .replace(/[.*+?^${}()|[\]\\]/g, '\\$&')
-    .replace(/toString| for [^\]]+/g, '.*?') + '$'
-);
-
-/**
- * Checks if `value` is a native function.
- *
- * @private
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if the `value` is a native function, else `false`.
- */
-function isNative(value) {
-  return typeof value == 'function' && reNative.test(value);
-}
-
-module.exports = isNative;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/isNode.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/isNode.js
deleted file mode 100644
index 50c5c06..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/isNode.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * Checks if `value` is a DOM node in IE < 9.
- *
- * @private
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if the `value` is a DOM node, else `false`.
- */
-function isNode(value) {
-  // IE < 9 presents DOM nodes as `Object` objects except they have `toString`
-  // methods that are `typeof` "string" and still can coerce nodes to strings
-  return typeof value.toString != 'function' && typeof (value + '') == 'string';
-}
-
-module.exports = isNode;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/iteratorTemplate.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/iteratorTemplate.js
deleted file mode 100644
index e5526dc..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/iteratorTemplate.js
+++ /dev/null
@@ -1,109 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var support = require('../support');
-
-/**
- * The template used to create iterator functions.
- *
- * @private
- * @param {Object} data The data object used to populate the text.
- * @returns {string} Returns the interpolated text.
- */
-var iteratorTemplate = function(obj) {
-
-  var __p = 'var index, iterable = ' +
-  (obj.firstArg) +
-  ', result = ' +
-  (obj.init) +
-  ';\nif (!iterable) return result;\n' +
-  (obj.top) +
-  ';';
-   if (obj.array) {
-  __p += '\nvar length = iterable.length; index = -1;\nif (' +
-  (obj.array) +
-  ') {  ';
-   if (support.unindexedChars) {
-  __p += '\n  if (isString(iterable)) {\n    iterable = iterable.split(\'\')\n  }  ';
-   }
-  __p += '\n  while (++index < length) {\n    ' +
-  (obj.loop) +
-  ';\n  }\n}\nelse {  ';
-   } else if (support.nonEnumArgs) {
-  __p += '\n  var length = iterable.length; index = -1;\n  if (length && isArguments(iterable)) {\n    while (++index < length) {\n      index += \'\';\n      ' +
-  (obj.loop) +
-  ';\n    }\n  } else {  ';
-   }
-
-   if (support.enumPrototypes) {
-  __p += '\n  var skipProto = typeof iterable == \'function\';\n  ';
-   }
-
-   if (support.enumErrorProps) {
-  __p += '\n  var skipErrorProps = iterable === errorProto || iterable instanceof Error;\n  ';
-   }
-
-      var conditions = [];    if (support.enumPrototypes) { conditions.push('!(skipProto && index == "prototype")'); }    if (support.enumErrorProps)  { conditions.push('!(skipErrorProps && (index == "message" || index == "name"))'); }
-
-   if (obj.useHas && obj.keys) {
-  __p += '\n  var ownIndex = -1,\n      ownProps = objectTypes[typeof iterable] && keys(iterable),\n      length = ownProps ? ownProps.length : 0;\n\n  while (++ownIndex < length) {\n    index = ownProps[ownIndex];\n';
-      if (conditions.length) {
-  __p += '    if (' +
-  (conditions.join(' && ')) +
-  ') {\n  ';
-   }
-  __p +=
-  (obj.loop) +
-  ';    ';
-   if (conditions.length) {
-  __p += '\n    }';
-   }
-  __p += '\n  }  ';
-   } else {
-  __p += '\n  for (index in iterable) {\n';
-      if (obj.useHas) { conditions.push("hasOwnProperty.call(iterable, index)"); }    if (conditions.length) {
-  __p += '    if (' +
-  (conditions.join(' && ')) +
-  ') {\n  ';
-   }
-  __p +=
-  (obj.loop) +
-  ';    ';
-   if (conditions.length) {
-  __p += '\n    }';
-   }
-  __p += '\n  }    ';
-   if (support.nonEnumShadows) {
-  __p += '\n\n  if (iterable !== objectProto) {\n    var ctor = iterable.constructor,\n        isProto = iterable === (ctor && ctor.prototype),\n        className = iterable === stringProto ? stringClass : iterable === errorProto ? errorClass : toString.call(iterable),\n        nonEnum = nonEnumProps[className];\n      ';
-   for (k = 0; k < 7; k++) {
-  __p += '\n    index = \'' +
-  (obj.shadowedProps[k]) +
-  '\';\n    if ((!(isProto && nonEnum[index]) && hasOwnProperty.call(iterable, index))';
-          if (!obj.useHas) {
-  __p += ' || (!nonEnum[index] && iterable[index] !== objectProto[index])';
-   }
-  __p += ') {\n      ' +
-  (obj.loop) +
-  ';\n    }      ';
-   }
-  __p += '\n  }    ';
-   }
-
-   }
-
-   if (obj.array || support.nonEnumArgs) {
-  __p += '\n}';
-   }
-  __p +=
-  (obj.bottom) +
-  ';\nreturn result';
-
-  return __p
-};
-
-module.exports = iteratorTemplate;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/keyPrefix.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/keyPrefix.js
deleted file mode 100644
index be57f36..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/keyPrefix.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** Used to prefix keys to avoid issues with `__proto__` and properties on `Object.prototype` */
-var keyPrefix = +new Date + '';
-
-module.exports = keyPrefix;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/largeArraySize.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/largeArraySize.js
deleted file mode 100644
index b61e52d..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/largeArraySize.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** Used as the size when optimizations are enabled for large arrays */
-var largeArraySize = 75;
-
-module.exports = largeArraySize;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/lodashWrapper.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/lodashWrapper.js
deleted file mode 100644
index b8d2442..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/lodashWrapper.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * A fast path for creating `lodash` wrapper objects.
- *
- * @private
- * @param {*} value The value to wrap in a `lodash` instance.
- * @param {boolean} chainAll A flag to enable chaining for all methods
- * @returns {Object} Returns a `lodash` instance.
- */
-function lodashWrapper(value, chainAll) {
-  this.__chain__ = !!chainAll;
-  this.__wrapped__ = value;
-}
-
-module.exports = lodashWrapper;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/maxPoolSize.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/maxPoolSize.js
deleted file mode 100644
index 600c92b..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/maxPoolSize.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** Used as the max size of the `arrayPool` and `objectPool` */
-var maxPoolSize = 40;
-
-module.exports = maxPoolSize;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/objectPool.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/objectPool.js
deleted file mode 100644
index ab798f1..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/objectPool.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** Used to pool arrays and objects used internally */
-var objectPool = [];
-
-module.exports = objectPool;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/objectTypes.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/objectTypes.js
deleted file mode 100644
index 42a9573..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/objectTypes.js
+++ /dev/null
@@ -1,20 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** Used to determine if values are of the language type Object */
-var objectTypes = {
-  'boolean': false,
-  'function': true,
-  'object': true,
-  'number': false,
-  'string': false,
-  'undefined': false
-};
-
-module.exports = objectTypes;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/reEscapedHtml.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/reEscapedHtml.js
deleted file mode 100644
index 311180d..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/reEscapedHtml.js
+++ /dev/null
@@ -1,15 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var htmlUnescapes = require('./htmlUnescapes'),
-    keys = require('../objects/keys');
-
-/** Used to match HTML entities and HTML characters */
-var reEscapedHtml = RegExp('(' + keys(htmlUnescapes).join('|') + ')', 'g');
-
-module.exports = reEscapedHtml;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/reInterpolate.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/reInterpolate.js
deleted file mode 100644
index 18287e4..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/reInterpolate.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** Used to match "interpolate" template delimiters */
-var reInterpolate = /<%=([\s\S]+?)%>/g;
-
-module.exports = reInterpolate;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/reUnescapedHtml.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/reUnescapedHtml.js
deleted file mode 100644
index 10d1871..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/reUnescapedHtml.js
+++ /dev/null
@@ -1,15 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var htmlEscapes = require('./htmlEscapes'),
-    keys = require('../objects/keys');
-
-/** Used to match HTML entities and HTML characters */
-var reUnescapedHtml = RegExp('[' + keys(htmlEscapes).join('') + ']', 'g');
-
-module.exports = reUnescapedHtml;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/releaseArray.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/releaseArray.js
deleted file mode 100644
index 2c7ccba..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/releaseArray.js
+++ /dev/null
@@ -1,25 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var arrayPool = require('./arrayPool'),
-    maxPoolSize = require('./maxPoolSize');
-
-/**
- * Releases the given array back to the array pool.
- *
- * @private
- * @param {Array} [array] The array to release.
- */
-function releaseArray(array) {
-  array.length = 0;
-  if (arrayPool.length < maxPoolSize) {
-    arrayPool.push(array);
-  }
-}
-
-module.exports = releaseArray;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/releaseObject.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/releaseObject.js
deleted file mode 100644
index 6ab3d91..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/releaseObject.js
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var maxPoolSize = require('./maxPoolSize'),
-    objectPool = require('./objectPool');
-
-/**
- * Releases the given object back to the object pool.
- *
- * @private
- * @param {Object} [object] The object to release.
- */
-function releaseObject(object) {
-  var cache = object.cache;
-  if (cache) {
-    releaseObject(cache);
-  }
-  object.array = object.cache = object.criteria = object.object = object.number = object.string = object.value = null;
-  if (objectPool.length < maxPoolSize) {
-    objectPool.push(object);
-  }
-}
-
-module.exports = releaseObject;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/setBindData.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/setBindData.js
deleted file mode 100644
index f12bd86..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/setBindData.js
+++ /dev/null
@@ -1,43 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isNative = require('./isNative'),
-    noop = require('../utilities/noop');
-
-/** Used as the property descriptor for `__bindData__` */
-var descriptor = {
-  'configurable': false,
-  'enumerable': false,
-  'value': null,
-  'writable': false
-};
-
-/** Used to set meta data on functions */
-var defineProperty = (function() {
-  // IE 8 only accepts DOM elements
-  try {
-    var o = {},
-        func = isNative(func = Object.defineProperty) && func,
-        result = func(o, o, o) && func;
-  } catch(e) { }
-  return result;
-}());
-
-/**
- * Sets `this` binding data on a given function.
- *
- * @private
- * @param {Function} func The function to set data on.
- * @param {Array} value The data array to set.
- */
-var setBindData = !defineProperty ? noop : function(func, value) {
-  descriptor.value = value;
-  defineProperty(func, '__bindData__', descriptor);
-};
-
-module.exports = setBindData;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/shimIsPlainObject.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/shimIsPlainObject.js
deleted file mode 100644
index 32bf0f0..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/shimIsPlainObject.js
+++ /dev/null
@@ -1,67 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var forIn = require('../objects/forIn'),
-    isArguments = require('../objects/isArguments'),
-    isFunction = require('../objects/isFunction'),
-    isNode = require('./isNode'),
-    support = require('../support');
-
-/** `Object#toString` result shortcuts */
-var objectClass = '[object Object]';
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Used to resolve the internal [[Class]] of values */
-var toString = objectProto.toString;
-
-/** Native method shortcuts */
-var hasOwnProperty = objectProto.hasOwnProperty;
-
-/**
- * A fallback implementation of `isPlainObject` which checks if a given value
- * is an object created by the `Object` constructor, assuming objects created
- * by the `Object` constructor have no inherited enumerable properties and that
- * there are no `Object.prototype` extensions.
- *
- * @private
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.
- */
-function shimIsPlainObject(value) {
-  var ctor,
-      result;
-
-  // avoid non Object objects, `arguments` objects, and DOM elements
-  if (!(value && toString.call(value) == objectClass) ||
-      (ctor = value.constructor, isFunction(ctor) && !(ctor instanceof ctor)) ||
-      (!support.argsClass && isArguments(value)) ||
-      (!support.nodeClass && isNode(value))) {
-    return false;
-  }
-  // IE < 9 iterates inherited properties before own properties. If the first
-  // iterated property is an object's own property then there are no inherited
-  // enumerable properties.
-  if (support.ownLast) {
-    forIn(value, function(value, key, object) {
-      result = hasOwnProperty.call(object, key);
-      return false;
-    });
-    return result !== false;
-  }
-  // In most environments an object's own properties are iterated before
-  // its inherited properties. If the last iterated property is an object's
-  // own property then there are no inherited enumerable properties.
-  forIn(value, function(value, key) {
-    result = key;
-  });
-  return typeof result == 'undefined' || hasOwnProperty.call(value, result);
-}
-
-module.exports = shimIsPlainObject;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/shimKeys.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/shimKeys.js
deleted file mode 100644
index 6d70860..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/shimKeys.js
+++ /dev/null
@@ -1,27 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createIterator = require('./createIterator');
-
-/**
- * A fallback implementation of `Object.keys` which produces an array of the
- * given object's own enumerable property names.
- *
- * @private
- * @type Function
- * @param {Object} object The object to inspect.
- * @returns {Array} Returns an array of property names.
- */
-var shimKeys = createIterator({
-  'args': 'object',
-  'init': '[]',
-  'top': 'if (!(objectTypes[typeof object])) return result',
-  'loop': 'result.push(index)'
-});
-
-module.exports = shimKeys;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/slice.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/slice.js
deleted file mode 100644
index 2f8318b..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/slice.js
+++ /dev/null
@@ -1,38 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * Slices the `collection` from the `start` index up to, but not including,
- * the `end` index.
- *
- * Note: This function is used instead of `Array#slice` to support node lists
- * in IE < 9 and to ensure dense arrays are returned.
- *
- * @private
- * @param {Array|Object|string} collection The collection to slice.
- * @param {number} start The start index.
- * @param {number} end The end index.
- * @returns {Array} Returns the new array.
- */
-function slice(array, start, end) {
-  start || (start = 0);
-  if (typeof end == 'undefined') {
-    end = array ? array.length : 0;
-  }
-  var index = -1,
-      length = end - start || 0,
-      result = Array(length < 0 ? 0 : length);
-
-  while (++index < length) {
-    result[index] = array[start + index];
-  }
-  return result;
-}
-
-module.exports = slice;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/unescapeHtmlChar.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/unescapeHtmlChar.js
deleted file mode 100644
index 3b8fd57..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/internals/unescapeHtmlChar.js
+++ /dev/null
@@ -1,22 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var htmlUnescapes = require('./htmlUnescapes');
-
-/**
- * Used by `unescape` to convert HTML entities to characters.
- *
- * @private
- * @param {string} match The matched character to unescape.
- * @returns {string} Returns the unescaped character.
- */
-function unescapeHtmlChar(match) {
-  return htmlUnescapes[match];
-}
-
-module.exports = unescapeHtmlChar;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects.js
deleted file mode 100644
index dca0d30..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects.js
+++ /dev/null
@@ -1,52 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-module.exports = {
-  'assign': require('./objects/assign'),
-  'clone': require('./objects/clone'),
-  'cloneDeep': require('./objects/cloneDeep'),
-  'create': require('./objects/create'),
-  'defaults': require('./objects/defaults'),
-  'extend': require('./objects/assign'),
-  'findKey': require('./objects/findKey'),
-  'findLastKey': require('./objects/findLastKey'),
-  'forIn': require('./objects/forIn'),
-  'forInRight': require('./objects/forInRight'),
-  'forOwn': require('./objects/forOwn'),
-  'forOwnRight': require('./objects/forOwnRight'),
-  'functions': require('./objects/functions'),
-  'has': require('./objects/has'),
-  'invert': require('./objects/invert'),
-  'isArguments': require('./objects/isArguments'),
-  'isArray': require('./objects/isArray'),
-  'isBoolean': require('./objects/isBoolean'),
-  'isDate': require('./objects/isDate'),
-  'isElement': require('./objects/isElement'),
-  'isEmpty': require('./objects/isEmpty'),
-  'isEqual': require('./objects/isEqual'),
-  'isFinite': require('./objects/isFinite'),
-  'isFunction': require('./objects/isFunction'),
-  'isNaN': require('./objects/isNaN'),
-  'isNull': require('./objects/isNull'),
-  'isNumber': require('./objects/isNumber'),
-  'isObject': require('./objects/isObject'),
-  'isPlainObject': require('./objects/isPlainObject'),
-  'isRegExp': require('./objects/isRegExp'),
-  'isString': require('./objects/isString'),
-  'isUndefined': require('./objects/isUndefined'),
-  'keys': require('./objects/keys'),
-  'mapValues': require('./objects/mapValues'),
-  'merge': require('./objects/merge'),
-  'methods': require('./objects/functions'),
-  'omit': require('./objects/omit'),
-  'pairs': require('./objects/pairs'),
-  'pick': require('./objects/pick'),
-  'transform': require('./objects/transform'),
-  'values': require('./objects/values')
-};
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/assign.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/assign.js
deleted file mode 100644
index 73f88ae..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/assign.js
+++ /dev/null
@@ -1,55 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createIterator = require('../internals/createIterator'),
-    defaultsIteratorOptions = require('../internals/defaultsIteratorOptions');
-
-/**
- * Assigns own enumerable properties of source object(s) to the destination
- * object. Subsequent sources will overwrite property assignments of previous
- * sources. If a callback is provided it will be executed to produce the
- * assigned values. The callback is bound to `thisArg` and invoked with two
- * arguments; (objectValue, sourceValue).
- *
- * @static
- * @memberOf _
- * @type Function
- * @alias extend
- * @category Objects
- * @param {Object} object The destination object.
- * @param {...Object} [source] The source objects.
- * @param {Function} [callback] The function to customize assigning values.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Object} Returns the destination object.
- * @example
- *
- * _.assign({ 'name': 'fred' }, { 'employer': 'slate' });
- * // => { 'name': 'fred', 'employer': 'slate' }
- *
- * var defaults = _.partialRight(_.assign, function(a, b) {
- *   return typeof a == 'undefined' ? b : a;
- * });
- *
- * var object = { 'name': 'barney' };
- * defaults(object, { 'name': 'fred', 'employer': 'slate' });
- * // => { 'name': 'barney', 'employer': 'slate' }
- */
-var assign = createIterator(defaultsIteratorOptions, {
-  'top':
-    defaultsIteratorOptions.top.replace(';',
-      ';\n' +
-      "if (argsLength > 3 && typeof args[argsLength - 2] == 'function') {\n" +
-      '  var callback = baseCreateCallback(args[--argsLength - 1], args[argsLength--], 2);\n' +
-      "} else if (argsLength > 2 && typeof args[argsLength - 1] == 'function') {\n" +
-      '  callback = args[--argsLength];\n' +
-      '}'
-    ),
-  'loop': 'result[index] = callback ? callback(result[index], iterable[index]) : iterable[index]'
-});
-
-module.exports = assign;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/clone.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/clone.js
deleted file mode 100644
index c81b204..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/clone.js
+++ /dev/null
@@ -1,63 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseClone = require('../internals/baseClone'),
-    baseCreateCallback = require('../internals/baseCreateCallback');
-
-/**
- * Creates a clone of `value`. If `isDeep` is `true` nested objects will also
- * be cloned, otherwise they will be assigned by reference. If a callback
- * is provided it will be executed to produce the cloned values. If the
- * callback returns `undefined` cloning will be handled by the method instead.
- * The callback is bound to `thisArg` and invoked with one argument; (value).
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {*} value The value to clone.
- * @param {boolean} [isDeep=false] Specify a deep clone.
- * @param {Function} [callback] The function to customize cloning values.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {*} Returns the cloned value.
- * @example
- *
- * var characters = [
- *   { 'name': 'barney', 'age': 36 },
- *   { 'name': 'fred',   'age': 40 }
- * ];
- *
- * var shallow = _.clone(characters);
- * shallow[0] === characters[0];
- * // => true
- *
- * var deep = _.clone(characters, true);
- * deep[0] === characters[0];
- * // => false
- *
- * _.mixin({
- *   'clone': _.partialRight(_.clone, function(value) {
- *     return _.isElement(value) ? value.cloneNode(false) : undefined;
- *   })
- * });
- *
- * var clone = _.clone(document.body);
- * clone.childNodes.length;
- * // => 0
- */
-function clone(value, isDeep, callback, thisArg) {
-  // allows working with "Collections" methods without using their `index`
-  // and `collection` arguments for `isDeep` and `callback`
-  if (typeof isDeep != 'boolean' && isDeep != null) {
-    thisArg = callback;
-    callback = isDeep;
-    isDeep = false;
-  }
-  return baseClone(value, isDeep, typeof callback == 'function' && baseCreateCallback(callback, thisArg, 1));
-}
-
-module.exports = clone;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/cloneDeep.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/cloneDeep.js
deleted file mode 100644
index 922214e..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/cloneDeep.js
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseClone = require('../internals/baseClone'),
-    baseCreateCallback = require('../internals/baseCreateCallback');
-
-/**
- * Creates a deep clone of `value`. If a callback is provided it will be
- * executed to produce the cloned values. If the callback returns `undefined`
- * cloning will be handled by the method instead. The callback is bound to
- * `thisArg` and invoked with one argument; (value).
- *
- * Note: This method is loosely based on the structured clone algorithm. Functions
- * and DOM nodes are **not** cloned. The enumerable properties of `arguments` objects and
- * objects created by constructors other than `Object` are cloned to plain `Object` objects.
- * See http://www.w3.org/TR/html5/infrastructure.html#internal-structured-cloning-algorithm.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {*} value The value to deep clone.
- * @param {Function} [callback] The function to customize cloning values.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {*} Returns the deep cloned value.
- * @example
- *
- * var characters = [
- *   { 'name': 'barney', 'age': 36 },
- *   { 'name': 'fred',   'age': 40 }
- * ];
- *
- * var deep = _.cloneDeep(characters);
- * deep[0] === characters[0];
- * // => false
- *
- * var view = {
- *   'label': 'docs',
- *   'node': element
- * };
- *
- * var clone = _.cloneDeep(view, function(value) {
- *   return _.isElement(value) ? value.cloneNode(true) : undefined;
- * });
- *
- * clone.node == view.node;
- * // => false
- */
-function cloneDeep(value, callback, thisArg) {
-  return baseClone(value, true, typeof callback == 'function' && baseCreateCallback(callback, thisArg, 1));
-}
-
-module.exports = cloneDeep;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/create.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/create.js
deleted file mode 100644
index ec60f54..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/create.js
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var assign = require('./assign'),
-    baseCreate = require('../internals/baseCreate');
-
-/**
- * Creates an object that inherits from the given `prototype` object. If a
- * `properties` object is provided its own enumerable properties are assigned
- * to the created object.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {Object} prototype The object to inherit from.
- * @param {Object} [properties] The properties to assign to the object.
- * @returns {Object} Returns the new object.
- * @example
- *
- * function Shape() {
- *   this.x = 0;
- *   this.y = 0;
- * }
- *
- * function Circle() {
- *   Shape.call(this);
- * }
- *
- * Circle.prototype = _.create(Shape.prototype, { 'constructor': Circle });
- *
- * var circle = new Circle;
- * circle instanceof Circle;
- * // => true
- *
- * circle instanceof Shape;
- * // => true
- */
-function create(prototype, properties) {
-  var result = baseCreate(prototype);
-  return properties ? assign(result, properties) : result;
-}
-
-module.exports = create;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/defaults.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/defaults.js
deleted file mode 100644
index 64b5f4d..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/defaults.js
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createIterator = require('../internals/createIterator'),
-    defaultsIteratorOptions = require('../internals/defaultsIteratorOptions');
-
-/**
- * Assigns own enumerable properties of source object(s) to the destination
- * object for all destination properties that resolve to `undefined`. Once a
- * property is set, additional defaults of the same property will be ignored.
- *
- * @static
- * @memberOf _
- * @type Function
- * @category Objects
- * @param {Object} object The destination object.
- * @param {...Object} [source] The source objects.
- * @param- {Object} [guard] Allows working with `_.reduce` without using its
- *  `key` and `object` arguments as sources.
- * @returns {Object} Returns the destination object.
- * @example
- *
- * var object = { 'name': 'barney' };
- * _.defaults(object, { 'name': 'fred', 'employer': 'slate' });
- * // => { 'name': 'barney', 'employer': 'slate' }
- */
-var defaults = createIterator(defaultsIteratorOptions);
-
-module.exports = defaults;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/findKey.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/findKey.js
deleted file mode 100644
index 65a06d3..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/findKey.js
+++ /dev/null
@@ -1,65 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback'),
-    forOwn = require('./forOwn');
-
-/**
- * This method is like `_.findIndex` except that it returns the key of the
- * first element that passes the callback check, instead of the element itself.
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {Object} object The object to search.
- * @param {Function|Object|string} [callback=identity] The function called per
- *  iteration. If a property name or object is provided it will be used to
- *  create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {string|undefined} Returns the key of the found element, else `undefined`.
- * @example
- *
- * var characters = {
- *   'barney': {  'age': 36, 'blocked': false },
- *   'fred': {    'age': 40, 'blocked': true },
- *   'pebbles': { 'age': 1,  'blocked': false }
- * };
- *
- * _.findKey(characters, function(chr) {
- *   return chr.age < 40;
- * });
- * // => 'barney' (property order is not guaranteed across environments)
- *
- * // using "_.where" callback shorthand
- * _.findKey(characters, { 'age': 1 });
- * // => 'pebbles'
- *
- * // using "_.pluck" callback shorthand
- * _.findKey(characters, 'blocked');
- * // => 'fred'
- */
-function findKey(object, callback, thisArg) {
-  var result;
-  callback = createCallback(callback, thisArg, 3);
-  forOwn(object, function(value, key, object) {
-    if (callback(value, key, object)) {
-      result = key;
-      return false;
-    }
-  });
-  return result;
-}
-
-module.exports = findKey;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/findLastKey.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/findLastKey.js
deleted file mode 100644
index 86ca4dd..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/findLastKey.js
+++ /dev/null
@@ -1,65 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback'),
-    forOwnRight = require('./forOwnRight');
-
-/**
- * This method is like `_.findKey` except that it iterates over elements
- * of a `collection` in the opposite order.
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {Object} object The object to search.
- * @param {Function|Object|string} [callback=identity] The function called per
- *  iteration. If a property name or object is provided it will be used to
- *  create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {string|undefined} Returns the key of the found element, else `undefined`.
- * @example
- *
- * var characters = {
- *   'barney': {  'age': 36, 'blocked': true },
- *   'fred': {    'age': 40, 'blocked': false },
- *   'pebbles': { 'age': 1,  'blocked': true }
- * };
- *
- * _.findLastKey(characters, function(chr) {
- *   return chr.age < 40;
- * });
- * // => returns `pebbles`, assuming `_.findKey` returns `barney`
- *
- * // using "_.where" callback shorthand
- * _.findLastKey(characters, { 'age': 40 });
- * // => 'fred'
- *
- * // using "_.pluck" callback shorthand
- * _.findLastKey(characters, 'blocked');
- * // => 'pebbles'
- */
-function findLastKey(object, callback, thisArg) {
-  var result;
-  callback = createCallback(callback, thisArg, 3);
-  forOwnRight(object, function(value, key, object) {
-    if (callback(value, key, object)) {
-      result = key;
-      return false;
-    }
-  });
-  return result;
-}
-
-module.exports = findLastKey;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/forIn.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/forIn.js
deleted file mode 100644
index 8f0c0f9..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/forIn.js
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createIterator = require('../internals/createIterator'),
-    eachIteratorOptions = require('../internals/eachIteratorOptions'),
-    forOwnIteratorOptions = require('../internals/forOwnIteratorOptions');
-
-/**
- * Iterates over own and inherited enumerable properties of an object,
- * executing the callback for each property. The callback is bound to `thisArg`
- * and invoked with three arguments; (value, key, object). Callbacks may exit
- * iteration early by explicitly returning `false`.
- *
- * @static
- * @memberOf _
- * @type Function
- * @category Objects
- * @param {Object} object The object to iterate over.
- * @param {Function} [callback=identity] The function called per iteration.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Object} Returns `object`.
- * @example
- *
- * function Shape() {
- *   this.x = 0;
- *   this.y = 0;
- * }
- *
- * Shape.prototype.move = function(x, y) {
- *   this.x += x;
- *   this.y += y;
- * };
- *
- * _.forIn(new Shape, function(value, key) {
- *   console.log(key);
- * });
- * // => logs 'x', 'y', and 'move' (property order is not guaranteed across environments)
- */
-var forIn = createIterator(eachIteratorOptions, forOwnIteratorOptions, {
-  'useHas': false
-});
-
-module.exports = forIn;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/forInRight.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/forInRight.js
deleted file mode 100644
index 2cdabf5..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/forInRight.js
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseCreateCallback = require('../internals/baseCreateCallback'),
-    forIn = require('./forIn');
-
-/**
- * This method is like `_.forIn` except that it iterates over elements
- * of a `collection` in the opposite order.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {Object} object The object to iterate over.
- * @param {Function} [callback=identity] The function called per iteration.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Object} Returns `object`.
- * @example
- *
- * function Shape() {
- *   this.x = 0;
- *   this.y = 0;
- * }
- *
- * Shape.prototype.move = function(x, y) {
- *   this.x += x;
- *   this.y += y;
- * };
- *
- * _.forInRight(new Shape, function(value, key) {
- *   console.log(key);
- * });
- * // => logs 'move', 'y', and 'x' assuming `_.forIn ` logs 'x', 'y', and 'move'
- */
-function forInRight(object, callback, thisArg) {
-  var pairs = [];
-
-  forIn(object, function(value, key) {
-    pairs.push(key, value);
-  });
-
-  var length = pairs.length;
-  callback = baseCreateCallback(callback, thisArg, 3);
-  while (length--) {
-    if (callback(pairs[length--], pairs[length], object) === false) {
-      break;
-    }
-  }
-  return object;
-}
-
-module.exports = forInRight;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/forOwn.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/forOwn.js
deleted file mode 100644
index a4ab74c..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/forOwn.js
+++ /dev/null
@@ -1,36 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createIterator = require('../internals/createIterator'),
-    eachIteratorOptions = require('../internals/eachIteratorOptions'),
-    forOwnIteratorOptions = require('../internals/forOwnIteratorOptions');
-
-/**
- * Iterates over own enumerable properties of an object, executing the callback
- * for each property. The callback is bound to `thisArg` and invoked with three
- * arguments; (value, key, object). Callbacks may exit iteration early by
- * explicitly returning `false`.
- *
- * @static
- * @memberOf _
- * @type Function
- * @category Objects
- * @param {Object} object The object to iterate over.
- * @param {Function} [callback=identity] The function called per iteration.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Object} Returns `object`.
- * @example
- *
- * _.forOwn({ '0': 'zero', '1': 'one', 'length': 2 }, function(num, key) {
- *   console.log(key);
- * });
- * // => logs '0', '1', and 'length' (property order is not guaranteed across environments)
- */
-var forOwn = createIterator(eachIteratorOptions, forOwnIteratorOptions);
-
-module.exports = forOwn;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/forOwnRight.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/forOwnRight.js
deleted file mode 100644
index 5d1e3b9..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/forOwnRight.js
+++ /dev/null
@@ -1,44 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseCreateCallback = require('../internals/baseCreateCallback'),
-    keys = require('./keys');
-
-/**
- * This method is like `_.forOwn` except that it iterates over elements
- * of a `collection` in the opposite order.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {Object} object The object to iterate over.
- * @param {Function} [callback=identity] The function called per iteration.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Object} Returns `object`.
- * @example
- *
- * _.forOwnRight({ '0': 'zero', '1': 'one', 'length': 2 }, function(num, key) {
- *   console.log(key);
- * });
- * // => logs 'length', '1', and '0' assuming `_.forOwn` logs '0', '1', and 'length'
- */
-function forOwnRight(object, callback, thisArg) {
-  var props = keys(object),
-      length = props.length;
-
-  callback = baseCreateCallback(callback, thisArg, 3);
-  while (length--) {
-    var key = props[length];
-    if (callback(object[key], key, object) === false) {
-      break;
-    }
-  }
-  return object;
-}
-
-module.exports = forOwnRight;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/functions.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/functions.js
deleted file mode 100644
index 3b78842..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/functions.js
+++ /dev/null
@@ -1,37 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var forIn = require('./forIn'),
-    isFunction = require('./isFunction');
-
-/**
- * Creates a sorted array of property names of all enumerable properties,
- * own and inherited, of `object` that have function values.
- *
- * @static
- * @memberOf _
- * @alias methods
- * @category Objects
- * @param {Object} object The object to inspect.
- * @returns {Array} Returns an array of property names that have function values.
- * @example
- *
- * _.functions(_);
- * // => ['all', 'any', 'bind', 'bindAll', 'clone', 'compact', 'compose', ...]
- */
-function functions(object) {
-  var result = [];
-  forIn(object, function(value, key) {
-    if (isFunction(value)) {
-      result.push(key);
-    }
-  });
-  return result.sort();
-}
-
-module.exports = functions;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/has.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/has.js
deleted file mode 100644
index 055689c..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/has.js
+++ /dev/null
@@ -1,35 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Native method shortcuts */
-var hasOwnProperty = objectProto.hasOwnProperty;
-
-/**
- * Checks if the specified property name exists as a direct property of `object`,
- * instead of an inherited property.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {Object} object The object to inspect.
- * @param {string} key The name of the property to check.
- * @returns {boolean} Returns `true` if key is a direct property, else `false`.
- * @example
- *
- * _.has({ 'a': 1, 'b': 2, 'c': 3 }, 'b');
- * // => true
- */
-function has(object, key) {
-  return object ? hasOwnProperty.call(object, key) : false;
-}
-
-module.exports = has;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/invert.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/invert.js
deleted file mode 100644
index a623f7c..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/invert.js
+++ /dev/null
@@ -1,37 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var keys = require('./keys');
-
-/**
- * Creates an object composed of the inverted keys and values of the given object.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {Object} object The object to invert.
- * @returns {Object} Returns the created inverted object.
- * @example
- *
- * _.invert({ 'first': 'fred', 'second': 'barney' });
- * // => { 'fred': 'first', 'barney': 'second' }
- */
-function invert(object) {
-  var index = -1,
-      props = keys(object),
-      length = props.length,
-      result = {};
-
-  while (++index < length) {
-    var key = props[index];
-    result[object[key]] = key;
-  }
-  return result;
-}
-
-module.exports = invert;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/isArguments.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/isArguments.js
deleted file mode 100644
index 7efc264..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/isArguments.js
+++ /dev/null
@@ -1,52 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var support = require('../support');
-
-/** `Object#toString` result shortcuts */
-var argsClass = '[object Arguments]';
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Used to resolve the internal [[Class]] of values */
-var toString = objectProto.toString;
-
-/** Native method shortcuts */
-var hasOwnProperty = objectProto.hasOwnProperty,
-    propertyIsEnumerable = objectProto.propertyIsEnumerable;
-
-/**
- * Checks if `value` is an `arguments` object.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if the `value` is an `arguments` object, else `false`.
- * @example
- *
- * (function() { return _.isArguments(arguments); })(1, 2, 3);
- * // => true
- *
- * _.isArguments([1, 2, 3]);
- * // => false
- */
-function isArguments(value) {
-  return value && typeof value == 'object' && typeof value.length == 'number' &&
-    toString.call(value) == argsClass || false;
-}
-// fallback for browsers that can't detect `arguments` objects by [[Class]]
-if (!support.argsClass) {
-  isArguments = function(value) {
-    return value && typeof value == 'object' && typeof value.length == 'number' &&
-      hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee') || false;
-  };
-}
-
-module.exports = isArguments;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/isArray.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/isArray.js
deleted file mode 100644
index ceb9f39..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/isArray.js
+++ /dev/null
@@ -1,45 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isNative = require('../internals/isNative');
-
-/** `Object#toString` result shortcuts */
-var arrayClass = '[object Array]';
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Used to resolve the internal [[Class]] of values */
-var toString = objectProto.toString;
-
-/* Native method shortcuts for methods with the same name as other `lodash` methods */
-var nativeIsArray = isNative(nativeIsArray = Array.isArray) && nativeIsArray;
-
-/**
- * Checks if `value` is an array.
- *
- * @static
- * @memberOf _
- * @type Function
- * @category Objects
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if the `value` is an array, else `false`.
- * @example
- *
- * (function() { return _.isArray(arguments); })();
- * // => false
- *
- * _.isArray([1, 2, 3]);
- * // => true
- */
-var isArray = nativeIsArray || function(value) {
-  return value && typeof value == 'object' && typeof value.length == 'number' &&
-    toString.call(value) == arrayClass || false;
-};
-
-module.exports = isArray;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/isBoolean.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/isBoolean.js
deleted file mode 100644
index aa97cc4..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/isBoolean.js
+++ /dev/null
@@ -1,37 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** `Object#toString` result shortcuts */
-var boolClass = '[object Boolean]';
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Used to resolve the internal [[Class]] of values */
-var toString = objectProto.toString;
-
-/**
- * Checks if `value` is a boolean value.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if the `value` is a boolean value, else `false`.
- * @example
- *
- * _.isBoolean(null);
- * // => false
- */
-function isBoolean(value) {
-  return value === true || value === false ||
-    value && typeof value == 'object' && toString.call(value) == boolClass || false;
-}
-
-module.exports = isBoolean;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/isDate.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/isDate.js
deleted file mode 100644
index 9084a4c..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/isDate.js
+++ /dev/null
@@ -1,36 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** `Object#toString` result shortcuts */
-var dateClass = '[object Date]';
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Used to resolve the internal [[Class]] of values */
-var toString = objectProto.toString;
-
-/**
- * Checks if `value` is a date.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if the `value` is a date, else `false`.
- * @example
- *
- * _.isDate(new Date);
- * // => true
- */
-function isDate(value) {
-  return value && typeof value == 'object' && toString.call(value) == dateClass || false;
-}
-
-module.exports = isDate;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/isElement.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/isElement.js
deleted file mode 100644
index 9538278..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/isElement.js
+++ /dev/null
@@ -1,27 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * Checks if `value` is a DOM element.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if the `value` is a DOM element, else `false`.
- * @example
- *
- * _.isElement(document.body);
- * // => true
- */
-function isElement(value) {
-  return value && value.nodeType === 1 || false;
-}
-
-module.exports = isElement;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/isEmpty.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/isEmpty.js
deleted file mode 100644
index c9899e3..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/isEmpty.js
+++ /dev/null
@@ -1,66 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var forOwn = require('./forOwn'),
-    isArguments = require('./isArguments'),
-    isFunction = require('./isFunction'),
-    support = require('../support');
-
-/** `Object#toString` result shortcuts */
-var argsClass = '[object Arguments]',
-    arrayClass = '[object Array]',
-    objectClass = '[object Object]',
-    stringClass = '[object String]';
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Used to resolve the internal [[Class]] of values */
-var toString = objectProto.toString;
-
-/**
- * Checks if `value` is empty. Arrays, strings, or `arguments` objects with a
- * length of `0` and objects with no own enumerable properties are considered
- * "empty".
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {Array|Object|string} value The value to inspect.
- * @returns {boolean} Returns `true` if the `value` is empty, else `false`.
- * @example
- *
- * _.isEmpty([1, 2, 3]);
- * // => false
- *
- * _.isEmpty({});
- * // => true
- *
- * _.isEmpty('');
- * // => true
- */
-function isEmpty(value) {
-  var result = true;
-  if (!value) {
-    return result;
-  }
-  var className = toString.call(value),
-      length = value.length;
-
-  if ((className == arrayClass || className == stringClass ||
-      (support.argsClass ? className == argsClass : isArguments(value))) ||
-      (className == objectClass && typeof length == 'number' && isFunction(value.splice))) {
-    return !length;
-  }
-  forOwn(value, function() {
-    return (result = false);
-  });
-  return result;
-}
-
-module.exports = isEmpty;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/isEqual.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/isEqual.js
deleted file mode 100644
index fbb4960..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/isEqual.js
+++ /dev/null
@@ -1,54 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseCreateCallback = require('../internals/baseCreateCallback'),
-    baseIsEqual = require('../internals/baseIsEqual');
-
-/**
- * Performs a deep comparison between two values to determine if they are
- * equivalent to each other. If a callback is provided it will be executed
- * to compare values. If the callback returns `undefined` comparisons will
- * be handled by the method instead. The callback is bound to `thisArg` and
- * invoked with two arguments; (a, b).
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {*} a The value to compare.
- * @param {*} b The other value to compare.
- * @param {Function} [callback] The function to customize comparing values.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
- * @example
- *
- * var object = { 'name': 'fred' };
- * var copy = { 'name': 'fred' };
- *
- * object == copy;
- * // => false
- *
- * _.isEqual(object, copy);
- * // => true
- *
- * var words = ['hello', 'goodbye'];
- * var otherWords = ['hi', 'goodbye'];
- *
- * _.isEqual(words, otherWords, function(a, b) {
- *   var reGreet = /^(?:hello|hi)$/i,
- *       aGreet = _.isString(a) && reGreet.test(a),
- *       bGreet = _.isString(b) && reGreet.test(b);
- *
- *   return (aGreet || bGreet) ? (aGreet == bGreet) : undefined;
- * });
- * // => true
- */
-function isEqual(a, b, callback, thisArg) {
-  return baseIsEqual(a, b, typeof callback == 'function' && baseCreateCallback(callback, thisArg, 2));
-}
-
-module.exports = isEqual;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/isFinite.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/isFinite.js
deleted file mode 100644
index 8546112..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/isFinite.js
+++ /dev/null
@@ -1,46 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/* Native method shortcuts for methods with the same name as other `lodash` methods */
-var nativeIsFinite = global.isFinite,
-    nativeIsNaN = global.isNaN;
-
-/**
- * Checks if `value` is, or can be coerced to, a finite number.
- *
- * Note: This is not the same as native `isFinite` which will return true for
- * booleans and empty strings. See http://es5.github.io/#x15.1.2.5.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if the `value` is finite, else `false`.
- * @example
- *
- * _.isFinite(-101);
- * // => true
- *
- * _.isFinite('10');
- * // => true
- *
- * _.isFinite(true);
- * // => false
- *
- * _.isFinite('');
- * // => false
- *
- * _.isFinite(Infinity);
- * // => false
- */
-function isFinite(value) {
-  return nativeIsFinite(value) && !nativeIsNaN(parseFloat(value));
-}
-
-module.exports = isFinite;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/isFunction.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/isFunction.js
deleted file mode 100644
index 22608cd..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/isFunction.js
+++ /dev/null
@@ -1,42 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** `Object#toString` result shortcuts */
-var funcClass = '[object Function]';
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Used to resolve the internal [[Class]] of values */
-var toString = objectProto.toString;
-
-/**
- * Checks if `value` is a function.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if the `value` is a function, else `false`.
- * @example
- *
- * _.isFunction(_);
- * // => true
- */
-function isFunction(value) {
-  return typeof value == 'function';
-}
-// fallback for older versions of Chrome and Safari
-if (isFunction(/x/)) {
-  isFunction = function(value) {
-    return typeof value == 'function' && toString.call(value) == funcClass;
-  };
-}
-
-module.exports = isFunction;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/isNaN.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/isNaN.js
deleted file mode 100644
index 426652d..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/isNaN.js
+++ /dev/null
@@ -1,42 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isNumber = require('./isNumber');
-
-/**
- * Checks if `value` is `NaN`.
- *
- * Note: This is not the same as native `isNaN` which will return `true` for
- * `undefined` and other non-numeric values. See http://es5.github.io/#x15.1.2.4.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if the `value` is `NaN`, else `false`.
- * @example
- *
- * _.isNaN(NaN);
- * // => true
- *
- * _.isNaN(new Number(NaN));
- * // => true
- *
- * isNaN(undefined);
- * // => true
- *
- * _.isNaN(undefined);
- * // => false
- */
-function isNaN(value) {
-  // `NaN` as a primitive is the only value that is not equal to itself
-  // (perform the [[Class]] check first to avoid errors with some host objects in IE)
-  return isNumber(value) && value != +value;
-}
-
-module.exports = isNaN;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/isNull.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/isNull.js
deleted file mode 100644
index 4789d5d..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/isNull.js
+++ /dev/null
@@ -1,30 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * Checks if `value` is `null`.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if the `value` is `null`, else `false`.
- * @example
- *
- * _.isNull(null);
- * // => true
- *
- * _.isNull(undefined);
- * // => false
- */
-function isNull(value) {
-  return value === null;
-}
-
-module.exports = isNull;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/isNumber.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/isNumber.js
deleted file mode 100644
index f242787..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/isNumber.js
+++ /dev/null
@@ -1,39 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** `Object#toString` result shortcuts */
-var numberClass = '[object Number]';
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Used to resolve the internal [[Class]] of values */
-var toString = objectProto.toString;
-
-/**
- * Checks if `value` is a number.
- *
- * Note: `NaN` is considered a number. See http://es5.github.io/#x8.5.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if the `value` is a number, else `false`.
- * @example
- *
- * _.isNumber(8.4 * 5);
- * // => true
- */
-function isNumber(value) {
-  return typeof value == 'number' ||
-    value && typeof value == 'object' && toString.call(value) == numberClass || false;
-}
-
-module.exports = isNumber;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/isObject.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/isObject.js
deleted file mode 100644
index a156308..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/isObject.js
+++ /dev/null
@@ -1,39 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var objectTypes = require('../internals/objectTypes');
-
-/**
- * Checks if `value` is the language type of Object.
- * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if the `value` is an object, else `false`.
- * @example
- *
- * _.isObject({});
- * // => true
- *
- * _.isObject([1, 2, 3]);
- * // => true
- *
- * _.isObject(1);
- * // => false
- */
-function isObject(value) {
-  // check if the value is the ECMAScript language type of Object
-  // http://es5.github.io/#x8
-  // and avoid a V8 bug
-  // http://code.google.com/p/v8/issues/detail?id=2291
-  return !!(value && objectTypes[typeof value]);
-}
-
-module.exports = isObject;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/isPlainObject.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/isPlainObject.js
deleted file mode 100644
index 9f2fe81..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/isPlainObject.js
+++ /dev/null
@@ -1,62 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isArguments = require('./isArguments'),
-    isNative = require('../internals/isNative'),
-    shimIsPlainObject = require('../internals/shimIsPlainObject'),
-    support = require('../support');
-
-/** `Object#toString` result shortcuts */
-var objectClass = '[object Object]';
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Used to resolve the internal [[Class]] of values */
-var toString = objectProto.toString;
-
-/** Native method shortcuts */
-var getPrototypeOf = isNative(getPrototypeOf = Object.getPrototypeOf) && getPrototypeOf;
-
-/**
- * Checks if `value` is an object created by the `Object` constructor.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.
- * @example
- *
- * function Shape() {
- *   this.x = 0;
- *   this.y = 0;
- * }
- *
- * _.isPlainObject(new Shape);
- * // => false
- *
- * _.isPlainObject([1, 2, 3]);
- * // => false
- *
- * _.isPlainObject({ 'x': 0, 'y': 0 });
- * // => true
- */
-var isPlainObject = !getPrototypeOf ? shimIsPlainObject : function(value) {
-  if (!(value && toString.call(value) == objectClass) || (!support.argsClass && isArguments(value))) {
-    return false;
-  }
-  var valueOf = value.valueOf,
-      objProto = isNative(valueOf) && (objProto = getPrototypeOf(valueOf)) && getPrototypeOf(objProto);
-
-  return objProto
-    ? (value == objProto || getPrototypeOf(value) == objProto)
-    : shimIsPlainObject(value);
-};
-
-module.exports = isPlainObject;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/isRegExp.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/isRegExp.js
deleted file mode 100644
index d7800d0..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/isRegExp.js
+++ /dev/null
@@ -1,37 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var objectTypes = require('../internals/objectTypes');
-
-/** `Object#toString` result shortcuts */
-var regexpClass = '[object RegExp]';
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Used to resolve the internal [[Class]] of values */
-var toString = objectProto.toString;
-
-/**
- * Checks if `value` is a regular expression.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if the `value` is a regular expression, else `false`.
- * @example
- *
- * _.isRegExp(/fred/);
- * // => true
- */
-function isRegExp(value) {
-  return value && objectTypes[typeof value] && toString.call(value) == regexpClass || false;
-}
-
-module.exports = isRegExp;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/isString.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/isString.js
deleted file mode 100644
index e1fabd5..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/isString.js
+++ /dev/null
@@ -1,37 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** `Object#toString` result shortcuts */
-var stringClass = '[object String]';
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Used to resolve the internal [[Class]] of values */
-var toString = objectProto.toString;
-
-/**
- * Checks if `value` is a string.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if the `value` is a string, else `false`.
- * @example
- *
- * _.isString('fred');
- * // => true
- */
-function isString(value) {
-  return typeof value == 'string' ||
-    value && typeof value == 'object' && toString.call(value) == stringClass || false;
-}
-
-module.exports = isString;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/isUndefined.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/isUndefined.js
deleted file mode 100644
index 1e28a1f..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/isUndefined.js
+++ /dev/null
@@ -1,27 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * Checks if `value` is `undefined`.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if the `value` is `undefined`, else `false`.
- * @example
- *
- * _.isUndefined(void 0);
- * // => true
- */
-function isUndefined(value) {
-  return typeof value == 'undefined';
-}
-
-module.exports = isUndefined;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/keys.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/keys.js
deleted file mode 100644
index 9959b2b..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/keys.js
+++ /dev/null
@@ -1,42 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isArguments = require('./isArguments'),
-    isNative = require('../internals/isNative'),
-    isObject = require('./isObject'),
-    shimKeys = require('../internals/shimKeys'),
-    support = require('../support');
-
-/* Native method shortcuts for methods with the same name as other `lodash` methods */
-var nativeKeys = isNative(nativeKeys = Object.keys) && nativeKeys;
-
-/**
- * Creates an array composed of the own enumerable property names of an object.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {Object} object The object to inspect.
- * @returns {Array} Returns an array of property names.
- * @example
- *
- * _.keys({ 'one': 1, 'two': 2, 'three': 3 });
- * // => ['one', 'two', 'three'] (property order is not guaranteed across environments)
- */
-var keys = !nativeKeys ? shimKeys : function(object) {
-  if (!isObject(object)) {
-    return [];
-  }
-  if ((support.enumPrototypes && typeof object == 'function') ||
-      (support.nonEnumArgs && object.length && isArguments(object))) {
-    return shimKeys(object);
-  }
-  return nativeKeys(object);
-};
-
-module.exports = keys;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/mapValues.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/mapValues.js
deleted file mode 100644
index 431f55b..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/mapValues.js
+++ /dev/null
@@ -1,58 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback'),
-    forOwn = require('./forOwn');
-
-/**
- * Creates an object with the same keys as `object` and values generated by
- * running each own enumerable property of `object` through the callback.
- * The callback is bound to `thisArg` and invoked with three arguments;
- * (value, key, object).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {Object} object The object to iterate over.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Array} Returns a new object with values of the results of each `callback` execution.
- * @example
- *
- * _.mapValues({ 'a': 1, 'b': 2, 'c': 3} , function(num) { return num * 3; });
- * // => { 'a': 3, 'b': 6, 'c': 9 }
- *
- * var characters = {
- *   'fred': { 'name': 'fred', 'age': 40 },
- *   'pebbles': { 'name': 'pebbles', 'age': 1 }
- * };
- *
- * // using "_.pluck" callback shorthand
- * _.mapValues(characters, 'age');
- * // => { 'fred': 40, 'pebbles': 1 }
- */
-function mapValues(object, callback, thisArg) {
-  var result = {};
-  callback = createCallback(callback, thisArg, 3);
-
-  forOwn(object, function(value, key, object) {
-    result[key] = callback(value, key, object);
-  });
-  return result;
-}
-
-module.exports = mapValues;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/merge.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/merge.js
deleted file mode 100644
index cb602a2..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/merge.js
+++ /dev/null
@@ -1,97 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseCreateCallback = require('../internals/baseCreateCallback'),
-    baseMerge = require('../internals/baseMerge'),
-    getArray = require('../internals/getArray'),
-    isObject = require('./isObject'),
-    releaseArray = require('../internals/releaseArray'),
-    slice = require('../internals/slice');
-
-/**
- * Recursively merges own enumerable properties of the source object(s), that
- * don't resolve to `undefined` into the destination object. Subsequent sources
- * will overwrite property assignments of previous sources. If a callback is
- * provided it will be executed to produce the merged values of the destination
- * and source properties. If the callback returns `undefined` merging will
- * be handled by the method instead. The callback is bound to `thisArg` and
- * invoked with two arguments; (objectValue, sourceValue).
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {Object} object The destination object.
- * @param {...Object} [source] The source objects.
- * @param {Function} [callback] The function to customize merging properties.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Object} Returns the destination object.
- * @example
- *
- * var names = {
- *   'characters': [
- *     { 'name': 'barney' },
- *     { 'name': 'fred' }
- *   ]
- * };
- *
- * var ages = {
- *   'characters': [
- *     { 'age': 36 },
- *     { 'age': 40 }
- *   ]
- * };
- *
- * _.merge(names, ages);
- * // => { 'characters': [{ 'name': 'barney', 'age': 36 }, { 'name': 'fred', 'age': 40 }] }
- *
- * var food = {
- *   'fruits': ['apple'],
- *   'vegetables': ['beet']
- * };
- *
- * var otherFood = {
- *   'fruits': ['banana'],
- *   'vegetables': ['carrot']
- * };
- *
- * _.merge(food, otherFood, function(a, b) {
- *   return _.isArray(a) ? a.concat(b) : undefined;
- * });
- * // => { 'fruits': ['apple', 'banana'], 'vegetables': ['beet', 'carrot] }
- */
-function merge(object) {
-  var args = arguments,
-      length = 2;
-
-  if (!isObject(object)) {
-    return object;
-  }
-  // allows working with `_.reduce` and `_.reduceRight` without using
-  // their `index` and `collection` arguments
-  if (typeof args[2] != 'number') {
-    length = args.length;
-  }
-  if (length > 3 && typeof args[length - 2] == 'function') {
-    var callback = baseCreateCallback(args[--length - 1], args[length--], 2);
-  } else if (length > 2 && typeof args[length - 1] == 'function') {
-    callback = args[--length];
-  }
-  var sources = slice(arguments, 1, length),
-      index = -1,
-      stackA = getArray(),
-      stackB = getArray();
-
-  while (++index < length) {
-    baseMerge(object, sources[index], callback, stackA, stackB);
-  }
-  releaseArray(stackA);
-  releaseArray(stackB);
-  return object;
-}
-
-module.exports = merge;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/omit.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/omit.js
deleted file mode 100644
index 6517419..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/omit.js
+++ /dev/null
@@ -1,67 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseDifference = require('../internals/baseDifference'),
-    baseFlatten = require('../internals/baseFlatten'),
-    createCallback = require('../functions/createCallback'),
-    forIn = require('./forIn');
-
-/**
- * Creates a shallow clone of `object` excluding the specified properties.
- * Property names may be specified as individual arguments or as arrays of
- * property names. If a callback is provided it will be executed for each
- * property of `object` omitting the properties the callback returns truey
- * for. The callback is bound to `thisArg` and invoked with three arguments;
- * (value, key, object).
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {Object} object The source object.
- * @param {Function|...string|string[]} [callback] The properties to omit or the
- *  function called per iteration.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Object} Returns an object without the omitted properties.
- * @example
- *
- * _.omit({ 'name': 'fred', 'age': 40 }, 'age');
- * // => { 'name': 'fred' }
- *
- * _.omit({ 'name': 'fred', 'age': 40 }, function(value) {
- *   return typeof value == 'number';
- * });
- * // => { 'name': 'fred' }
- */
-function omit(object, callback, thisArg) {
-  var result = {};
-  if (typeof callback != 'function') {
-    var props = [];
-    forIn(object, function(value, key) {
-      props.push(key);
-    });
-    props = baseDifference(props, baseFlatten(arguments, true, false, 1));
-
-    var index = -1,
-        length = props.length;
-
-    while (++index < length) {
-      var key = props[index];
-      result[key] = object[key];
-    }
-  } else {
-    callback = createCallback(callback, thisArg, 3);
-    forIn(object, function(value, key, object) {
-      if (!callback(value, key, object)) {
-        result[key] = value;
-      }
-    });
-  }
-  return result;
-}
-
-module.exports = omit;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/pairs.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/pairs.js
deleted file mode 100644
index b334c4a..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/pairs.js
+++ /dev/null
@@ -1,38 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var keys = require('./keys');
-
-/**
- * Creates a two dimensional array of an object's key-value pairs,
- * i.e. `[[key1, value1], [key2, value2]]`.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {Object} object The object to inspect.
- * @returns {Array} Returns new array of key-value pairs.
- * @example
- *
- * _.pairs({ 'barney': 36, 'fred': 40 });
- * // => [['barney', 36], ['fred', 40]] (property order is not guaranteed across environments)
- */
-function pairs(object) {
-  var index = -1,
-      props = keys(object),
-      length = props.length,
-      result = Array(length);
-
-  while (++index < length) {
-    var key = props[index];
-    result[index] = [key, object[key]];
-  }
-  return result;
-}
-
-module.exports = pairs;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/pick.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/pick.js
deleted file mode 100644
index fb581ad..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/pick.js
+++ /dev/null
@@ -1,65 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseFlatten = require('../internals/baseFlatten'),
-    createCallback = require('../functions/createCallback'),
-    forIn = require('./forIn'),
-    isObject = require('./isObject');
-
-/**
- * Creates a shallow clone of `object` composed of the specified properties.
- * Property names may be specified as individual arguments or as arrays of
- * property names. If a callback is provided it will be executed for each
- * property of `object` picking the properties the callback returns truey
- * for. The callback is bound to `thisArg` and invoked with three arguments;
- * (value, key, object).
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {Object} object The source object.
- * @param {Function|...string|string[]} [callback] The function called per
- *  iteration or property names to pick, specified as individual property
- *  names or arrays of property names.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Object} Returns an object composed of the picked properties.
- * @example
- *
- * _.pick({ 'name': 'fred', '_userid': 'fred1' }, 'name');
- * // => { 'name': 'fred' }
- *
- * _.pick({ 'name': 'fred', '_userid': 'fred1' }, function(value, key) {
- *   return key.charAt(0) != '_';
- * });
- * // => { 'name': 'fred' }
- */
-function pick(object, callback, thisArg) {
-  var result = {};
-  if (typeof callback != 'function') {
-    var index = -1,
-        props = baseFlatten(arguments, true, false, 1),
-        length = isObject(object) ? props.length : 0;
-
-    while (++index < length) {
-      var key = props[index];
-      if (key in object) {
-        result[key] = object[key];
-      }
-    }
-  } else {
-    callback = createCallback(callback, thisArg, 3);
-    forIn(object, function(value, key, object) {
-      if (callback(value, key, object)) {
-        result[key] = value;
-      }
-    });
-  }
-  return result;
-}
-
-module.exports = pick;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/transform.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/transform.js
deleted file mode 100644
index f04b078..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/transform.js
+++ /dev/null
@@ -1,67 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseCreate = require('../internals/baseCreate'),
-    baseEach = require('../internals/baseEach'),
-    createCallback = require('../functions/createCallback'),
-    forOwn = require('./forOwn'),
-    isArray = require('./isArray');
-
-/**
- * An alternative to `_.reduce` this method transforms `object` to a new
- * `accumulator` object which is the result of running each of its own
- * enumerable properties through a callback, with each callback execution
- * potentially mutating the `accumulator` object. The callback is bound to
- * `thisArg` and invoked with four arguments; (accumulator, value, key, object).
- * Callbacks may exit iteration early by explicitly returning `false`.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {Array|Object} object The object to iterate over.
- * @param {Function} [callback=identity] The function called per iteration.
- * @param {*} [accumulator] The custom accumulator value.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {*} Returns the accumulated value.
- * @example
- *
- * var squares = _.transform([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], function(result, num) {
- *   num *= num;
- *   if (num % 2) {
- *     return result.push(num) < 3;
- *   }
- * });
- * // => [1, 9, 25]
- *
- * var mapped = _.transform({ 'a': 1, 'b': 2, 'c': 3 }, function(result, num, key) {
- *   result[key] = num * 3;
- * });
- * // => { 'a': 3, 'b': 6, 'c': 9 }
- */
-function transform(object, callback, accumulator, thisArg) {
-  var isArr = isArray(object);
-  if (accumulator == null) {
-    if (isArr) {
-      accumulator = [];
-    } else {
-      var ctor = object && object.constructor,
-          proto = ctor && ctor.prototype;
-
-      accumulator = baseCreate(proto);
-    }
-  }
-  if (callback) {
-    callback = createCallback(callback, thisArg, 4);
-    (isArr ? baseEach : forOwn)(object, function(value, index, object) {
-      return callback(accumulator, value, index, object);
-    });
-  }
-  return accumulator;
-}
-
-module.exports = transform;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/values.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/values.js
deleted file mode 100644
index e3135ae..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/objects/values.js
+++ /dev/null
@@ -1,36 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var keys = require('./keys');
-
-/**
- * Creates an array composed of the own enumerable property values of `object`.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {Object} object The object to inspect.
- * @returns {Array} Returns an array of property values.
- * @example
- *
- * _.values({ 'one': 1, 'two': 2, 'three': 3 });
- * // => [1, 2, 3] (property order is not guaranteed across environments)
- */
-function values(object) {
-  var index = -1,
-      props = keys(object),
-      length = props.length,
-      result = Array(length);
-
-  while (++index < length) {
-    result[index] = object[props[index]];
-  }
-  return result;
-}
-
-module.exports = values;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/support.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/support.js
deleted file mode 100644
index fb6ec48..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/support.js
+++ /dev/null
@@ -1,177 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isNative = require('./internals/isNative');
-
-/** Used to detect functions containing a `this` reference */
-var reThis = /\bthis\b/;
-
-/** `Object#toString` result shortcuts */
-var argsClass = '[object Arguments]',
-    objectClass = '[object Object]';
-
-/**
- * Used for `Array` method references.
- *
- * Normally `Array.prototype` would suffice, however, using an array literal
- * avoids issues in Narwhal.
- */
-var arrayRef = [];
-
-/** Used for native method references */
-var errorProto = Error.prototype,
-    objectProto = Object.prototype;
-
-/** Used to resolve the internal [[Class]] of values */
-var toString = objectProto.toString;
-
-/** Native method shortcuts */
-var propertyIsEnumerable = objectProto.propertyIsEnumerable;
-
-/**
- * An object used to flag environments features.
- *
- * @static
- * @memberOf _
- * @type Object
- */
-var support = {};
-
-(function() {
-  var ctor = function() { this.x = 1; },
-      object = { '0': 1, 'length': 1 },
-      props = [];
-
-  ctor.prototype = { 'valueOf': 1, 'y': 1 };
-  for (var key in new ctor) { props.push(key); }
-  for (key in arguments) { }
-
-  /**
-   * Detect if an `arguments` object's [[Class]] is resolvable (all but Firefox < 4, IE < 9).
-   *
-   * @memberOf _.support
-   * @type boolean
-   */
-  support.argsClass = toString.call(arguments) == argsClass;
-
-  /**
-   * Detect if `arguments` objects are `Object` objects (all but Narwhal and Opera < 10.5).
-   *
-   * @memberOf _.support
-   * @type boolean
-   */
-  support.argsObject = arguments.constructor == Object && !(arguments instanceof Array);
-
-  /**
-   * Detect if `name` or `message` properties of `Error.prototype` are
-   * enumerable by default. (IE < 9, Safari < 5.1)
-   *
-   * @memberOf _.support
-   * @type boolean
-   */
-  support.enumErrorProps = propertyIsEnumerable.call(errorProto, 'message') || propertyIsEnumerable.call(errorProto, 'name');
-
-  /**
-   * Detect if `prototype` properties are enumerable by default.
-   *
-   * Firefox < 3.6, Opera > 9.50 - Opera < 11.60, and Safari < 5.1
-   * (if the prototype or a property on the prototype has been set)
-   * incorrectly sets a function's `prototype` property [[Enumerable]]
-   * value to `true`.
-   *
-   * @memberOf _.support
-   * @type boolean
-   */
-  support.enumPrototypes = propertyIsEnumerable.call(ctor, 'prototype');
-
-  /**
-   * Detect if functions can be decompiled by `Function#toString`
-   * (all but PS3 and older Opera mobile browsers & avoided in Windows 8 apps).
-   *
-   * @memberOf _.support
-   * @type boolean
-   */
-  support.funcDecomp = !isNative(global.WinRTError) && reThis.test(function() { return this; });
-
-  /**
-   * Detect if `Function#name` is supported (all but IE).
-   *
-   * @memberOf _.support
-   * @type boolean
-   */
-  support.funcNames = typeof Function.name == 'string';
-
-  /**
-   * Detect if `arguments` object indexes are non-enumerable
-   * (Firefox < 4, IE < 9, PhantomJS, Safari < 5.1).
-   *
-   * @memberOf _.support
-   * @type boolean
-   */
-  support.nonEnumArgs = key != 0;
-
-  /**
-   * Detect if properties shadowing those on `Object.prototype` are non-enumerable.
-   *
-   * In IE < 9 an objects own properties, shadowing non-enumerable ones, are
-   * made non-enumerable as well (a.k.a the JScript [[DontEnum]] bug).
-   *
-   * @memberOf _.support
-   * @type boolean
-   */
-  support.nonEnumShadows = !/valueOf/.test(props);
-
-  /**
-   * Detect if own properties are iterated after inherited properties (all but IE < 9).
-   *
-   * @memberOf _.support
-   * @type boolean
-   */
-  support.ownLast = props[0] != 'x';
-
-  /**
-   * Detect if `Array#shift` and `Array#splice` augment array-like objects correctly.
-   *
-   * Firefox < 10, IE compatibility mode, and IE < 9 have buggy Array `shift()`
-   * and `splice()` functions that fail to remove the last element, `value[0]`,
-   * of array-like objects even though the `length` property is set to `0`.
-   * The `shift()` method is buggy in IE 8 compatibility mode, while `splice()`
-   * is buggy regardless of mode in IE < 9 and buggy in compatibility mode in IE 9.
-   *
-   * @memberOf _.support
-   * @type boolean
-   */
-  support.spliceObjects = (arrayRef.splice.call(object, 0, 1), !object[0]);
-
-  /**
-   * Detect lack of support for accessing string characters by index.
-   *
-   * IE < 8 can't access characters by index and IE 8 can only access
-   * characters by index on string literals.
-   *
-   * @memberOf _.support
-   * @type boolean
-   */
-  support.unindexedChars = ('x'[0] + Object('x')[0]) != 'xx';
-
-  /**
-   * Detect if a DOM node's [[Class]] is resolvable (all but IE < 9)
-   * and that the JS engine errors when attempting to coerce an object to
-   * a string without a `toString` function.
-   *
-   * @memberOf _.support
-   * @type boolean
-   */
-  try {
-    support.nodeClass = !(toString.call(document) == objectClass && !({ 'toString': 0 } + ''));
-  } catch(e) {
-    support.nodeClass = true;
-  }
-}(1));
-
-module.exports = support;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/utilities.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/utilities.js
deleted file mode 100644
index 0fc2d98..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/utilities.js
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-module.exports = {
-  'constant': require('./utilities/constant'),
-  'createCallback': require('./functions/createCallback'),
-  'escape': require('./utilities/escape'),
-  'identity': require('./utilities/identity'),
-  'mixin': require('./utilities/mixin'),
-  'noConflict': require('./utilities/noConflict'),
-  'noop': require('./utilities/noop'),
-  'now': require('./utilities/now'),
-  'parseInt': require('./utilities/parseInt'),
-  'property': require('./utilities/property'),
-  'random': require('./utilities/random'),
-  'result': require('./utilities/result'),
-  'template': require('./utilities/template'),
-  'templateSettings': require('./utilities/templateSettings'),
-  'times': require('./utilities/times'),
-  'unescape': require('./utilities/unescape'),
-  'uniqueId': require('./utilities/uniqueId')
-};
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/utilities/constant.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/utilities/constant.js
deleted file mode 100644
index ae112ed..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/utilities/constant.js
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * Creates a function that returns `value`.
- *
- * @static
- * @memberOf _
- * @category Utilities
- * @param {*} value The value to return from the new function.
- * @returns {Function} Returns the new function.
- * @example
- *
- * var object = { 'name': 'fred' };
- * var getter = _.constant(object);
- * getter() === object;
- * // => true
- */
-function constant(value) {
-  return function() {
-    return value;
-  };
-}
-
-module.exports = constant;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/utilities/escape.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/utilities/escape.js
deleted file mode 100644
index 00582b9..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/utilities/escape.js
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var escapeHtmlChar = require('../internals/escapeHtmlChar'),
-    keys = require('../objects/keys'),
-    reUnescapedHtml = require('../internals/reUnescapedHtml');
-
-/**
- * Converts the characters `&`, `<`, `>`, `"`, and `'` in `string` to their
- * corresponding HTML entities.
- *
- * @static
- * @memberOf _
- * @category Utilities
- * @param {string} string The string to escape.
- * @returns {string} Returns the escaped string.
- * @example
- *
- * _.escape('Fred, Wilma, & Pebbles');
- * // => 'Fred, Wilma, &amp; Pebbles'
- */
-function escape(string) {
-  return string == null ? '' : String(string).replace(reUnescapedHtml, escapeHtmlChar);
-}
-
-module.exports = escape;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/utilities/identity.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/utilities/identity.js
deleted file mode 100644
index 838700c..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/utilities/identity.js
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * This method returns the first argument provided to it.
- *
- * @static
- * @memberOf _
- * @category Utilities
- * @param {*} value Any value.
- * @returns {*} Returns `value`.
- * @example
- *
- * var object = { 'name': 'fred' };
- * _.identity(object) === object;
- * // => true
- */
-function identity(value) {
-  return value;
-}
-
-module.exports = identity;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/utilities/mixin.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/utilities/mixin.js
deleted file mode 100644
index 26db74f..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/utilities/mixin.js
+++ /dev/null
@@ -1,88 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var forEach = require('../collections/forEach'),
-    functions = require('../objects/functions'),
-    isFunction = require('../objects/isFunction'),
-    isObject = require('../objects/isObject');
-
-/**
- * Used for `Array` method references.
- *
- * Normally `Array.prototype` would suffice, however, using an array literal
- * avoids issues in Narwhal.
- */
-var arrayRef = [];
-
-/** Native method shortcuts */
-var push = arrayRef.push;
-
-/**
- * Adds function properties of a source object to the destination object.
- * If `object` is a function methods will be added to its prototype as well.
- *
- * @static
- * @memberOf _
- * @category Utilities
- * @param {Function|Object} [object=lodash] object The destination object.
- * @param {Object} source The object of functions to add.
- * @param {Object} [options] The options object.
- * @param {boolean} [options.chain=true] Specify whether the functions added are chainable.
- * @example
- *
- * function capitalize(string) {
- *   return string.charAt(0).toUpperCase() + string.slice(1).toLowerCase();
- * }
- *
- * _.mixin({ 'capitalize': capitalize });
- * _.capitalize('fred');
- * // => 'Fred'
- *
- * _('fred').capitalize().value();
- * // => 'Fred'
- *
- * _.mixin({ 'capitalize': capitalize }, { 'chain': false });
- * _('fred').capitalize();
- * // => 'Fred'
- */
-function mixin(object, source, options) {
-  var chain = true,
-      methodNames = source && functions(source);
-
-  if (options === false) {
-    chain = false;
-  } else if (isObject(options) && 'chain' in options) {
-    chain = options.chain;
-  }
-  var ctor = object,
-      isFunc = isFunction(ctor);
-
-  forEach(methodNames, function(methodName) {
-    var func = object[methodName] = source[methodName];
-    if (isFunc) {
-      ctor.prototype[methodName] = function() {
-        var chainAll = this.__chain__,
-            value = this.__wrapped__,
-            args = [value];
-
-        push.apply(args, arguments);
-        var result = func.apply(object, args);
-        if (chain || chainAll) {
-          if (value === result && isObject(result)) {
-            return this;
-          }
-          result = new ctor(result);
-          result.__chain__ = chainAll;
-        }
-        return result;
-      };
-    }
-  });
-}
-
-module.exports = mixin;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/utilities/noConflict.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/utilities/noConflict.js
deleted file mode 100644
index eb78149..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/utilities/noConflict.js
+++ /dev/null
@@ -1,30 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** Used to restore the original `_` reference in `noConflict` */
-var oldDash = global._;
-
-/**
- * Reverts the '_' variable to its previous value and returns a reference to
- * the `lodash` function.
- *
- * @static
- * @memberOf _
- * @category Utilities
- * @returns {Function} Returns the `lodash` function.
- * @example
- *
- * var lodash = _.noConflict();
- */
-function noConflict() {
-  global._ = oldDash;
-  return this;
-}
-
-module.exports = noConflict;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/utilities/noop.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/utilities/noop.js
deleted file mode 100644
index 3cd2d53..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/utilities/noop.js
+++ /dev/null
@@ -1,26 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * A no-operation function.
- *
- * @static
- * @memberOf _
- * @category Utilities
- * @example
- *
- * var object = { 'name': 'fred' };
- * _.noop(object) === undefined;
- * // => true
- */
-function noop() {
-  // no operation performed
-}
-
-module.exports = noop;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/utilities/now.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/utilities/now.js
deleted file mode 100644
index ee091dc..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/utilities/now.js
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isNative = require('../internals/isNative');
-
-/**
- * Gets the number of milliseconds that have elapsed since the Unix epoch
- * (1 January 1970 00:00:00 UTC).
- *
- * @static
- * @memberOf _
- * @category Utilities
- * @example
- *
- * var stamp = _.now();
- * _.defer(function() { console.log(_.now() - stamp); });
- * // => logs the number of milliseconds it took for the deferred function to be called
- */
-var now = isNative(now = Date.now) && now || function() {
-  return new Date().getTime();
-};
-
-module.exports = now;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/utilities/parseInt.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/utilities/parseInt.js
deleted file mode 100644
index 6227ccd..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/utilities/parseInt.js
+++ /dev/null
@@ -1,53 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isString = require('../objects/isString');
-
-/** Used to detect and test whitespace */
-var whitespace = (
-  // whitespace
-  ' \t\x0B\f\xA0\ufeff' +
-
-  // line terminators
-  '\n\r\u2028\u2029' +
-
-  // unicode category "Zs" space separators
-  '\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000'
-);
-
-/** Used to match leading whitespace and zeros to be removed */
-var reLeadingSpacesAndZeros = RegExp('^[' + whitespace + ']*0+(?=.$)');
-
-/* Native method shortcuts for methods with the same name as other `lodash` methods */
-var nativeParseInt = global.parseInt;
-
-/**
- * Converts the given value into an integer of the specified radix.
- * If `radix` is `undefined` or `0` a `radix` of `10` is used unless the
- * `value` is a hexadecimal, in which case a `radix` of `16` is used.
- *
- * Note: This method avoids differences in native ES3 and ES5 `parseInt`
- * implementations. See http://es5.github.io/#E.
- *
- * @static
- * @memberOf _
- * @category Utilities
- * @param {string} value The value to parse.
- * @param {number} [radix] The radix used to interpret the value to parse.
- * @returns {number} Returns the new integer value.
- * @example
- *
- * _.parseInt('08');
- * // => 8
- */
-var parseInt = nativeParseInt(whitespace + '08') == 8 ? nativeParseInt : function(value, radix) {
-  // Firefox < 21 and Opera < 15 follow the ES3 specified implementation of `parseInt`
-  return nativeParseInt(isString(value) ? value.replace(reLeadingSpacesAndZeros, '') : value, radix || 0);
-};
-
-module.exports = parseInt;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/utilities/property.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/utilities/property.js
deleted file mode 100644
index f3446dd..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/utilities/property.js
+++ /dev/null
@@ -1,40 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * Creates a "_.pluck" style function, which returns the `key` value of a
- * given object.
- *
- * @static
- * @memberOf _
- * @category Utilities
- * @param {string} key The name of the property to retrieve.
- * @returns {Function} Returns the new function.
- * @example
- *
- * var characters = [
- *   { 'name': 'fred',   'age': 40 },
- *   { 'name': 'barney', 'age': 36 }
- * ];
- *
- * var getName = _.property('name');
- *
- * _.map(characters, getName);
- * // => ['barney', 'fred']
- *
- * _.sortBy(characters, getName);
- * // => [{ 'name': 'barney', 'age': 36 }, { 'name': 'fred',   'age': 40 }]
- */
-function property(key) {
-  return function(object) {
-    return object[key];
-  };
-}
-
-module.exports = property;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/utilities/random.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/utilities/random.js
deleted file mode 100644
index 286bd1e..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/utilities/random.js
+++ /dev/null
@@ -1,73 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseRandom = require('../internals/baseRandom');
-
-/* Native method shortcuts for methods with the same name as other `lodash` methods */
-var nativeMin = Math.min,
-    nativeRandom = Math.random;
-
-/**
- * Produces a random number between `min` and `max` (inclusive). If only one
- * argument is provided a number between `0` and the given number will be
- * returned. If `floating` is truey or either `min` or `max` are floats a
- * floating-point number will be returned instead of an integer.
- *
- * @static
- * @memberOf _
- * @category Utilities
- * @param {number} [min=0] The minimum possible value.
- * @param {number} [max=1] The maximum possible value.
- * @param {boolean} [floating=false] Specify returning a floating-point number.
- * @returns {number} Returns a random number.
- * @example
- *
- * _.random(0, 5);
- * // => an integer between 0 and 5
- *
- * _.random(5);
- * // => also an integer between 0 and 5
- *
- * _.random(5, true);
- * // => a floating-point number between 0 and 5
- *
- * _.random(1.2, 5.2);
- * // => a floating-point number between 1.2 and 5.2
- */
-function random(min, max, floating) {
-  var noMin = min == null,
-      noMax = max == null;
-
-  if (floating == null) {
-    if (typeof min == 'boolean' && noMax) {
-      floating = min;
-      min = 1;
-    }
-    else if (!noMax && typeof max == 'boolean') {
-      floating = max;
-      noMax = true;
-    }
-  }
-  if (noMin && noMax) {
-    max = 1;
-  }
-  min = +min || 0;
-  if (noMax) {
-    max = min;
-    min = 0;
-  } else {
-    max = +max || 0;
-  }
-  if (floating || min % 1 || max % 1) {
-    var rand = nativeRandom();
-    return nativeMin(min + (rand * (max - min + parseFloat('1e-' + ((rand +'').length - 1)))), max);
-  }
-  return baseRandom(min, max);
-}
-
-module.exports = random;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/utilities/result.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/utilities/result.js
deleted file mode 100644
index 306b563..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/utilities/result.js
+++ /dev/null
@@ -1,45 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isFunction = require('../objects/isFunction');
-
-/**
- * Resolves the value of property `key` on `object`. If `key` is a function
- * it will be invoked with the `this` binding of `object` and its result returned,
- * else the property value is returned. If `object` is falsey then `undefined`
- * is returned.
- *
- * @static
- * @memberOf _
- * @category Utilities
- * @param {Object} object The object to inspect.
- * @param {string} key The name of the property to resolve.
- * @returns {*} Returns the resolved value.
- * @example
- *
- * var object = {
- *   'cheese': 'crumpets',
- *   'stuff': function() {
- *     return 'nonsense';
- *   }
- * };
- *
- * _.result(object, 'cheese');
- * // => 'crumpets'
- *
- * _.result(object, 'stuff');
- * // => 'nonsense'
- */
-function result(object, key) {
-  if (object) {
-    var value = object[key];
-    return isFunction(value) ? object[key]() : value;
-  }
-}
-
-module.exports = result;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/utilities/template.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/utilities/template.js
deleted file mode 100644
index b4906b3..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/utilities/template.js
+++ /dev/null
@@ -1,216 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var defaults = require('../objects/defaults'),
-    escape = require('./escape'),
-    escapeStringChar = require('../internals/escapeStringChar'),
-    keys = require('../objects/keys'),
-    reInterpolate = require('../internals/reInterpolate'),
-    templateSettings = require('./templateSettings'),
-    values = require('../objects/values');
-
-/** Used to match empty string literals in compiled template source */
-var reEmptyStringLeading = /\b__p \+= '';/g,
-    reEmptyStringMiddle = /\b(__p \+=) '' \+/g,
-    reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g;
-
-/**
- * Used to match ES6 template delimiters
- * http://people.mozilla.org/~jorendorff/es6-draft.html#sec-literals-string-literals
- */
-var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g;
-
-/** Used to ensure capturing order of template delimiters */
-var reNoMatch = /($^)/;
-
-/** Used to match unescaped characters in compiled string literals */
-var reUnescapedString = /['\n\r\t\u2028\u2029\\]/g;
-
-/**
- * A micro-templating method that handles arbitrary delimiters, preserves
- * whitespace, and correctly escapes quotes within interpolated code.
- *
- * Note: In the development build, `_.template` utilizes sourceURLs for easier
- * debugging. See http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl
- *
- * For more information on precompiling templates see:
- * http://lodash.com/custom-builds
- *
- * For more information on Chrome extension sandboxes see:
- * http://developer.chrome.com/stable/extensions/sandboxingEval.html
- *
- * @static
- * @memberOf _
- * @category Utilities
- * @param {string} text The template text.
- * @param {Object} data The data object used to populate the text.
- * @param {Object} [options] The options object.
- * @param {RegExp} [options.escape] The "escape" delimiter.
- * @param {RegExp} [options.evaluate] The "evaluate" delimiter.
- * @param {Object} [options.imports] An object to import into the template as local variables.
- * @param {RegExp} [options.interpolate] The "interpolate" delimiter.
- * @param {string} [sourceURL] The sourceURL of the template's compiled source.
- * @param {string} [variable] The data object variable name.
- * @returns {Function|string} Returns a compiled function when no `data` object
- *  is given, else it returns the interpolated text.
- * @example
- *
- * // using the "interpolate" delimiter to create a compiled template
- * var compiled = _.template('hello <%= name %>');
- * compiled({ 'name': 'fred' });
- * // => 'hello fred'
- *
- * // using the "escape" delimiter to escape HTML in data property values
- * _.template('<b><%- value %></b>', { 'value': '<script>' });
- * // => '<b>&lt;script&gt;</b>'
- *
- * // using the "evaluate" delimiter to generate HTML
- * var list = '<% _.forEach(people, function(name) { %><li><%- name %></li><% }); %>';
- * _.template(list, { 'people': ['fred', 'barney'] });
- * // => '<li>fred</li><li>barney</li>'
- *
- * // using the ES6 delimiter as an alternative to the default "interpolate" delimiter
- * _.template('hello ${ name }', { 'name': 'pebbles' });
- * // => 'hello pebbles'
- *
- * // using the internal `print` function in "evaluate" delimiters
- * _.template('<% print("hello " + name); %>!', { 'name': 'barney' });
- * // => 'hello barney!'
- *
- * // using a custom template delimiters
- * _.templateSettings = {
- *   'interpolate': /{{([\s\S]+?)}}/g
- * };
- *
- * _.template('hello {{ name }}!', { 'name': 'mustache' });
- * // => 'hello mustache!'
- *
- * // using the `imports` option to import jQuery
- * var list = '<% jq.each(people, function(name) { %><li><%- name %></li><% }); %>';
- * _.template(list, { 'people': ['fred', 'barney'] }, { 'imports': { 'jq': jQuery } });
- * // => '<li>fred</li><li>barney</li>'
- *
- * // using the `sourceURL` option to specify a custom sourceURL for the template
- * var compiled = _.template('hello <%= name %>', null, { 'sourceURL': '/basic/greeting.jst' });
- * compiled(data);
- * // => find the source of "greeting.jst" under the Sources tab or Resources panel of the web inspector
- *
- * // using the `variable` option to ensure a with-statement isn't used in the compiled template
- * var compiled = _.template('hi <%= data.name %>!', null, { 'variable': 'data' });
- * compiled.source;
- * // => function(data) {
- *   var __t, __p = '', __e = _.escape;
- *   __p += 'hi ' + ((__t = ( data.name )) == null ? '' : __t) + '!';
- *   return __p;
- * }
- *
- * // using the `source` property to inline compiled templates for meaningful
- * // line numbers in error messages and a stack trace
- * fs.writeFileSync(path.join(cwd, 'jst.js'), '\
- *   var JST = {\
- *     "main": ' + _.template(mainText).source + '\
- *   };\
- * ');
- */
-function template(text, data, options) {
-  // based on John Resig's `tmpl` implementation
-  // http://ejohn.org/blog/javascript-micro-templating/
-  // and Laura Doktorova's doT.js
-  // https://github.com/olado/doT
-  var settings = templateSettings.imports._.templateSettings || templateSettings;
-  text = String(text || '');
-
-  // avoid missing dependencies when `iteratorTemplate` is not defined
-  options = defaults({}, options, settings);
-
-  var imports = defaults({}, options.imports, settings.imports),
-      importsKeys = keys(imports),
-      importsValues = values(imports);
-
-  var isEvaluating,
-      index = 0,
-      interpolate = options.interpolate || reNoMatch,
-      source = "__p += '";
-
-  // compile the regexp to match each delimiter
-  var reDelimiters = RegExp(
-    (options.escape || reNoMatch).source + '|' +
-    interpolate.source + '|' +
-    (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +
-    (options.evaluate || reNoMatch).source + '|$'
-  , 'g');
-
-  text.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {
-    interpolateValue || (interpolateValue = esTemplateValue);
-
-    // escape characters that cannot be included in string literals
-    source += text.slice(index, offset).replace(reUnescapedString, escapeStringChar);
-
-    // replace delimiters with snippets
-    if (escapeValue) {
-      source += "' +\n__e(" + escapeValue + ") +\n'";
-    }
-    if (evaluateValue) {
-      isEvaluating = true;
-      source += "';\n" + evaluateValue + ";\n__p += '";
-    }
-    if (interpolateValue) {
-      source += "' +\n((__t = (" + interpolateValue + ")) == null ? '' : __t) +\n'";
-    }
-    index = offset + match.length;
-
-    // the JS engine embedded in Adobe products requires returning the `match`
-    // string in order to produce the correct `offset` value
-    return match;
-  });
-
-  source += "';\n";
-
-  // if `variable` is not specified, wrap a with-statement around the generated
-  // code to add the data object to the top of the scope chain
-  var variable = options.variable,
-      hasVariable = variable;
-
-  if (!hasVariable) {
-    variable = 'obj';
-    source = 'with (' + variable + ') {\n' + source + '\n}\n';
-  }
-  // cleanup code by stripping empty strings
-  source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)
-    .replace(reEmptyStringMiddle, '$1')
-    .replace(reEmptyStringTrailing, '$1;');
-
-  // frame code as the function body
-  source = 'function(' + variable + ') {\n' +
-    (hasVariable ? '' : variable + ' || (' + variable + ' = {});\n') +
-    "var __t, __p = '', __e = _.escape" +
-    (isEvaluating
-      ? ', __j = Array.prototype.join;\n' +
-        "function print() { __p += __j.call(arguments, '') }\n"
-      : ';\n'
-    ) +
-    source +
-    'return __p\n}';
-
-  try {
-    var result = Function(importsKeys, 'return ' + source ).apply(undefined, importsValues);
-  } catch(e) {
-    e.source = source;
-    throw e;
-  }
-  if (data) {
-    return result(data);
-  }
-  // provide the compiled function's source by its `toString` method, in
-  // supported environments, or the `source` property as a convenience for
-  // inlining compiled templates during the build process
-  result.source = source;
-  return result;
-}
-
-module.exports = template;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/utilities/templateSettings.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/utilities/templateSettings.js
deleted file mode 100644
index d8acdbf..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/utilities/templateSettings.js
+++ /dev/null
@@ -1,73 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var escape = require('./escape'),
-    reInterpolate = require('../internals/reInterpolate');
-
-/**
- * By default, the template delimiters used by Lo-Dash are similar to those in
- * embedded Ruby (ERB). Change the following template settings to use alternative
- * delimiters.
- *
- * @static
- * @memberOf _
- * @type Object
- */
-var templateSettings = {
-
-  /**
-   * Used to detect `data` property values to be HTML-escaped.
-   *
-   * @memberOf _.templateSettings
-   * @type RegExp
-   */
-  'escape': /<%-([\s\S]+?)%>/g,
-
-  /**
-   * Used to detect code to be evaluated.
-   *
-   * @memberOf _.templateSettings
-   * @type RegExp
-   */
-  'evaluate': /<%([\s\S]+?)%>/g,
-
-  /**
-   * Used to detect `data` property values to inject.
-   *
-   * @memberOf _.templateSettings
-   * @type RegExp
-   */
-  'interpolate': reInterpolate,
-
-  /**
-   * Used to reference the data object in the template text.
-   *
-   * @memberOf _.templateSettings
-   * @type string
-   */
-  'variable': '',
-
-  /**
-   * Used to import variables into the compiled template.
-   *
-   * @memberOf _.templateSettings
-   * @type Object
-   */
-  'imports': {
-
-    /**
-     * A reference to the `lodash` function.
-     *
-     * @memberOf _.templateSettings.imports
-     * @type Function
-     */
-    '_': { 'escape': escape }
-  }
-};
-
-module.exports = templateSettings;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/utilities/times.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/utilities/times.js
deleted file mode 100644
index 85e5c32..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/utilities/times.js
+++ /dev/null
@@ -1,46 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseCreateCallback = require('../internals/baseCreateCallback');
-
-/**
- * Executes the callback `n` times, returning an array of the results
- * of each callback execution. The callback is bound to `thisArg` and invoked
- * with one argument; (index).
- *
- * @static
- * @memberOf _
- * @category Utilities
- * @param {number} n The number of times to execute the callback.
- * @param {Function} callback The function called per iteration.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Array} Returns an array of the results of each `callback` execution.
- * @example
- *
- * var diceRolls = _.times(3, _.partial(_.random, 1, 6));
- * // => [3, 6, 4]
- *
- * _.times(3, function(n) { mage.castSpell(n); });
- * // => calls `mage.castSpell(n)` three times, passing `n` of `0`, `1`, and `2` respectively
- *
- * _.times(3, function(n) { this.cast(n); }, mage);
- * // => also calls `mage.castSpell(n)` three times
- */
-function times(n, callback, thisArg) {
-  n = (n = +n) > -1 ? n : 0;
-  var index = -1,
-      result = Array(n);
-
-  callback = baseCreateCallback(callback, thisArg, 1);
-  while (++index < n) {
-    result[index] = callback(index);
-  }
-  return result;
-}
-
-module.exports = times;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/utilities/unescape.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/utilities/unescape.js
deleted file mode 100644
index dec526f..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/utilities/unescape.js
+++ /dev/null
@@ -1,32 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var keys = require('../objects/keys'),
-    reEscapedHtml = require('../internals/reEscapedHtml'),
-    unescapeHtmlChar = require('../internals/unescapeHtmlChar');
-
-/**
- * The inverse of `_.escape` this method converts the HTML entities
- * `&amp;`, `&lt;`, `&gt;`, `&quot;`, and `&#39;` in `string` to their
- * corresponding characters.
- *
- * @static
- * @memberOf _
- * @category Utilities
- * @param {string} string The string to unescape.
- * @returns {string} Returns the unescaped string.
- * @example
- *
- * _.unescape('Fred, Barney &amp; Pebbles');
- * // => 'Fred, Barney & Pebbles'
- */
-function unescape(string) {
-  return string == null ? '' : String(string).replace(reEscapedHtml, unescapeHtmlChar);
-}
-
-module.exports = unescape;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/utilities/uniqueId.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/utilities/uniqueId.js
deleted file mode 100644
index 6c9346e..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/compat/utilities/uniqueId.js
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize exports="node" -o ./compat/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** Used to generate unique IDs */
-var idCounter = 0;
-
-/**
- * Generates a unique ID. If `prefix` is provided the ID will be appended to it.
- *
- * @static
- * @memberOf _
- * @category Utilities
- * @param {string} [prefix] The value to prefix the ID with.
- * @returns {string} Returns the unique ID.
- * @example
- *
- * _.uniqueId('contact_');
- * // => 'contact_104'
- *
- * _.uniqueId();
- * // => '105'
- */
-function uniqueId(prefix) {
-  var id = ++idCounter;
-  return String(prefix == null ? '' : prefix) + id;
-}
-
-module.exports = uniqueId;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/arrays.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/arrays.js
deleted file mode 100644
index f6c37ff..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/arrays.js
+++ /dev/null
@@ -1,40 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-module.exports = {
-  'compact': require('./arrays/compact'),
-  'difference': require('./arrays/difference'),
-  'drop': require('./arrays/rest'),
-  'findIndex': require('./arrays/findIndex'),
-  'findLastIndex': require('./arrays/findLastIndex'),
-  'first': require('./arrays/first'),
-  'flatten': require('./arrays/flatten'),
-  'head': require('./arrays/first'),
-  'indexOf': require('./arrays/indexOf'),
-  'initial': require('./arrays/initial'),
-  'intersection': require('./arrays/intersection'),
-  'last': require('./arrays/last'),
-  'lastIndexOf': require('./arrays/lastIndexOf'),
-  'object': require('./arrays/zipObject'),
-  'pull': require('./arrays/pull'),
-  'range': require('./arrays/range'),
-  'remove': require('./arrays/remove'),
-  'rest': require('./arrays/rest'),
-  'sortedIndex': require('./arrays/sortedIndex'),
-  'tail': require('./arrays/rest'),
-  'take': require('./arrays/first'),
-  'union': require('./arrays/union'),
-  'uniq': require('./arrays/uniq'),
-  'unique': require('./arrays/uniq'),
-  'unzip': require('./arrays/zip'),
-  'without': require('./arrays/without'),
-  'xor': require('./arrays/xor'),
-  'zip': require('./arrays/zip'),
-  'zipObject': require('./arrays/zipObject')
-};
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/arrays/compact.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/arrays/compact.js
deleted file mode 100644
index f0bffba..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/arrays/compact.js
+++ /dev/null
@@ -1,38 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * Creates an array with all falsey values removed. The values `false`, `null`,
- * `0`, `""`, `undefined`, and `NaN` are all falsey.
- *
- * @static
- * @memberOf _
- * @category Arrays
- * @param {Array} array The array to compact.
- * @returns {Array} Returns a new array of filtered values.
- * @example
- *
- * _.compact([0, 1, false, 2, '', 3]);
- * // => [1, 2, 3]
- */
-function compact(array) {
-  var index = -1,
-      length = array ? array.length : 0,
-      result = [];
-
-  while (++index < length) {
-    var value = array[index];
-    if (value) {
-      result.push(value);
-    }
-  }
-  return result;
-}
-
-module.exports = compact;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/arrays/difference.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/arrays/difference.js
deleted file mode 100644
index 22d16f0..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/arrays/difference.js
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseDifference = require('../internals/baseDifference'),
-    baseFlatten = require('../internals/baseFlatten');
-
-/**
- * Creates an array excluding all values of the provided arrays using strict
- * equality for comparisons, i.e. `===`.
- *
- * @static
- * @memberOf _
- * @category Arrays
- * @param {Array} array The array to process.
- * @param {...Array} [values] The arrays of values to exclude.
- * @returns {Array} Returns a new array of filtered values.
- * @example
- *
- * _.difference([1, 2, 3, 4, 5], [5, 2, 10]);
- * // => [1, 3, 4]
- */
-function difference(array) {
-  return baseDifference(array, baseFlatten(arguments, true, true, 1));
-}
-
-module.exports = difference;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/arrays/findIndex.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/arrays/findIndex.js
deleted file mode 100644
index 549d010..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/arrays/findIndex.js
+++ /dev/null
@@ -1,65 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback');
-
-/**
- * This method is like `_.find` except that it returns the index of the first
- * element that passes the callback check, instead of the element itself.
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @category Arrays
- * @param {Array} array The array to search.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {number} Returns the index of the found element, else `-1`.
- * @example
- *
- * var characters = [
- *   { 'name': 'barney',  'age': 36, 'blocked': false },
- *   { 'name': 'fred',    'age': 40, 'blocked': true },
- *   { 'name': 'pebbles', 'age': 1,  'blocked': false }
- * ];
- *
- * _.findIndex(characters, function(chr) {
- *   return chr.age < 20;
- * });
- * // => 2
- *
- * // using "_.where" callback shorthand
- * _.findIndex(characters, { 'age': 36 });
- * // => 0
- *
- * // using "_.pluck" callback shorthand
- * _.findIndex(characters, 'blocked');
- * // => 1
- */
-function findIndex(array, callback, thisArg) {
-  var index = -1,
-      length = array ? array.length : 0;
-
-  callback = createCallback(callback, thisArg, 3);
-  while (++index < length) {
-    if (callback(array[index], index, array)) {
-      return index;
-    }
-  }
-  return -1;
-}
-
-module.exports = findIndex;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/arrays/findLastIndex.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/arrays/findLastIndex.js
deleted file mode 100644
index f487f71..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/arrays/findLastIndex.js
+++ /dev/null
@@ -1,63 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback');
-
-/**
- * This method is like `_.findIndex` except that it iterates over elements
- * of a `collection` from right to left.
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @category Arrays
- * @param {Array} array The array to search.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {number} Returns the index of the found element, else `-1`.
- * @example
- *
- * var characters = [
- *   { 'name': 'barney',  'age': 36, 'blocked': true },
- *   { 'name': 'fred',    'age': 40, 'blocked': false },
- *   { 'name': 'pebbles', 'age': 1,  'blocked': true }
- * ];
- *
- * _.findLastIndex(characters, function(chr) {
- *   return chr.age > 30;
- * });
- * // => 1
- *
- * // using "_.where" callback shorthand
- * _.findLastIndex(characters, { 'age': 36 });
- * // => 0
- *
- * // using "_.pluck" callback shorthand
- * _.findLastIndex(characters, 'blocked');
- * // => 2
- */
-function findLastIndex(array, callback, thisArg) {
-  var length = array ? array.length : 0;
-  callback = createCallback(callback, thisArg, 3);
-  while (length--) {
-    if (callback(array[length], length, array)) {
-      return length;
-    }
-  }
-  return -1;
-}
-
-module.exports = findLastIndex;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/arrays/first.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/arrays/first.js
deleted file mode 100644
index f7d802e..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/arrays/first.js
+++ /dev/null
@@ -1,86 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback'),
-    slice = require('../internals/slice');
-
-/* Native method shortcuts for methods with the same name as other `lodash` methods */
-var nativeMax = Math.max,
-    nativeMin = Math.min;
-
-/**
- * Gets the first element or first `n` elements of an array. If a callback
- * is provided elements at the beginning of the array are returned as long
- * as the callback returns truey. The callback is bound to `thisArg` and
- * invoked with three arguments; (value, index, array).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @alias head, take
- * @category Arrays
- * @param {Array} array The array to query.
- * @param {Function|Object|number|string} [callback] The function called
- *  per element or the number of elements to return. If a property name or
- *  object is provided it will be used to create a "_.pluck" or "_.where"
- *  style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {*} Returns the first element(s) of `array`.
- * @example
- *
- * _.first([1, 2, 3]);
- * // => 1
- *
- * _.first([1, 2, 3], 2);
- * // => [1, 2]
- *
- * _.first([1, 2, 3], function(num) {
- *   return num < 3;
- * });
- * // => [1, 2]
- *
- * var characters = [
- *   { 'name': 'barney',  'blocked': true,  'employer': 'slate' },
- *   { 'name': 'fred',    'blocked': false, 'employer': 'slate' },
- *   { 'name': 'pebbles', 'blocked': true,  'employer': 'na' }
- * ];
- *
- * // using "_.pluck" callback shorthand
- * _.first(characters, 'blocked');
- * // => [{ 'name': 'barney', 'blocked': true, 'employer': 'slate' }]
- *
- * // using "_.where" callback shorthand
- * _.pluck(_.first(characters, { 'employer': 'slate' }), 'name');
- * // => ['barney', 'fred']
- */
-function first(array, callback, thisArg) {
-  var n = 0,
-      length = array ? array.length : 0;
-
-  if (typeof callback != 'number' && callback != null) {
-    var index = -1;
-    callback = createCallback(callback, thisArg, 3);
-    while (++index < length && callback(array[index], index, array)) {
-      n++;
-    }
-  } else {
-    n = callback;
-    if (n == null || thisArg) {
-      return array ? array[0] : undefined;
-    }
-  }
-  return slice(array, 0, nativeMin(nativeMax(0, n), length));
-}
-
-module.exports = first;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/arrays/flatten.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/arrays/flatten.js
deleted file mode 100644
index 49b9da9..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/arrays/flatten.js
+++ /dev/null
@@ -1,66 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseFlatten = require('../internals/baseFlatten'),
-    map = require('../collections/map');
-
-/**
- * Flattens a nested array (the nesting can be to any depth). If `isShallow`
- * is truey, the array will only be flattened a single level. If a callback
- * is provided each element of the array is passed through the callback before
- * flattening. The callback is bound to `thisArg` and invoked with three
- * arguments; (value, index, array).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @category Arrays
- * @param {Array} array The array to flatten.
- * @param {boolean} [isShallow=false] A flag to restrict flattening to a single level.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Array} Returns a new flattened array.
- * @example
- *
- * _.flatten([1, [2], [3, [[4]]]]);
- * // => [1, 2, 3, 4];
- *
- * _.flatten([1, [2], [3, [[4]]]], true);
- * // => [1, 2, 3, [[4]]];
- *
- * var characters = [
- *   { 'name': 'barney', 'age': 30, 'pets': ['hoppy'] },
- *   { 'name': 'fred',   'age': 40, 'pets': ['baby puss', 'dino'] }
- * ];
- *
- * // using "_.pluck" callback shorthand
- * _.flatten(characters, 'pets');
- * // => ['hoppy', 'baby puss', 'dino']
- */
-function flatten(array, isShallow, callback, thisArg) {
-  // juggle arguments
-  if (typeof isShallow != 'boolean' && isShallow != null) {
-    thisArg = callback;
-    callback = (typeof isShallow != 'function' && thisArg && thisArg[isShallow] === array) ? null : isShallow;
-    isShallow = false;
-  }
-  if (callback != null) {
-    array = map(array, callback, thisArg);
-  }
-  return baseFlatten(array, isShallow);
-}
-
-module.exports = flatten;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/arrays/indexOf.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/arrays/indexOf.js
deleted file mode 100644
index c7533e8..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/arrays/indexOf.js
+++ /dev/null
@@ -1,50 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseIndexOf = require('../internals/baseIndexOf'),
-    sortedIndex = require('./sortedIndex');
-
-/* Native method shortcuts for methods with the same name as other `lodash` methods */
-var nativeMax = Math.max;
-
-/**
- * Gets the index at which the first occurrence of `value` is found using
- * strict equality for comparisons, i.e. `===`. If the array is already sorted
- * providing `true` for `fromIndex` will run a faster binary search.
- *
- * @static
- * @memberOf _
- * @category Arrays
- * @param {Array} array The array to search.
- * @param {*} value The value to search for.
- * @param {boolean|number} [fromIndex=0] The index to search from or `true`
- *  to perform a binary search on a sorted array.
- * @returns {number} Returns the index of the matched value or `-1`.
- * @example
- *
- * _.indexOf([1, 2, 3, 1, 2, 3], 2);
- * // => 1
- *
- * _.indexOf([1, 2, 3, 1, 2, 3], 2, 3);
- * // => 4
- *
- * _.indexOf([1, 1, 2, 2, 3, 3], 2, true);
- * // => 2
- */
-function indexOf(array, value, fromIndex) {
-  if (typeof fromIndex == 'number') {
-    var length = array ? array.length : 0;
-    fromIndex = (fromIndex < 0 ? nativeMax(0, length + fromIndex) : fromIndex || 0);
-  } else if (fromIndex) {
-    var index = sortedIndex(array, value);
-    return array[index] === value ? index : -1;
-  }
-  return baseIndexOf(array, value, fromIndex);
-}
-
-module.exports = indexOf;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/arrays/initial.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/arrays/initial.js
deleted file mode 100644
index c1441a5..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/arrays/initial.js
+++ /dev/null
@@ -1,82 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback'),
-    slice = require('../internals/slice');
-
-/* Native method shortcuts for methods with the same name as other `lodash` methods */
-var nativeMax = Math.max,
-    nativeMin = Math.min;
-
-/**
- * Gets all but the last element or last `n` elements of an array. If a
- * callback is provided elements at the end of the array are excluded from
- * the result as long as the callback returns truey. The callback is bound
- * to `thisArg` and invoked with three arguments; (value, index, array).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @category Arrays
- * @param {Array} array The array to query.
- * @param {Function|Object|number|string} [callback=1] The function called
- *  per element or the number of elements to exclude. If a property name or
- *  object is provided it will be used to create a "_.pluck" or "_.where"
- *  style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Array} Returns a slice of `array`.
- * @example
- *
- * _.initial([1, 2, 3]);
- * // => [1, 2]
- *
- * _.initial([1, 2, 3], 2);
- * // => [1]
- *
- * _.initial([1, 2, 3], function(num) {
- *   return num > 1;
- * });
- * // => [1]
- *
- * var characters = [
- *   { 'name': 'barney',  'blocked': false, 'employer': 'slate' },
- *   { 'name': 'fred',    'blocked': true,  'employer': 'slate' },
- *   { 'name': 'pebbles', 'blocked': true,  'employer': 'na' }
- * ];
- *
- * // using "_.pluck" callback shorthand
- * _.initial(characters, 'blocked');
- * // => [{ 'name': 'barney',  'blocked': false, 'employer': 'slate' }]
- *
- * // using "_.where" callback shorthand
- * _.pluck(_.initial(characters, { 'employer': 'na' }), 'name');
- * // => ['barney', 'fred']
- */
-function initial(array, callback, thisArg) {
-  var n = 0,
-      length = array ? array.length : 0;
-
-  if (typeof callback != 'number' && callback != null) {
-    var index = length;
-    callback = createCallback(callback, thisArg, 3);
-    while (index-- && callback(array[index], index, array)) {
-      n++;
-    }
-  } else {
-    n = (callback == null || thisArg) ? 1 : callback || n;
-  }
-  return slice(array, 0, nativeMin(nativeMax(0, length - n), length));
-}
-
-module.exports = initial;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/arrays/intersection.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/arrays/intersection.js
deleted file mode 100644
index a49371d..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/arrays/intersection.js
+++ /dev/null
@@ -1,83 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseIndexOf = require('../internals/baseIndexOf'),
-    cacheIndexOf = require('../internals/cacheIndexOf'),
-    createCache = require('../internals/createCache'),
-    getArray = require('../internals/getArray'),
-    isArguments = require('../objects/isArguments'),
-    isArray = require('../objects/isArray'),
-    largeArraySize = require('../internals/largeArraySize'),
-    releaseArray = require('../internals/releaseArray'),
-    releaseObject = require('../internals/releaseObject');
-
-/**
- * Creates an array of unique values present in all provided arrays using
- * strict equality for comparisons, i.e. `===`.
- *
- * @static
- * @memberOf _
- * @category Arrays
- * @param {...Array} [array] The arrays to inspect.
- * @returns {Array} Returns an array of shared values.
- * @example
- *
- * _.intersection([1, 2, 3], [5, 2, 1, 4], [2, 1]);
- * // => [1, 2]
- */
-function intersection() {
-  var args = [],
-      argsIndex = -1,
-      argsLength = arguments.length,
-      caches = getArray(),
-      indexOf = baseIndexOf,
-      trustIndexOf = indexOf === baseIndexOf,
-      seen = getArray();
-
-  while (++argsIndex < argsLength) {
-    var value = arguments[argsIndex];
-    if (isArray(value) || isArguments(value)) {
-      args.push(value);
-      caches.push(trustIndexOf && value.length >= largeArraySize &&
-        createCache(argsIndex ? args[argsIndex] : seen));
-    }
-  }
-  var array = args[0],
-      index = -1,
-      length = array ? array.length : 0,
-      result = [];
-
-  outer:
-  while (++index < length) {
-    var cache = caches[0];
-    value = array[index];
-
-    if ((cache ? cacheIndexOf(cache, value) : indexOf(seen, value)) < 0) {
-      argsIndex = argsLength;
-      (cache || seen).push(value);
-      while (--argsIndex) {
-        cache = caches[argsIndex];
-        if ((cache ? cacheIndexOf(cache, value) : indexOf(args[argsIndex], value)) < 0) {
-          continue outer;
-        }
-      }
-      result.push(value);
-    }
-  }
-  while (argsLength--) {
-    cache = caches[argsLength];
-    if (cache) {
-      releaseObject(cache);
-    }
-  }
-  releaseArray(caches);
-  releaseArray(seen);
-  return result;
-}
-
-module.exports = intersection;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/arrays/last.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/arrays/last.js
deleted file mode 100644
index 4cd82d8..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/arrays/last.js
+++ /dev/null
@@ -1,84 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback'),
-    slice = require('../internals/slice');
-
-/* Native method shortcuts for methods with the same name as other `lodash` methods */
-var nativeMax = Math.max;
-
-/**
- * Gets the last element or last `n` elements of an array. If a callback is
- * provided elements at the end of the array are returned as long as the
- * callback returns truey. The callback is bound to `thisArg` and invoked
- * with three arguments; (value, index, array).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @category Arrays
- * @param {Array} array The array to query.
- * @param {Function|Object|number|string} [callback] The function called
- *  per element or the number of elements to return. If a property name or
- *  object is provided it will be used to create a "_.pluck" or "_.where"
- *  style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {*} Returns the last element(s) of `array`.
- * @example
- *
- * _.last([1, 2, 3]);
- * // => 3
- *
- * _.last([1, 2, 3], 2);
- * // => [2, 3]
- *
- * _.last([1, 2, 3], function(num) {
- *   return num > 1;
- * });
- * // => [2, 3]
- *
- * var characters = [
- *   { 'name': 'barney',  'blocked': false, 'employer': 'slate' },
- *   { 'name': 'fred',    'blocked': true,  'employer': 'slate' },
- *   { 'name': 'pebbles', 'blocked': true,  'employer': 'na' }
- * ];
- *
- * // using "_.pluck" callback shorthand
- * _.pluck(_.last(characters, 'blocked'), 'name');
- * // => ['fred', 'pebbles']
- *
- * // using "_.where" callback shorthand
- * _.last(characters, { 'employer': 'na' });
- * // => [{ 'name': 'pebbles', 'blocked': true, 'employer': 'na' }]
- */
-function last(array, callback, thisArg) {
-  var n = 0,
-      length = array ? array.length : 0;
-
-  if (typeof callback != 'number' && callback != null) {
-    var index = length;
-    callback = createCallback(callback, thisArg, 3);
-    while (index-- && callback(array[index], index, array)) {
-      n++;
-    }
-  } else {
-    n = callback;
-    if (n == null || thisArg) {
-      return array ? array[length - 1] : undefined;
-    }
-  }
-  return slice(array, nativeMax(0, length - n));
-}
-
-module.exports = last;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/arrays/lastIndexOf.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/arrays/lastIndexOf.js
deleted file mode 100644
index 51c8210..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/arrays/lastIndexOf.js
+++ /dev/null
@@ -1,54 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/* Native method shortcuts for methods with the same name as other `lodash` methods */
-var nativeMax = Math.max,
-    nativeMin = Math.min;
-
-/**
- * Gets the index at which the last occurrence of `value` is found using strict
- * equality for comparisons, i.e. `===`. If `fromIndex` is negative, it is used
- * as the offset from the end of the collection.
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @category Arrays
- * @param {Array} array The array to search.
- * @param {*} value The value to search for.
- * @param {number} [fromIndex=array.length-1] The index to search from.
- * @returns {number} Returns the index of the matched value or `-1`.
- * @example
- *
- * _.lastIndexOf([1, 2, 3, 1, 2, 3], 2);
- * // => 4
- *
- * _.lastIndexOf([1, 2, 3, 1, 2, 3], 2, 3);
- * // => 1
- */
-function lastIndexOf(array, value, fromIndex) {
-  var index = array ? array.length : 0;
-  if (typeof fromIndex == 'number') {
-    index = (fromIndex < 0 ? nativeMax(0, index + fromIndex) : nativeMin(fromIndex, index - 1)) + 1;
-  }
-  while (index--) {
-    if (array[index] === value) {
-      return index;
-    }
-  }
-  return -1;
-}
-
-module.exports = lastIndexOf;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/arrays/pull.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/arrays/pull.js
deleted file mode 100644
index d7526ea..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/arrays/pull.js
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * Used for `Array` method references.
- *
- * Normally `Array.prototype` would suffice, however, using an array literal
- * avoids issues in Narwhal.
- */
-var arrayRef = [];
-
-/** Native method shortcuts */
-var splice = arrayRef.splice;
-
-/**
- * Removes all provided values from the given array using strict equality for
- * comparisons, i.e. `===`.
- *
- * @static
- * @memberOf _
- * @category Arrays
- * @param {Array} array The array to modify.
- * @param {...*} [value] The values to remove.
- * @returns {Array} Returns `array`.
- * @example
- *
- * var array = [1, 2, 3, 1, 2, 3];
- * _.pull(array, 2, 3);
- * console.log(array);
- * // => [1, 1]
- */
-function pull(array) {
-  var args = arguments,
-      argsIndex = 0,
-      argsLength = args.length,
-      length = array ? array.length : 0;
-
-  while (++argsIndex < argsLength) {
-    var index = -1,
-        value = args[argsIndex];
-    while (++index < length) {
-      if (array[index] === value) {
-        splice.call(array, index--, 1);
-        length--;
-      }
-    }
-  }
-  return array;
-}
-
-module.exports = pull;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/arrays/range.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/arrays/range.js
deleted file mode 100644
index bbc4ab5..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/arrays/range.js
+++ /dev/null
@@ -1,69 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** Native method shortcuts */
-var ceil = Math.ceil;
-
-/* Native method shortcuts for methods with the same name as other `lodash` methods */
-var nativeMax = Math.max;
-
-/**
- * Creates an array of numbers (positive and/or negative) progressing from
- * `start` up to but not including `end`. If `start` is less than `stop` a
- * zero-length range is created unless a negative `step` is specified.
- *
- * @static
- * @memberOf _
- * @category Arrays
- * @param {number} [start=0] The start of the range.
- * @param {number} end The end of the range.
- * @param {number} [step=1] The value to increment or decrement by.
- * @returns {Array} Returns a new range array.
- * @example
- *
- * _.range(4);
- * // => [0, 1, 2, 3]
- *
- * _.range(1, 5);
- * // => [1, 2, 3, 4]
- *
- * _.range(0, 20, 5);
- * // => [0, 5, 10, 15]
- *
- * _.range(0, -4, -1);
- * // => [0, -1, -2, -3]
- *
- * _.range(1, 4, 0);
- * // => [1, 1, 1]
- *
- * _.range(0);
- * // => []
- */
-function range(start, end, step) {
-  start = +start || 0;
-  step = typeof step == 'number' ? step : (+step || 1);
-
-  if (end == null) {
-    end = start;
-    start = 0;
-  }
-  // use `Array(length)` so engines like Chakra and V8 avoid slower modes
-  // http://youtu.be/XAqIpGU8ZZk#t=17m25s
-  var index = -1,
-      length = nativeMax(0, ceil((end - start) / (step || 1))),
-      result = Array(length);
-
-  while (++index < length) {
-    result[index] = start;
-    start += step;
-  }
-  return result;
-}
-
-module.exports = range;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/arrays/remove.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/arrays/remove.js
deleted file mode 100644
index dc818d5..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/arrays/remove.js
+++ /dev/null
@@ -1,71 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback');
-
-/**
- * Used for `Array` method references.
- *
- * Normally `Array.prototype` would suffice, however, using an array literal
- * avoids issues in Narwhal.
- */
-var arrayRef = [];
-
-/** Native method shortcuts */
-var splice = arrayRef.splice;
-
-/**
- * Removes all elements from an array that the callback returns truey for
- * and returns an array of removed elements. The callback is bound to `thisArg`
- * and invoked with three arguments; (value, index, array).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @category Arrays
- * @param {Array} array The array to modify.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Array} Returns a new array of removed elements.
- * @example
- *
- * var array = [1, 2, 3, 4, 5, 6];
- * var evens = _.remove(array, function(num) { return num % 2 == 0; });
- *
- * console.log(array);
- * // => [1, 3, 5]
- *
- * console.log(evens);
- * // => [2, 4, 6]
- */
-function remove(array, callback, thisArg) {
-  var index = -1,
-      length = array ? array.length : 0,
-      result = [];
-
-  callback = createCallback(callback, thisArg, 3);
-  while (++index < length) {
-    var value = array[index];
-    if (callback(value, index, array)) {
-      result.push(value);
-      splice.call(array, index--, 1);
-      length--;
-    }
-  }
-  return result;
-}
-
-module.exports = remove;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/arrays/rest.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/arrays/rest.js
deleted file mode 100644
index 216672e..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/arrays/rest.js
+++ /dev/null
@@ -1,83 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback'),
-    slice = require('../internals/slice');
-
-/* Native method shortcuts for methods with the same name as other `lodash` methods */
-var nativeMax = Math.max;
-
-/**
- * The opposite of `_.initial` this method gets all but the first element or
- * first `n` elements of an array. If a callback function is provided elements
- * at the beginning of the array are excluded from the result as long as the
- * callback returns truey. The callback is bound to `thisArg` and invoked
- * with three arguments; (value, index, array).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @alias drop, tail
- * @category Arrays
- * @param {Array} array The array to query.
- * @param {Function|Object|number|string} [callback=1] The function called
- *  per element or the number of elements to exclude. If a property name or
- *  object is provided it will be used to create a "_.pluck" or "_.where"
- *  style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Array} Returns a slice of `array`.
- * @example
- *
- * _.rest([1, 2, 3]);
- * // => [2, 3]
- *
- * _.rest([1, 2, 3], 2);
- * // => [3]
- *
- * _.rest([1, 2, 3], function(num) {
- *   return num < 3;
- * });
- * // => [3]
- *
- * var characters = [
- *   { 'name': 'barney',  'blocked': true,  'employer': 'slate' },
- *   { 'name': 'fred',    'blocked': false,  'employer': 'slate' },
- *   { 'name': 'pebbles', 'blocked': true, 'employer': 'na' }
- * ];
- *
- * // using "_.pluck" callback shorthand
- * _.pluck(_.rest(characters, 'blocked'), 'name');
- * // => ['fred', 'pebbles']
- *
- * // using "_.where" callback shorthand
- * _.rest(characters, { 'employer': 'slate' });
- * // => [{ 'name': 'pebbles', 'blocked': true, 'employer': 'na' }]
- */
-function rest(array, callback, thisArg) {
-  if (typeof callback != 'number' && callback != null) {
-    var n = 0,
-        index = -1,
-        length = array ? array.length : 0;
-
-    callback = createCallback(callback, thisArg, 3);
-    while (++index < length && callback(array[index], index, array)) {
-      n++;
-    }
-  } else {
-    n = (callback == null || thisArg) ? 1 : nativeMax(0, callback);
-  }
-  return slice(array, n);
-}
-
-module.exports = rest;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/arrays/sortedIndex.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/arrays/sortedIndex.js
deleted file mode 100644
index b4318b5..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/arrays/sortedIndex.js
+++ /dev/null
@@ -1,77 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback'),
-    identity = require('../utilities/identity');
-
-/**
- * Uses a binary search to determine the smallest index at which a value
- * should be inserted into a given sorted array in order to maintain the sort
- * order of the array. If a callback is provided it will be executed for
- * `value` and each element of `array` to compute their sort ranking. The
- * callback is bound to `thisArg` and invoked with one argument; (value).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @category Arrays
- * @param {Array} array The array to inspect.
- * @param {*} value The value to evaluate.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {number} Returns the index at which `value` should be inserted
- *  into `array`.
- * @example
- *
- * _.sortedIndex([20, 30, 50], 40);
- * // => 2
- *
- * // using "_.pluck" callback shorthand
- * _.sortedIndex([{ 'x': 20 }, { 'x': 30 }, { 'x': 50 }], { 'x': 40 }, 'x');
- * // => 2
- *
- * var dict = {
- *   'wordToNumber': { 'twenty': 20, 'thirty': 30, 'fourty': 40, 'fifty': 50 }
- * };
- *
- * _.sortedIndex(['twenty', 'thirty', 'fifty'], 'fourty', function(word) {
- *   return dict.wordToNumber[word];
- * });
- * // => 2
- *
- * _.sortedIndex(['twenty', 'thirty', 'fifty'], 'fourty', function(word) {
- *   return this.wordToNumber[word];
- * }, dict);
- * // => 2
- */
-function sortedIndex(array, value, callback, thisArg) {
-  var low = 0,
-      high = array ? array.length : low;
-
-  // explicitly reference `identity` for better inlining in Firefox
-  callback = callback ? createCallback(callback, thisArg, 1) : identity;
-  value = callback(value);
-
-  while (low < high) {
-    var mid = (low + high) >>> 1;
-    (callback(array[mid]) < value)
-      ? low = mid + 1
-      : high = mid;
-  }
-  return low;
-}
-
-module.exports = sortedIndex;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/arrays/union.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/arrays/union.js
deleted file mode 100644
index bb1b2af..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/arrays/union.js
+++ /dev/null
@@ -1,30 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseFlatten = require('../internals/baseFlatten'),
-    baseUniq = require('../internals/baseUniq');
-
-/**
- * Creates an array of unique values, in order, of the provided arrays using
- * strict equality for comparisons, i.e. `===`.
- *
- * @static
- * @memberOf _
- * @category Arrays
- * @param {...Array} [array] The arrays to inspect.
- * @returns {Array} Returns an array of combined values.
- * @example
- *
- * _.union([1, 2, 3], [5, 2, 1, 4], [2, 1]);
- * // => [1, 2, 3, 5, 4]
- */
-function union() {
-  return baseUniq(baseFlatten(arguments, true, true));
-}
-
-module.exports = union;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/arrays/uniq.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/arrays/uniq.js
deleted file mode 100644
index 8388c2a..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/arrays/uniq.js
+++ /dev/null
@@ -1,69 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseUniq = require('../internals/baseUniq'),
-    createCallback = require('../functions/createCallback');
-
-/**
- * Creates a duplicate-value-free version of an array using strict equality
- * for comparisons, i.e. `===`. If the array is sorted, providing
- * `true` for `isSorted` will use a faster algorithm. If a callback is provided
- * each element of `array` is passed through the callback before uniqueness
- * is computed. The callback is bound to `thisArg` and invoked with three
- * arguments; (value, index, array).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @alias unique
- * @category Arrays
- * @param {Array} array The array to process.
- * @param {boolean} [isSorted=false] A flag to indicate that `array` is sorted.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Array} Returns a duplicate-value-free array.
- * @example
- *
- * _.uniq([1, 2, 1, 3, 1]);
- * // => [1, 2, 3]
- *
- * _.uniq([1, 1, 2, 2, 3], true);
- * // => [1, 2, 3]
- *
- * _.uniq(['A', 'b', 'C', 'a', 'B', 'c'], function(letter) { return letter.toLowerCase(); });
- * // => ['A', 'b', 'C']
- *
- * _.uniq([1, 2.5, 3, 1.5, 2, 3.5], function(num) { return this.floor(num); }, Math);
- * // => [1, 2.5, 3]
- *
- * // using "_.pluck" callback shorthand
- * _.uniq([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');
- * // => [{ 'x': 1 }, { 'x': 2 }]
- */
-function uniq(array, isSorted, callback, thisArg) {
-  // juggle arguments
-  if (typeof isSorted != 'boolean' && isSorted != null) {
-    thisArg = callback;
-    callback = (typeof isSorted != 'function' && thisArg && thisArg[isSorted] === array) ? null : isSorted;
-    isSorted = false;
-  }
-  if (callback != null) {
-    callback = createCallback(callback, thisArg, 3);
-  }
-  return baseUniq(array, isSorted, callback);
-}
-
-module.exports = uniq;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/arrays/without.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/arrays/without.js
deleted file mode 100644
index f988395..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/arrays/without.js
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseDifference = require('../internals/baseDifference'),
-    slice = require('../internals/slice');
-
-/**
- * Creates an array excluding all provided values using strict equality for
- * comparisons, i.e. `===`.
- *
- * @static
- * @memberOf _
- * @category Arrays
- * @param {Array} array The array to filter.
- * @param {...*} [value] The values to exclude.
- * @returns {Array} Returns a new array of filtered values.
- * @example
- *
- * _.without([1, 2, 1, 0, 3, 1, 4], 0, 1);
- * // => [2, 3, 4]
- */
-function without(array) {
-  return baseDifference(array, slice(arguments, 1));
-}
-
-module.exports = without;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/arrays/xor.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/arrays/xor.js
deleted file mode 100644
index d76393f..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/arrays/xor.js
+++ /dev/null
@@ -1,46 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseDifference = require('../internals/baseDifference'),
-    baseUniq = require('../internals/baseUniq'),
-    isArguments = require('../objects/isArguments'),
-    isArray = require('../objects/isArray');
-
-/**
- * Creates an array that is the symmetric difference of the provided arrays.
- * See http://en.wikipedia.org/wiki/Symmetric_difference.
- *
- * @static
- * @memberOf _
- * @category Arrays
- * @param {...Array} [array] The arrays to inspect.
- * @returns {Array} Returns an array of values.
- * @example
- *
- * _.xor([1, 2, 3], [5, 2, 1, 4]);
- * // => [3, 5, 4]
- *
- * _.xor([1, 2, 5], [2, 3, 5], [3, 4, 5]);
- * // => [1, 4, 5]
- */
-function xor() {
-  var index = -1,
-      length = arguments.length;
-
-  while (++index < length) {
-    var array = arguments[index];
-    if (isArray(array) || isArguments(array)) {
-      var result = result
-        ? baseUniq(baseDifference(result, array).concat(baseDifference(array, result)))
-        : array;
-    }
-  }
-  return result || [];
-}
-
-module.exports = xor;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/arrays/zip.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/arrays/zip.js
deleted file mode 100644
index 740d91c..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/arrays/zip.js
+++ /dev/null
@@ -1,40 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var max = require('../collections/max'),
-    pluck = require('../collections/pluck');
-
-/**
- * Creates an array of grouped elements, the first of which contains the first
- * elements of the given arrays, the second of which contains the second
- * elements of the given arrays, and so on.
- *
- * @static
- * @memberOf _
- * @alias unzip
- * @category Arrays
- * @param {...Array} [array] Arrays to process.
- * @returns {Array} Returns a new array of grouped elements.
- * @example
- *
- * _.zip(['fred', 'barney'], [30, 40], [true, false]);
- * // => [['fred', 30, true], ['barney', 40, false]]
- */
-function zip() {
-  var array = arguments.length > 1 ? arguments : arguments[0],
-      index = -1,
-      length = array ? max(pluck(array, 'length')) : 0,
-      result = Array(length < 0 ? 0 : length);
-
-  while (++index < length) {
-    result[index] = pluck(array, index);
-  }
-  return result;
-}
-
-module.exports = zip;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/arrays/zipObject.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/arrays/zipObject.js
deleted file mode 100644
index 889bea3..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/arrays/zipObject.js
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isArray = require('../objects/isArray');
-
-/**
- * Creates an object composed from arrays of `keys` and `values`. Provide
- * either a single two dimensional array, i.e. `[[key1, value1], [key2, value2]]`
- * or two arrays, one of `keys` and one of corresponding `values`.
- *
- * @static
- * @memberOf _
- * @alias object
- * @category Arrays
- * @param {Array} keys The array of keys.
- * @param {Array} [values=[]] The array of values.
- * @returns {Object} Returns an object composed of the given keys and
- *  corresponding values.
- * @example
- *
- * _.zipObject(['fred', 'barney'], [30, 40]);
- * // => { 'fred': 30, 'barney': 40 }
- */
-function zipObject(keys, values) {
-  var index = -1,
-      length = keys ? keys.length : 0,
-      result = {};
-
-  if (!values && length && !isArray(keys[0])) {
-    values = [];
-  }
-  while (++index < length) {
-    var key = keys[index];
-    if (values) {
-      result[key] = values[index];
-    } else if (key) {
-      result[key[0]] = key[1];
-    }
-  }
-  return result;
-}
-
-module.exports = zipObject;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/chaining.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/chaining.js
deleted file mode 100644
index f4b5258..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/chaining.js
+++ /dev/null
@@ -1,17 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-module.exports = {
-  'chain': require('./chaining/chain'),
-  'tap': require('./chaining/tap'),
-  'value': require('./chaining/wrapperValueOf'),
-  'wrapperChain': require('./chaining/wrapperChain'),
-  'wrapperToString': require('./chaining/wrapperToString'),
-  'wrapperValueOf': require('./chaining/wrapperValueOf')
-};
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/chaining/chain.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/chaining/chain.js
deleted file mode 100644
index 05c0038..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/chaining/chain.js
+++ /dev/null
@@ -1,41 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var lodashWrapper = require('../internals/lodashWrapper');
-
-/**
- * Creates a `lodash` object that wraps the given value with explicit
- * method chaining enabled.
- *
- * @static
- * @memberOf _
- * @category Chaining
- * @param {*} value The value to wrap.
- * @returns {Object} Returns the wrapper object.
- * @example
- *
- * var characters = [
- *   { 'name': 'barney',  'age': 36 },
- *   { 'name': 'fred',    'age': 40 },
- *   { 'name': 'pebbles', 'age': 1 }
- * ];
- *
- * var youngest = _.chain(characters)
- *     .sortBy('age')
- *     .map(function(chr) { return chr.name + ' is ' + chr.age; })
- *     .first()
- *     .value();
- * // => 'pebbles is 1'
- */
-function chain(value) {
-  value = new lodashWrapper(value);
-  value.__chain__ = true;
-  return value;
-}
-
-module.exports = chain;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/chaining/tap.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/chaining/tap.js
deleted file mode 100644
index 6249412..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/chaining/tap.js
+++ /dev/null
@@ -1,35 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * Invokes `interceptor` with the `value` as the first argument and then
- * returns `value`. The purpose of this method is to "tap into" a method
- * chain in order to perform operations on intermediate results within
- * the chain.
- *
- * @static
- * @memberOf _
- * @category Chaining
- * @param {*} value The value to provide to `interceptor`.
- * @param {Function} interceptor The function to invoke.
- * @returns {*} Returns `value`.
- * @example
- *
- * _([1, 2, 3, 4])
- *  .tap(function(array) { array.pop(); })
- *  .reverse()
- *  .value();
- * // => [3, 2, 1]
- */
-function tap(value, interceptor) {
-  interceptor(value);
-  return value;
-}
-
-module.exports = tap;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/chaining/wrapperChain.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/chaining/wrapperChain.js
deleted file mode 100644
index 72f13a4..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/chaining/wrapperChain.js
+++ /dev/null
@@ -1,40 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * Enables explicit method chaining on the wrapper object.
- *
- * @name chain
- * @memberOf _
- * @category Chaining
- * @returns {*} Returns the wrapper object.
- * @example
- *
- * var characters = [
- *   { 'name': 'barney', 'age': 36 },
- *   { 'name': 'fred',   'age': 40 }
- * ];
- *
- * // without explicit chaining
- * _(characters).first();
- * // => { 'name': 'barney', 'age': 36 }
- *
- * // with explicit chaining
- * _(characters).chain()
- *   .first()
- *   .pick('age')
- *   .value();
- * // => { 'age': 36 }
- */
-function wrapperChain() {
-  this.__chain__ = true;
-  return this;
-}
-
-module.exports = wrapperChain;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/chaining/wrapperToString.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/chaining/wrapperToString.js
deleted file mode 100644
index 29abeec..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/chaining/wrapperToString.js
+++ /dev/null
@@ -1,26 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * Produces the `toString` result of the wrapped value.
- *
- * @name toString
- * @memberOf _
- * @category Chaining
- * @returns {string} Returns the string result.
- * @example
- *
- * _([1, 2, 3]).toString();
- * // => '1,2,3'
- */
-function wrapperToString() {
-  return String(this.__wrapped__);
-}
-
-module.exports = wrapperToString;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/chaining/wrapperValueOf.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/chaining/wrapperValueOf.js
deleted file mode 100644
index a76aa8b..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/chaining/wrapperValueOf.js
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var forEach = require('../collections/forEach'),
-    support = require('../support');
-
-/**
- * Extracts the wrapped value.
- *
- * @name valueOf
- * @memberOf _
- * @alias value
- * @category Chaining
- * @returns {*} Returns the wrapped value.
- * @example
- *
- * _([1, 2, 3]).valueOf();
- * // => [1, 2, 3]
- */
-function wrapperValueOf() {
-  return this.__wrapped__;
-}
-
-module.exports = wrapperValueOf;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/collections.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/collections.js
deleted file mode 100644
index 58cc42e..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/collections.js
+++ /dev/null
@@ -1,49 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-module.exports = {
-  'all': require('./collections/every'),
-  'any': require('./collections/some'),
-  'at': require('./collections/at'),
-  'collect': require('./collections/map'),
-  'contains': require('./collections/contains'),
-  'countBy': require('./collections/countBy'),
-  'detect': require('./collections/find'),
-  'each': require('./collections/forEach'),
-  'eachRight': require('./collections/forEachRight'),
-  'every': require('./collections/every'),
-  'filter': require('./collections/filter'),
-  'find': require('./collections/find'),
-  'findLast': require('./collections/findLast'),
-  'findWhere': require('./collections/find'),
-  'foldl': require('./collections/reduce'),
-  'foldr': require('./collections/reduceRight'),
-  'forEach': require('./collections/forEach'),
-  'forEachRight': require('./collections/forEachRight'),
-  'groupBy': require('./collections/groupBy'),
-  'include': require('./collections/contains'),
-  'indexBy': require('./collections/indexBy'),
-  'inject': require('./collections/reduce'),
-  'invoke': require('./collections/invoke'),
-  'map': require('./collections/map'),
-  'max': require('./collections/max'),
-  'min': require('./collections/min'),
-  'pluck': require('./collections/pluck'),
-  'reduce': require('./collections/reduce'),
-  'reduceRight': require('./collections/reduceRight'),
-  'reject': require('./collections/reject'),
-  'sample': require('./collections/sample'),
-  'select': require('./collections/filter'),
-  'shuffle': require('./collections/shuffle'),
-  'size': require('./collections/size'),
-  'some': require('./collections/some'),
-  'sortBy': require('./collections/sortBy'),
-  'toArray': require('./collections/toArray'),
-  'where': require('./collections/where')
-};
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/collections/at.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/collections/at.js
deleted file mode 100644
index 7f48511..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/collections/at.js
+++ /dev/null
@@ -1,46 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseFlatten = require('../internals/baseFlatten'),
-    isString = require('../objects/isString');
-
-/**
- * Creates an array of elements from the specified indexes, or keys, of the
- * `collection`. Indexes may be specified as individual arguments or as arrays
- * of indexes.
- *
- * @static
- * @memberOf _
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {...(number|number[]|string|string[])} [index] The indexes of `collection`
- *   to retrieve, specified as individual indexes or arrays of indexes.
- * @returns {Array} Returns a new array of elements corresponding to the
- *  provided indexes.
- * @example
- *
- * _.at(['a', 'b', 'c', 'd', 'e'], [0, 2, 4]);
- * // => ['a', 'c', 'e']
- *
- * _.at(['fred', 'barney', 'pebbles'], 0, 2);
- * // => ['fred', 'pebbles']
- */
-function at(collection) {
-  var args = arguments,
-      index = -1,
-      props = baseFlatten(args, true, false, 1),
-      length = (args[2] && args[2][args[1]] === collection) ? 1 : props.length,
-      result = Array(length);
-
-  while(++index < length) {
-    result[index] = collection[props[index]];
-  }
-  return result;
-}
-
-module.exports = at;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/collections/contains.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/collections/contains.js
deleted file mode 100644
index 6ca66a6..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/collections/contains.js
+++ /dev/null
@@ -1,65 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseIndexOf = require('../internals/baseIndexOf'),
-    forOwn = require('../objects/forOwn'),
-    isArray = require('../objects/isArray'),
-    isString = require('../objects/isString');
-
-/* Native method shortcuts for methods with the same name as other `lodash` methods */
-var nativeMax = Math.max;
-
-/**
- * Checks if a given value is present in a collection using strict equality
- * for comparisons, i.e. `===`. If `fromIndex` is negative, it is used as the
- * offset from the end of the collection.
- *
- * @static
- * @memberOf _
- * @alias include
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {*} target The value to check for.
- * @param {number} [fromIndex=0] The index to search from.
- * @returns {boolean} Returns `true` if the `target` element is found, else `false`.
- * @example
- *
- * _.contains([1, 2, 3], 1);
- * // => true
- *
- * _.contains([1, 2, 3], 1, 2);
- * // => false
- *
- * _.contains({ 'name': 'fred', 'age': 40 }, 'fred');
- * // => true
- *
- * _.contains('pebbles', 'eb');
- * // => true
- */
-function contains(collection, target, fromIndex) {
-  var index = -1,
-      indexOf = baseIndexOf,
-      length = collection ? collection.length : 0,
-      result = false;
-
-  fromIndex = (fromIndex < 0 ? nativeMax(0, length + fromIndex) : fromIndex) || 0;
-  if (isArray(collection)) {
-    result = indexOf(collection, target, fromIndex) > -1;
-  } else if (typeof length == 'number') {
-    result = (isString(collection) ? collection.indexOf(target, fromIndex) : indexOf(collection, target, fromIndex)) > -1;
-  } else {
-    forOwn(collection, function(value) {
-      if (++index >= fromIndex) {
-        return !(result = value === target);
-      }
-    });
-  }
-  return result;
-}
-
-module.exports = contains;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/collections/countBy.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/collections/countBy.js
deleted file mode 100644
index a11a038..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/collections/countBy.js
+++ /dev/null
@@ -1,55 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createAggregator = require('../internals/createAggregator');
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Native method shortcuts */
-var hasOwnProperty = objectProto.hasOwnProperty;
-
-/**
- * Creates an object composed of keys generated from the results of running
- * each element of `collection` through the callback. The corresponding value
- * of each key is the number of times the key was returned by the callback.
- * The callback is bound to `thisArg` and invoked with three arguments;
- * (value, index|key, collection).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Object} Returns the composed aggregate object.
- * @example
- *
- * _.countBy([4.3, 6.1, 6.4], function(num) { return Math.floor(num); });
- * // => { '4': 1, '6': 2 }
- *
- * _.countBy([4.3, 6.1, 6.4], function(num) { return this.floor(num); }, Math);
- * // => { '4': 1, '6': 2 }
- *
- * _.countBy(['one', 'two', 'three'], 'length');
- * // => { '3': 2, '5': 1 }
- */
-var countBy = createAggregator(function(result, value, key) {
-  (hasOwnProperty.call(result, key) ? result[key]++ : result[key] = 1);
-});
-
-module.exports = countBy;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/collections/every.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/collections/every.js
deleted file mode 100644
index 2b9c2c6..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/collections/every.js
+++ /dev/null
@@ -1,74 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback'),
-    forOwn = require('../objects/forOwn');
-
-/**
- * Checks if the given callback returns truey value for **all** elements of
- * a collection. The callback is bound to `thisArg` and invoked with three
- * arguments; (value, index|key, collection).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @alias all
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {boolean} Returns `true` if all elements passed the callback check,
- *  else `false`.
- * @example
- *
- * _.every([true, 1, null, 'yes']);
- * // => false
- *
- * var characters = [
- *   { 'name': 'barney', 'age': 36 },
- *   { 'name': 'fred',   'age': 40 }
- * ];
- *
- * // using "_.pluck" callback shorthand
- * _.every(characters, 'age');
- * // => true
- *
- * // using "_.where" callback shorthand
- * _.every(characters, { 'age': 36 });
- * // => false
- */
-function every(collection, callback, thisArg) {
-  var result = true;
-  callback = createCallback(callback, thisArg, 3);
-
-  var index = -1,
-      length = collection ? collection.length : 0;
-
-  if (typeof length == 'number') {
-    while (++index < length) {
-      if (!(result = !!callback(collection[index], index, collection))) {
-        break;
-      }
-    }
-  } else {
-    forOwn(collection, function(value, index, collection) {
-      return (result = !!callback(value, index, collection));
-    });
-  }
-  return result;
-}
-
-module.exports = every;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/collections/filter.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/collections/filter.js
deleted file mode 100644
index b6df332..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/collections/filter.js
+++ /dev/null
@@ -1,76 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback'),
-    forOwn = require('../objects/forOwn');
-
-/**
- * Iterates over elements of a collection, returning an array of all elements
- * the callback returns truey for. The callback is bound to `thisArg` and
- * invoked with three arguments; (value, index|key, collection).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @alias select
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Array} Returns a new array of elements that passed the callback check.
- * @example
- *
- * var evens = _.filter([1, 2, 3, 4, 5, 6], function(num) { return num % 2 == 0; });
- * // => [2, 4, 6]
- *
- * var characters = [
- *   { 'name': 'barney', 'age': 36, 'blocked': false },
- *   { 'name': 'fred',   'age': 40, 'blocked': true }
- * ];
- *
- * // using "_.pluck" callback shorthand
- * _.filter(characters, 'blocked');
- * // => [{ 'name': 'fred', 'age': 40, 'blocked': true }]
- *
- * // using "_.where" callback shorthand
- * _.filter(characters, { 'age': 36 });
- * // => [{ 'name': 'barney', 'age': 36, 'blocked': false }]
- */
-function filter(collection, callback, thisArg) {
-  var result = [];
-  callback = createCallback(callback, thisArg, 3);
-
-  var index = -1,
-      length = collection ? collection.length : 0;
-
-  if (typeof length == 'number') {
-    while (++index < length) {
-      var value = collection[index];
-      if (callback(value, index, collection)) {
-        result.push(value);
-      }
-    }
-  } else {
-    forOwn(collection, function(value, index, collection) {
-      if (callback(value, index, collection)) {
-        result.push(value);
-      }
-    });
-  }
-  return result;
-}
-
-module.exports = filter;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/collections/find.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/collections/find.js
deleted file mode 100644
index 0c75700..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/collections/find.js
+++ /dev/null
@@ -1,80 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback'),
-    forOwn = require('../objects/forOwn');
-
-/**
- * Iterates over elements of a collection, returning the first element that
- * the callback returns truey for. The callback is bound to `thisArg` and
- * invoked with three arguments; (value, index|key, collection).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @alias detect, findWhere
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {*} Returns the found element, else `undefined`.
- * @example
- *
- * var characters = [
- *   { 'name': 'barney',  'age': 36, 'blocked': false },
- *   { 'name': 'fred',    'age': 40, 'blocked': true },
- *   { 'name': 'pebbles', 'age': 1,  'blocked': false }
- * ];
- *
- * _.find(characters, function(chr) {
- *   return chr.age < 40;
- * });
- * // => { 'name': 'barney', 'age': 36, 'blocked': false }
- *
- * // using "_.where" callback shorthand
- * _.find(characters, { 'age': 1 });
- * // =>  { 'name': 'pebbles', 'age': 1, 'blocked': false }
- *
- * // using "_.pluck" callback shorthand
- * _.find(characters, 'blocked');
- * // => { 'name': 'fred', 'age': 40, 'blocked': true }
- */
-function find(collection, callback, thisArg) {
-  callback = createCallback(callback, thisArg, 3);
-
-  var index = -1,
-      length = collection ? collection.length : 0;
-
-  if (typeof length == 'number') {
-    while (++index < length) {
-      var value = collection[index];
-      if (callback(value, index, collection)) {
-        return value;
-      }
-    }
-  } else {
-    var result;
-    forOwn(collection, function(value, index, collection) {
-      if (callback(value, index, collection)) {
-        result = value;
-        return false;
-      }
-    });
-    return result;
-  }
-}
-
-module.exports = find;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/collections/findLast.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/collections/findLast.js
deleted file mode 100644
index 64e05d6..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/collections/findLast.js
+++ /dev/null
@@ -1,44 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback'),
-    forEachRight = require('./forEachRight');
-
-/**
- * This method is like `_.find` except that it iterates over elements
- * of a `collection` from right to left.
- *
- * @static
- * @memberOf _
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {*} Returns the found element, else `undefined`.
- * @example
- *
- * _.findLast([1, 2, 3, 4], function(num) {
- *   return num % 2 == 1;
- * });
- * // => 3
- */
-function findLast(collection, callback, thisArg) {
-  var result;
-  callback = createCallback(callback, thisArg, 3);
-  forEachRight(collection, function(value, index, collection) {
-    if (callback(value, index, collection)) {
-      result = value;
-      return false;
-    }
-  });
-  return result;
-}
-
-module.exports = findLast;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/collections/forEach.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/collections/forEach.js
deleted file mode 100644
index 65511e3..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/collections/forEach.js
+++ /dev/null
@@ -1,55 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseCreateCallback = require('../internals/baseCreateCallback'),
-    forOwn = require('../objects/forOwn');
-
-/**
- * Iterates over elements of a collection, executing the callback for each
- * element. The callback is bound to `thisArg` and invoked with three arguments;
- * (value, index|key, collection). Callbacks may exit iteration early by
- * explicitly returning `false`.
- *
- * Note: As with other "Collections" methods, objects with a `length` property
- * are iterated like arrays. To avoid this behavior `_.forIn` or `_.forOwn`
- * may be used for object iteration.
- *
- * @static
- * @memberOf _
- * @alias each
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function} [callback=identity] The function called per iteration.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Array|Object|string} Returns `collection`.
- * @example
- *
- * _([1, 2, 3]).forEach(function(num) { console.log(num); }).join(',');
- * // => logs each number and returns '1,2,3'
- *
- * _.forEach({ 'one': 1, 'two': 2, 'three': 3 }, function(num) { console.log(num); });
- * // => logs each number and returns the object (property order is not guaranteed across environments)
- */
-function forEach(collection, callback, thisArg) {
-  var index = -1,
-      length = collection ? collection.length : 0;
-
-  callback = callback && typeof thisArg == 'undefined' ? callback : baseCreateCallback(callback, thisArg, 3);
-  if (typeof length == 'number') {
-    while (++index < length) {
-      if (callback(collection[index], index, collection) === false) {
-        break;
-      }
-    }
-  } else {
-    forOwn(collection, callback);
-  }
-  return collection;
-}
-
-module.exports = forEach;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/collections/forEachRight.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/collections/forEachRight.js
deleted file mode 100644
index 8817169..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/collections/forEachRight.js
+++ /dev/null
@@ -1,52 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseCreateCallback = require('../internals/baseCreateCallback'),
-    forOwn = require('../objects/forOwn'),
-    isArray = require('../objects/isArray'),
-    isString = require('../objects/isString'),
-    keys = require('../objects/keys');
-
-/**
- * This method is like `_.forEach` except that it iterates over elements
- * of a `collection` from right to left.
- *
- * @static
- * @memberOf _
- * @alias eachRight
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function} [callback=identity] The function called per iteration.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Array|Object|string} Returns `collection`.
- * @example
- *
- * _([1, 2, 3]).forEachRight(function(num) { console.log(num); }).join(',');
- * // => logs each number from right to left and returns '3,2,1'
- */
-function forEachRight(collection, callback, thisArg) {
-  var length = collection ? collection.length : 0;
-  callback = callback && typeof thisArg == 'undefined' ? callback : baseCreateCallback(callback, thisArg, 3);
-  if (typeof length == 'number') {
-    while (length--) {
-      if (callback(collection[length], length, collection) === false) {
-        break;
-      }
-    }
-  } else {
-    var props = keys(collection);
-    length = props.length;
-    forOwn(collection, function(value, key, collection) {
-      key = props ? props[--length] : --length;
-      return callback(collection[key], key, collection);
-    });
-  }
-  return collection;
-}
-
-module.exports = forEachRight;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/collections/groupBy.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/collections/groupBy.js
deleted file mode 100644
index f2df3ba..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/collections/groupBy.js
+++ /dev/null
@@ -1,56 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createAggregator = require('../internals/createAggregator');
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Native method shortcuts */
-var hasOwnProperty = objectProto.hasOwnProperty;
-
-/**
- * Creates an object composed of keys generated from the results of running
- * each element of a collection through the callback. The corresponding value
- * of each key is an array of the elements responsible for generating the key.
- * The callback is bound to `thisArg` and invoked with three arguments;
- * (value, index|key, collection).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`
- *
- * @static
- * @memberOf _
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Object} Returns the composed aggregate object.
- * @example
- *
- * _.groupBy([4.2, 6.1, 6.4], function(num) { return Math.floor(num); });
- * // => { '4': [4.2], '6': [6.1, 6.4] }
- *
- * _.groupBy([4.2, 6.1, 6.4], function(num) { return this.floor(num); }, Math);
- * // => { '4': [4.2], '6': [6.1, 6.4] }
- *
- * // using "_.pluck" callback shorthand
- * _.groupBy(['one', 'two', 'three'], 'length');
- * // => { '3': ['one', 'two'], '5': ['three'] }
- */
-var groupBy = createAggregator(function(result, value, key) {
-  (hasOwnProperty.call(result, key) ? result[key] : result[key] = []).push(value);
-});
-
-module.exports = groupBy;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/collections/indexBy.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/collections/indexBy.js
deleted file mode 100644
index 34312c1..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/collections/indexBy.js
+++ /dev/null
@@ -1,54 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createAggregator = require('../internals/createAggregator');
-
-/**
- * Creates an object composed of keys generated from the results of running
- * each element of the collection through the given callback. The corresponding
- * value of each key is the last element responsible for generating the key.
- * The callback is bound to `thisArg` and invoked with three arguments;
- * (value, index|key, collection).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Object} Returns the composed aggregate object.
- * @example
- *
- * var keys = [
- *   { 'dir': 'left', 'code': 97 },
- *   { 'dir': 'right', 'code': 100 }
- * ];
- *
- * _.indexBy(keys, 'dir');
- * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }
- *
- * _.indexBy(keys, function(key) { return String.fromCharCode(key.code); });
- * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }
- *
- * _.indexBy(characters, function(key) { this.fromCharCode(key.code); }, String);
- * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }
- */
-var indexBy = createAggregator(function(result, value, key) {
-  result[key] = value;
-});
-
-module.exports = indexBy;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/collections/invoke.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/collections/invoke.js
deleted file mode 100644
index 3a2f0f7..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/collections/invoke.js
+++ /dev/null
@@ -1,47 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var forEach = require('./forEach'),
-    slice = require('../internals/slice');
-
-/**
- * Invokes the method named by `methodName` on each element in the `collection`
- * returning an array of the results of each invoked method. Additional arguments
- * will be provided to each invoked method. If `methodName` is a function it
- * will be invoked for, and `this` bound to, each element in the `collection`.
- *
- * @static
- * @memberOf _
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function|string} methodName The name of the method to invoke or
- *  the function invoked per iteration.
- * @param {...*} [arg] Arguments to invoke the method with.
- * @returns {Array} Returns a new array of the results of each invoked method.
- * @example
- *
- * _.invoke([[5, 1, 7], [3, 2, 1]], 'sort');
- * // => [[1, 5, 7], [1, 2, 3]]
- *
- * _.invoke([123, 456], String.prototype.split, '');
- * // => [['1', '2', '3'], ['4', '5', '6']]
- */
-function invoke(collection, methodName) {
-  var args = slice(arguments, 2),
-      index = -1,
-      isFunc = typeof methodName == 'function',
-      length = collection ? collection.length : 0,
-      result = Array(typeof length == 'number' ? length : 0);
-
-  forEach(collection, function(value) {
-    result[++index] = (isFunc ? methodName : value[methodName]).apply(value, args);
-  });
-  return result;
-}
-
-module.exports = invoke;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/collections/map.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/collections/map.js
deleted file mode 100644
index 5d1935c..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/collections/map.js
+++ /dev/null
@@ -1,70 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback'),
-    forOwn = require('../objects/forOwn');
-
-/**
- * Creates an array of values by running each element in the collection
- * through the callback. The callback is bound to `thisArg` and invoked with
- * three arguments; (value, index|key, collection).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @alias collect
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Array} Returns a new array of the results of each `callback` execution.
- * @example
- *
- * _.map([1, 2, 3], function(num) { return num * 3; });
- * // => [3, 6, 9]
- *
- * _.map({ 'one': 1, 'two': 2, 'three': 3 }, function(num) { return num * 3; });
- * // => [3, 6, 9] (property order is not guaranteed across environments)
- *
- * var characters = [
- *   { 'name': 'barney', 'age': 36 },
- *   { 'name': 'fred',   'age': 40 }
- * ];
- *
- * // using "_.pluck" callback shorthand
- * _.map(characters, 'name');
- * // => ['barney', 'fred']
- */
-function map(collection, callback, thisArg) {
-  var index = -1,
-      length = collection ? collection.length : 0;
-
-  callback = createCallback(callback, thisArg, 3);
-  if (typeof length == 'number') {
-    var result = Array(length);
-    while (++index < length) {
-      result[index] = callback(collection[index], index, collection);
-    }
-  } else {
-    result = [];
-    forOwn(collection, function(value, key, collection) {
-      result[++index] = callback(value, key, collection);
-    });
-  }
-  return result;
-}
-
-module.exports = map;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/collections/max.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/collections/max.js
deleted file mode 100644
index 9a8f789..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/collections/max.js
+++ /dev/null
@@ -1,91 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var charAtCallback = require('../internals/charAtCallback'),
-    createCallback = require('../functions/createCallback'),
-    forEach = require('./forEach'),
-    forOwn = require('../objects/forOwn'),
-    isArray = require('../objects/isArray'),
-    isString = require('../objects/isString');
-
-/**
- * Retrieves the maximum value of a collection. If the collection is empty or
- * falsey `-Infinity` is returned. If a callback is provided it will be executed
- * for each value in the collection to generate the criterion by which the value
- * is ranked. The callback is bound to `thisArg` and invoked with three
- * arguments; (value, index, collection).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {*} Returns the maximum value.
- * @example
- *
- * _.max([4, 2, 8, 6]);
- * // => 8
- *
- * var characters = [
- *   { 'name': 'barney', 'age': 36 },
- *   { 'name': 'fred',   'age': 40 }
- * ];
- *
- * _.max(characters, function(chr) { return chr.age; });
- * // => { 'name': 'fred', 'age': 40 };
- *
- * // using "_.pluck" callback shorthand
- * _.max(characters, 'age');
- * // => { 'name': 'fred', 'age': 40 };
- */
-function max(collection, callback, thisArg) {
-  var computed = -Infinity,
-      result = computed;
-
-  // allows working with functions like `_.map` without using
-  // their `index` argument as a callback
-  if (typeof callback != 'function' && thisArg && thisArg[callback] === collection) {
-    callback = null;
-  }
-  if (callback == null && isArray(collection)) {
-    var index = -1,
-        length = collection.length;
-
-    while (++index < length) {
-      var value = collection[index];
-      if (value > result) {
-        result = value;
-      }
-    }
-  } else {
-    callback = (callback == null && isString(collection))
-      ? charAtCallback
-      : createCallback(callback, thisArg, 3);
-
-    forEach(collection, function(value, index, collection) {
-      var current = callback(value, index, collection);
-      if (current > computed) {
-        computed = current;
-        result = value;
-      }
-    });
-  }
-  return result;
-}
-
-module.exports = max;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/collections/min.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/collections/min.js
deleted file mode 100644
index 22a7c54..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/collections/min.js
+++ /dev/null
@@ -1,91 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var charAtCallback = require('../internals/charAtCallback'),
-    createCallback = require('../functions/createCallback'),
-    forEach = require('./forEach'),
-    forOwn = require('../objects/forOwn'),
-    isArray = require('../objects/isArray'),
-    isString = require('../objects/isString');
-
-/**
- * Retrieves the minimum value of a collection. If the collection is empty or
- * falsey `Infinity` is returned. If a callback is provided it will be executed
- * for each value in the collection to generate the criterion by which the value
- * is ranked. The callback is bound to `thisArg` and invoked with three
- * arguments; (value, index, collection).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {*} Returns the minimum value.
- * @example
- *
- * _.min([4, 2, 8, 6]);
- * // => 2
- *
- * var characters = [
- *   { 'name': 'barney', 'age': 36 },
- *   { 'name': 'fred',   'age': 40 }
- * ];
- *
- * _.min(characters, function(chr) { return chr.age; });
- * // => { 'name': 'barney', 'age': 36 };
- *
- * // using "_.pluck" callback shorthand
- * _.min(characters, 'age');
- * // => { 'name': 'barney', 'age': 36 };
- */
-function min(collection, callback, thisArg) {
-  var computed = Infinity,
-      result = computed;
-
-  // allows working with functions like `_.map` without using
-  // their `index` argument as a callback
-  if (typeof callback != 'function' && thisArg && thisArg[callback] === collection) {
-    callback = null;
-  }
-  if (callback == null && isArray(collection)) {
-    var index = -1,
-        length = collection.length;
-
-    while (++index < length) {
-      var value = collection[index];
-      if (value < result) {
-        result = value;
-      }
-    }
-  } else {
-    callback = (callback == null && isString(collection))
-      ? charAtCallback
-      : createCallback(callback, thisArg, 3);
-
-    forEach(collection, function(value, index, collection) {
-      var current = callback(value, index, collection);
-      if (current < computed) {
-        computed = current;
-        result = value;
-      }
-    });
-  }
-  return result;
-}
-
-module.exports = min;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/collections/pluck.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/collections/pluck.js
deleted file mode 100644
index b83a638..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/collections/pluck.js
+++ /dev/null
@@ -1,33 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var map = require('./map');
-
-/**
- * Retrieves the value of a specified property from all elements in the collection.
- *
- * @static
- * @memberOf _
- * @type Function
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {string} property The name of the property to pluck.
- * @returns {Array} Returns a new array of property values.
- * @example
- *
- * var characters = [
- *   { 'name': 'barney', 'age': 36 },
- *   { 'name': 'fred',   'age': 40 }
- * ];
- *
- * _.pluck(characters, 'name');
- * // => ['barney', 'fred']
- */
-var pluck = map;
-
-module.exports = pluck;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/collections/reduce.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/collections/reduce.js
deleted file mode 100644
index 6d6c0ea..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/collections/reduce.js
+++ /dev/null
@@ -1,67 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback'),
-    forOwn = require('../objects/forOwn');
-
-/**
- * Reduces a collection to a value which is the accumulated result of running
- * each element in the collection through the callback, where each successive
- * callback execution consumes the return value of the previous execution. If
- * `accumulator` is not provided the first element of the collection will be
- * used as the initial `accumulator` value. The callback is bound to `thisArg`
- * and invoked with four arguments; (accumulator, value, index|key, collection).
- *
- * @static
- * @memberOf _
- * @alias foldl, inject
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function} [callback=identity] The function called per iteration.
- * @param {*} [accumulator] Initial value of the accumulator.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {*} Returns the accumulated value.
- * @example
- *
- * var sum = _.reduce([1, 2, 3], function(sum, num) {
- *   return sum + num;
- * });
- * // => 6
- *
- * var mapped = _.reduce({ 'a': 1, 'b': 2, 'c': 3 }, function(result, num, key) {
- *   result[key] = num * 3;
- *   return result;
- * }, {});
- * // => { 'a': 3, 'b': 6, 'c': 9 }
- */
-function reduce(collection, callback, accumulator, thisArg) {
-  if (!collection) return accumulator;
-  var noaccum = arguments.length < 3;
-  callback = createCallback(callback, thisArg, 4);
-
-  var index = -1,
-      length = collection.length;
-
-  if (typeof length == 'number') {
-    if (noaccum) {
-      accumulator = collection[++index];
-    }
-    while (++index < length) {
-      accumulator = callback(accumulator, collection[index], index, collection);
-    }
-  } else {
-    forOwn(collection, function(value, index, collection) {
-      accumulator = noaccum
-        ? (noaccum = false, value)
-        : callback(accumulator, value, index, collection)
-    });
-  }
-  return accumulator;
-}
-
-module.exports = reduce;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/collections/reduceRight.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/collections/reduceRight.js
deleted file mode 100644
index 8ac5e24..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/collections/reduceRight.js
+++ /dev/null
@@ -1,42 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback'),
-    forEachRight = require('./forEachRight');
-
-/**
- * This method is like `_.reduce` except that it iterates over elements
- * of a `collection` from right to left.
- *
- * @static
- * @memberOf _
- * @alias foldr
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function} [callback=identity] The function called per iteration.
- * @param {*} [accumulator] Initial value of the accumulator.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {*} Returns the accumulated value.
- * @example
- *
- * var list = [[0, 1], [2, 3], [4, 5]];
- * var flat = _.reduceRight(list, function(a, b) { return a.concat(b); }, []);
- * // => [4, 5, 2, 3, 0, 1]
- */
-function reduceRight(collection, callback, accumulator, thisArg) {
-  var noaccum = arguments.length < 3;
-  callback = createCallback(callback, thisArg, 4);
-  forEachRight(collection, function(value, index, collection) {
-    accumulator = noaccum
-      ? (noaccum = false, value)
-      : callback(accumulator, value, index, collection);
-  });
-  return accumulator;
-}
-
-module.exports = reduceRight;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/collections/reject.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/collections/reject.js
deleted file mode 100644
index 3abf516..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/collections/reject.js
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback'),
-    filter = require('./filter');
-
-/**
- * The opposite of `_.filter` this method returns the elements of a
- * collection that the callback does **not** return truey for.
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Array} Returns a new array of elements that failed the callback check.
- * @example
- *
- * var odds = _.reject([1, 2, 3, 4, 5, 6], function(num) { return num % 2 == 0; });
- * // => [1, 3, 5]
- *
- * var characters = [
- *   { 'name': 'barney', 'age': 36, 'blocked': false },
- *   { 'name': 'fred',   'age': 40, 'blocked': true }
- * ];
- *
- * // using "_.pluck" callback shorthand
- * _.reject(characters, 'blocked');
- * // => [{ 'name': 'barney', 'age': 36, 'blocked': false }]
- *
- * // using "_.where" callback shorthand
- * _.reject(characters, { 'age': 36 });
- * // => [{ 'name': 'fred', 'age': 40, 'blocked': true }]
- */
-function reject(collection, callback, thisArg) {
-  callback = createCallback(callback, thisArg, 3);
-  return filter(collection, function(value, index, collection) {
-    return !callback(value, index, collection);
-  });
-}
-
-module.exports = reject;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/collections/sample.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/collections/sample.js
deleted file mode 100644
index 5f0bedc..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/collections/sample.js
+++ /dev/null
@@ -1,49 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseRandom = require('../internals/baseRandom'),
-    isString = require('../objects/isString'),
-    shuffle = require('./shuffle'),
-    values = require('../objects/values');
-
-/* Native method shortcuts for methods with the same name as other `lodash` methods */
-var nativeMax = Math.max,
-    nativeMin = Math.min;
-
-/**
- * Retrieves a random element or `n` random elements from a collection.
- *
- * @static
- * @memberOf _
- * @category Collections
- * @param {Array|Object|string} collection The collection to sample.
- * @param {number} [n] The number of elements to sample.
- * @param- {Object} [guard] Allows working with functions like `_.map`
- *  without using their `index` arguments as `n`.
- * @returns {Array} Returns the random sample(s) of `collection`.
- * @example
- *
- * _.sample([1, 2, 3, 4]);
- * // => 2
- *
- * _.sample([1, 2, 3, 4], 2);
- * // => [3, 1]
- */
-function sample(collection, n, guard) {
-  if (collection && typeof collection.length != 'number') {
-    collection = values(collection);
-  }
-  if (n == null || guard) {
-    return collection ? collection[baseRandom(0, collection.length - 1)] : undefined;
-  }
-  var result = shuffle(collection);
-  result.length = nativeMin(nativeMax(0, n), result.length);
-  return result;
-}
-
-module.exports = sample;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/collections/shuffle.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/collections/shuffle.js
deleted file mode 100644
index fc3d3c9..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/collections/shuffle.js
+++ /dev/null
@@ -1,39 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseRandom = require('../internals/baseRandom'),
-    forEach = require('./forEach');
-
-/**
- * Creates an array of shuffled values, using a version of the Fisher-Yates
- * shuffle. See http://en.wikipedia.org/wiki/Fisher-Yates_shuffle.
- *
- * @static
- * @memberOf _
- * @category Collections
- * @param {Array|Object|string} collection The collection to shuffle.
- * @returns {Array} Returns a new shuffled collection.
- * @example
- *
- * _.shuffle([1, 2, 3, 4, 5, 6]);
- * // => [4, 1, 6, 3, 5, 2]
- */
-function shuffle(collection) {
-  var index = -1,
-      length = collection ? collection.length : 0,
-      result = Array(typeof length == 'number' ? length : 0);
-
-  forEach(collection, function(value) {
-    var rand = baseRandom(0, ++index);
-    result[index] = result[rand];
-    result[rand] = value;
-  });
-  return result;
-}
-
-module.exports = shuffle;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/collections/size.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/collections/size.js
deleted file mode 100644
index b4b3cf3..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/collections/size.js
+++ /dev/null
@@ -1,36 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var keys = require('../objects/keys');
-
-/**
- * Gets the size of the `collection` by returning `collection.length` for arrays
- * and array-like objects or the number of own enumerable properties for objects.
- *
- * @static
- * @memberOf _
- * @category Collections
- * @param {Array|Object|string} collection The collection to inspect.
- * @returns {number} Returns `collection.length` or number of own enumerable properties.
- * @example
- *
- * _.size([1, 2]);
- * // => 2
- *
- * _.size({ 'one': 1, 'two': 2, 'three': 3 });
- * // => 3
- *
- * _.size('pebbles');
- * // => 7
- */
-function size(collection) {
-  var length = collection ? collection.length : 0;
-  return typeof length == 'number' ? length : keys(collection).length;
-}
-
-module.exports = size;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/collections/some.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/collections/some.js
deleted file mode 100644
index e635563..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/collections/some.js
+++ /dev/null
@@ -1,76 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback'),
-    forOwn = require('../objects/forOwn'),
-    isArray = require('../objects/isArray');
-
-/**
- * Checks if the callback returns a truey value for **any** element of a
- * collection. The function returns as soon as it finds a passing value and
- * does not iterate over the entire collection. The callback is bound to
- * `thisArg` and invoked with three arguments; (value, index|key, collection).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @alias any
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {boolean} Returns `true` if any element passed the callback check,
- *  else `false`.
- * @example
- *
- * _.some([null, 0, 'yes', false], Boolean);
- * // => true
- *
- * var characters = [
- *   { 'name': 'barney', 'age': 36, 'blocked': false },
- *   { 'name': 'fred',   'age': 40, 'blocked': true }
- * ];
- *
- * // using "_.pluck" callback shorthand
- * _.some(characters, 'blocked');
- * // => true
- *
- * // using "_.where" callback shorthand
- * _.some(characters, { 'age': 1 });
- * // => false
- */
-function some(collection, callback, thisArg) {
-  var result;
-  callback = createCallback(callback, thisArg, 3);
-
-  var index = -1,
-      length = collection ? collection.length : 0;
-
-  if (typeof length == 'number') {
-    while (++index < length) {
-      if ((result = callback(collection[index], index, collection))) {
-        break;
-      }
-    }
-  } else {
-    forOwn(collection, function(value, index, collection) {
-      return !(result = callback(value, index, collection));
-    });
-  }
-  return !!result;
-}
-
-module.exports = some;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/collections/sortBy.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/collections/sortBy.js
deleted file mode 100644
index 4e765d3..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/collections/sortBy.js
+++ /dev/null
@@ -1,101 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var compareAscending = require('../internals/compareAscending'),
-    createCallback = require('../functions/createCallback'),
-    forEach = require('./forEach'),
-    getArray = require('../internals/getArray'),
-    getObject = require('../internals/getObject'),
-    isArray = require('../objects/isArray'),
-    map = require('./map'),
-    releaseArray = require('../internals/releaseArray'),
-    releaseObject = require('../internals/releaseObject');
-
-/**
- * Creates an array of elements, sorted in ascending order by the results of
- * running each element in a collection through the callback. This method
- * performs a stable sort, that is, it will preserve the original sort order
- * of equal elements. The callback is bound to `thisArg` and invoked with
- * three arguments; (value, index|key, collection).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an array of property names is provided for `callback` the collection
- * will be sorted by each property value.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Array|Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Array} Returns a new array of sorted elements.
- * @example
- *
- * _.sortBy([1, 2, 3], function(num) { return Math.sin(num); });
- * // => [3, 1, 2]
- *
- * _.sortBy([1, 2, 3], function(num) { return this.sin(num); }, Math);
- * // => [3, 1, 2]
- *
- * var characters = [
- *   { 'name': 'barney',  'age': 36 },
- *   { 'name': 'fred',    'age': 40 },
- *   { 'name': 'barney',  'age': 26 },
- *   { 'name': 'fred',    'age': 30 }
- * ];
- *
- * // using "_.pluck" callback shorthand
- * _.map(_.sortBy(characters, 'age'), _.values);
- * // => [['barney', 26], ['fred', 30], ['barney', 36], ['fred', 40]]
- *
- * // sorting by multiple properties
- * _.map(_.sortBy(characters, ['name', 'age']), _.values);
- * // = > [['barney', 26], ['barney', 36], ['fred', 30], ['fred', 40]]
- */
-function sortBy(collection, callback, thisArg) {
-  var index = -1,
-      isArr = isArray(callback),
-      length = collection ? collection.length : 0,
-      result = Array(typeof length == 'number' ? length : 0);
-
-  if (!isArr) {
-    callback = createCallback(callback, thisArg, 3);
-  }
-  forEach(collection, function(value, key, collection) {
-    var object = result[++index] = getObject();
-    if (isArr) {
-      object.criteria = map(callback, function(key) { return value[key]; });
-    } else {
-      (object.criteria = getArray())[0] = callback(value, key, collection);
-    }
-    object.index = index;
-    object.value = value;
-  });
-
-  length = result.length;
-  result.sort(compareAscending);
-  while (length--) {
-    var object = result[length];
-    result[length] = object.value;
-    if (!isArr) {
-      releaseArray(object.criteria);
-    }
-    releaseObject(object);
-  }
-  return result;
-}
-
-module.exports = sortBy;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/collections/toArray.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/collections/toArray.js
deleted file mode 100644
index 24c1f52..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/collections/toArray.js
+++ /dev/null
@@ -1,33 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isString = require('../objects/isString'),
-    slice = require('../internals/slice'),
-    values = require('../objects/values');
-
-/**
- * Converts the `collection` to an array.
- *
- * @static
- * @memberOf _
- * @category Collections
- * @param {Array|Object|string} collection The collection to convert.
- * @returns {Array} Returns the new converted array.
- * @example
- *
- * (function() { return _.toArray(arguments).slice(1); })(1, 2, 3, 4);
- * // => [2, 3, 4]
- */
-function toArray(collection) {
-  if (collection && typeof collection.length == 'number') {
-    return slice(collection);
-  }
-  return values(collection);
-}
-
-module.exports = toArray;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/collections/where.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/collections/where.js
deleted file mode 100644
index 6f8fb6f..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/collections/where.js
+++ /dev/null
@@ -1,38 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var filter = require('./filter');
-
-/**
- * Performs a deep comparison of each element in a `collection` to the given
- * `properties` object, returning an array of all elements that have equivalent
- * property values.
- *
- * @static
- * @memberOf _
- * @type Function
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Object} props The object of property values to filter by.
- * @returns {Array} Returns a new array of elements that have the given properties.
- * @example
- *
- * var characters = [
- *   { 'name': 'barney', 'age': 36, 'pets': ['hoppy'] },
- *   { 'name': 'fred',   'age': 40, 'pets': ['baby puss', 'dino'] }
- * ];
- *
- * _.where(characters, { 'age': 36 });
- * // => [{ 'name': 'barney', 'age': 36, 'pets': ['hoppy'] }]
- *
- * _.where(characters, { 'pets': ['dino'] });
- * // => [{ 'name': 'fred', 'age': 40, 'pets': ['baby puss', 'dino'] }]
- */
-var where = filter;
-
-module.exports = where;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/functions.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/functions.js
deleted file mode 100644
index f50894d..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/functions.js
+++ /dev/null
@@ -1,27 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-module.exports = {
-  'after': require('./functions/after'),
-  'bind': require('./functions/bind'),
-  'bindAll': require('./functions/bindAll'),
-  'bindKey': require('./functions/bindKey'),
-  'compose': require('./functions/compose'),
-  'createCallback': require('./functions/createCallback'),
-  'curry': require('./functions/curry'),
-  'debounce': require('./functions/debounce'),
-  'defer': require('./functions/defer'),
-  'delay': require('./functions/delay'),
-  'memoize': require('./functions/memoize'),
-  'once': require('./functions/once'),
-  'partial': require('./functions/partial'),
-  'partialRight': require('./functions/partialRight'),
-  'throttle': require('./functions/throttle'),
-  'wrap': require('./functions/wrap')
-};
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/functions/after.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/functions/after.js
deleted file mode 100644
index cbff273..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/functions/after.js
+++ /dev/null
@@ -1,46 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isFunction = require('../objects/isFunction');
-
-/**
- * Creates a function that executes `func`, with  the `this` binding and
- * arguments of the created function, only after being called `n` times.
- *
- * @static
- * @memberOf _
- * @category Functions
- * @param {number} n The number of times the function must be called before
- *  `func` is executed.
- * @param {Function} func The function to restrict.
- * @returns {Function} Returns the new restricted function.
- * @example
- *
- * var saves = ['profile', 'settings'];
- *
- * var done = _.after(saves.length, function() {
- *   console.log('Done saving!');
- * });
- *
- * _.forEach(saves, function(type) {
- *   asyncSave({ 'type': type, 'complete': done });
- * });
- * // => logs 'Done saving!', after all saves have completed
- */
-function after(n, func) {
-  if (!isFunction(func)) {
-    throw new TypeError;
-  }
-  return function() {
-    if (--n < 1) {
-      return func.apply(this, arguments);
-    }
-  };
-}
-
-module.exports = after;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/functions/bind.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/functions/bind.js
deleted file mode 100644
index f150cbc..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/functions/bind.js
+++ /dev/null
@@ -1,40 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createWrapper = require('../internals/createWrapper'),
-    slice = require('../internals/slice');
-
-/**
- * Creates a function that, when called, invokes `func` with the `this`
- * binding of `thisArg` and prepends any additional `bind` arguments to those
- * provided to the bound function.
- *
- * @static
- * @memberOf _
- * @category Functions
- * @param {Function} func The function to bind.
- * @param {*} [thisArg] The `this` binding of `func`.
- * @param {...*} [arg] Arguments to be partially applied.
- * @returns {Function} Returns the new bound function.
- * @example
- *
- * var func = function(greeting) {
- *   return greeting + ' ' + this.name;
- * };
- *
- * func = _.bind(func, { 'name': 'fred' }, 'hi');
- * func();
- * // => 'hi fred'
- */
-function bind(func, thisArg) {
-  return arguments.length > 2
-    ? createWrapper(func, 17, slice(arguments, 2), null, thisArg)
-    : createWrapper(func, 1, null, null, thisArg);
-}
-
-module.exports = bind;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/functions/bindAll.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/functions/bindAll.js
deleted file mode 100644
index 8d20be5..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/functions/bindAll.js
+++ /dev/null
@@ -1,49 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseFlatten = require('../internals/baseFlatten'),
-    createWrapper = require('../internals/createWrapper'),
-    functions = require('../objects/functions');
-
-/**
- * Binds methods of an object to the object itself, overwriting the existing
- * method. Method names may be specified as individual arguments or as arrays
- * of method names. If no method names are provided all the function properties
- * of `object` will be bound.
- *
- * @static
- * @memberOf _
- * @category Functions
- * @param {Object} object The object to bind and assign the bound methods to.
- * @param {...string} [methodName] The object method names to
- *  bind, specified as individual method names or arrays of method names.
- * @returns {Object} Returns `object`.
- * @example
- *
- * var view = {
- *   'label': 'docs',
- *   'onClick': function() { console.log('clicked ' + this.label); }
- * };
- *
- * _.bindAll(view);
- * jQuery('#docs').on('click', view.onClick);
- * // => logs 'clicked docs', when the button is clicked
- */
-function bindAll(object) {
-  var funcs = arguments.length > 1 ? baseFlatten(arguments, true, false, 1) : functions(object),
-      index = -1,
-      length = funcs.length;
-
-  while (++index < length) {
-    var key = funcs[index];
-    object[key] = createWrapper(object[key], 1, null, null, object);
-  }
-  return object;
-}
-
-module.exports = bindAll;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/functions/bindKey.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/functions/bindKey.js
deleted file mode 100644
index eb31c2f..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/functions/bindKey.js
+++ /dev/null
@@ -1,52 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createWrapper = require('../internals/createWrapper'),
-    slice = require('../internals/slice');
-
-/**
- * Creates a function that, when called, invokes the method at `object[key]`
- * and prepends any additional `bindKey` arguments to those provided to the bound
- * function. This method differs from `_.bind` by allowing bound functions to
- * reference methods that will be redefined or don't yet exist.
- * See http://michaux.ca/articles/lazy-function-definition-pattern.
- *
- * @static
- * @memberOf _
- * @category Functions
- * @param {Object} object The object the method belongs to.
- * @param {string} key The key of the method.
- * @param {...*} [arg] Arguments to be partially applied.
- * @returns {Function} Returns the new bound function.
- * @example
- *
- * var object = {
- *   'name': 'fred',
- *   'greet': function(greeting) {
- *     return greeting + ' ' + this.name;
- *   }
- * };
- *
- * var func = _.bindKey(object, 'greet', 'hi');
- * func();
- * // => 'hi fred'
- *
- * object.greet = function(greeting) {
- *   return greeting + 'ya ' + this.name + '!';
- * };
- *
- * func();
- * // => 'hiya fred!'
- */
-function bindKey(object, key) {
-  return arguments.length > 2
-    ? createWrapper(key, 19, slice(arguments, 2), null, object)
-    : createWrapper(key, 3, null, null, object);
-}
-
-module.exports = bindKey;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/functions/compose.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/functions/compose.js
deleted file mode 100644
index d0af883..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/functions/compose.js
+++ /dev/null
@@ -1,61 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isFunction = require('../objects/isFunction');
-
-/**
- * Creates a function that is the composition of the provided functions,
- * where each function consumes the return value of the function that follows.
- * For example, composing the functions `f()`, `g()`, and `h()` produces `f(g(h()))`.
- * Each function is executed with the `this` binding of the composed function.
- *
- * @static
- * @memberOf _
- * @category Functions
- * @param {...Function} [func] Functions to compose.
- * @returns {Function} Returns the new composed function.
- * @example
- *
- * var realNameMap = {
- *   'pebbles': 'penelope'
- * };
- *
- * var format = function(name) {
- *   name = realNameMap[name.toLowerCase()] || name;
- *   return name.charAt(0).toUpperCase() + name.slice(1).toLowerCase();
- * };
- *
- * var greet = function(formatted) {
- *   return 'Hiya ' + formatted + '!';
- * };
- *
- * var welcome = _.compose(greet, format);
- * welcome('pebbles');
- * // => 'Hiya Penelope!'
- */
-function compose() {
-  var funcs = arguments,
-      length = funcs.length;
-
-  while (length--) {
-    if (!isFunction(funcs[length])) {
-      throw new TypeError;
-    }
-  }
-  return function() {
-    var args = arguments,
-        length = funcs.length;
-
-    while (length--) {
-      args = [funcs[length].apply(this, args)];
-    }
-    return args[0];
-  };
-}
-
-module.exports = compose;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/functions/createCallback.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/functions/createCallback.js
deleted file mode 100644
index dcf255b..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/functions/createCallback.js
+++ /dev/null
@@ -1,81 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseCreateCallback = require('../internals/baseCreateCallback'),
-    baseIsEqual = require('../internals/baseIsEqual'),
-    isObject = require('../objects/isObject'),
-    keys = require('../objects/keys'),
-    property = require('../utilities/property');
-
-/**
- * Produces a callback bound to an optional `thisArg`. If `func` is a property
- * name the created callback will return the property value for a given element.
- * If `func` is an object the created callback will return `true` for elements
- * that contain the equivalent object properties, otherwise it will return `false`.
- *
- * @static
- * @memberOf _
- * @category Utilities
- * @param {*} [func=identity] The value to convert to a callback.
- * @param {*} [thisArg] The `this` binding of the created callback.
- * @param {number} [argCount] The number of arguments the callback accepts.
- * @returns {Function} Returns a callback function.
- * @example
- *
- * var characters = [
- *   { 'name': 'barney', 'age': 36 },
- *   { 'name': 'fred',   'age': 40 }
- * ];
- *
- * // wrap to create custom callback shorthands
- * _.createCallback = _.wrap(_.createCallback, function(func, callback, thisArg) {
- *   var match = /^(.+?)__([gl]t)(.+)$/.exec(callback);
- *   return !match ? func(callback, thisArg) : function(object) {
- *     return match[2] == 'gt' ? object[match[1]] > match[3] : object[match[1]] < match[3];
- *   };
- * });
- *
- * _.filter(characters, 'age__gt38');
- * // => [{ 'name': 'fred', 'age': 40 }]
- */
-function createCallback(func, thisArg, argCount) {
-  var type = typeof func;
-  if (func == null || type == 'function') {
-    return baseCreateCallback(func, thisArg, argCount);
-  }
-  // handle "_.pluck" style callback shorthands
-  if (type != 'object') {
-    return property(func);
-  }
-  var props = keys(func),
-      key = props[0],
-      a = func[key];
-
-  // handle "_.where" style callback shorthands
-  if (props.length == 1 && a === a && !isObject(a)) {
-    // fast path the common case of providing an object with a single
-    // property containing a primitive value
-    return function(object) {
-      var b = object[key];
-      return a === b && (a !== 0 || (1 / a == 1 / b));
-    };
-  }
-  return function(object) {
-    var length = props.length,
-        result = false;
-
-    while (length--) {
-      if (!(result = baseIsEqual(object[props[length]], func[props[length]], null, true))) {
-        break;
-      }
-    }
-    return result;
-  };
-}
-
-module.exports = createCallback;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/functions/curry.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/functions/curry.js
deleted file mode 100644
index bf6b12d..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/functions/curry.js
+++ /dev/null
@@ -1,44 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createWrapper = require('../internals/createWrapper');
-
-/**
- * Creates a function which accepts one or more arguments of `func` that when
- * invoked either executes `func` returning its result, if all `func` arguments
- * have been provided, or returns a function that accepts one or more of the
- * remaining `func` arguments, and so on. The arity of `func` can be specified
- * if `func.length` is not sufficient.
- *
- * @static
- * @memberOf _
- * @category Functions
- * @param {Function} func The function to curry.
- * @param {number} [arity=func.length] The arity of `func`.
- * @returns {Function} Returns the new curried function.
- * @example
- *
- * var curried = _.curry(function(a, b, c) {
- *   console.log(a + b + c);
- * });
- *
- * curried(1)(2)(3);
- * // => 6
- *
- * curried(1, 2)(3);
- * // => 6
- *
- * curried(1, 2, 3);
- * // => 6
- */
-function curry(func, arity) {
-  arity = typeof arity == 'number' ? arity : (+arity || func.length);
-  return createWrapper(func, 4, null, null, null, arity);
-}
-
-module.exports = curry;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/functions/debounce.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/functions/debounce.js
deleted file mode 100644
index a904202..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/functions/debounce.js
+++ /dev/null
@@ -1,156 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isFunction = require('../objects/isFunction'),
-    isObject = require('../objects/isObject'),
-    now = require('../utilities/now');
-
-/* Native method shortcuts for methods with the same name as other `lodash` methods */
-var nativeMax = Math.max;
-
-/**
- * Creates a function that will delay the execution of `func` until after
- * `wait` milliseconds have elapsed since the last time it was invoked.
- * Provide an options object to indicate that `func` should be invoked on
- * the leading and/or trailing edge of the `wait` timeout. Subsequent calls
- * to the debounced function will return the result of the last `func` call.
- *
- * Note: If `leading` and `trailing` options are `true` `func` will be called
- * on the trailing edge of the timeout only if the the debounced function is
- * invoked more than once during the `wait` timeout.
- *
- * @static
- * @memberOf _
- * @category Functions
- * @param {Function} func The function to debounce.
- * @param {number} wait The number of milliseconds to delay.
- * @param {Object} [options] The options object.
- * @param {boolean} [options.leading=false] Specify execution on the leading edge of the timeout.
- * @param {number} [options.maxWait] The maximum time `func` is allowed to be delayed before it's called.
- * @param {boolean} [options.trailing=true] Specify execution on the trailing edge of the timeout.
- * @returns {Function} Returns the new debounced function.
- * @example
- *
- * // avoid costly calculations while the window size is in flux
- * var lazyLayout = _.debounce(calculateLayout, 150);
- * jQuery(window).on('resize', lazyLayout);
- *
- * // execute `sendMail` when the click event is fired, debouncing subsequent calls
- * jQuery('#postbox').on('click', _.debounce(sendMail, 300, {
- *   'leading': true,
- *   'trailing': false
- * });
- *
- * // ensure `batchLog` is executed once after 1 second of debounced calls
- * var source = new EventSource('/stream');
- * source.addEventListener('message', _.debounce(batchLog, 250, {
- *   'maxWait': 1000
- * }, false);
- */
-function debounce(func, wait, options) {
-  var args,
-      maxTimeoutId,
-      result,
-      stamp,
-      thisArg,
-      timeoutId,
-      trailingCall,
-      lastCalled = 0,
-      maxWait = false,
-      trailing = true;
-
-  if (!isFunction(func)) {
-    throw new TypeError;
-  }
-  wait = nativeMax(0, wait) || 0;
-  if (options === true) {
-    var leading = true;
-    trailing = false;
-  } else if (isObject(options)) {
-    leading = options.leading;
-    maxWait = 'maxWait' in options && (nativeMax(wait, options.maxWait) || 0);
-    trailing = 'trailing' in options ? options.trailing : trailing;
-  }
-  var delayed = function() {
-    var remaining = wait - (now() - stamp);
-    if (remaining <= 0) {
-      if (maxTimeoutId) {
-        clearTimeout(maxTimeoutId);
-      }
-      var isCalled = trailingCall;
-      maxTimeoutId = timeoutId = trailingCall = undefined;
-      if (isCalled) {
-        lastCalled = now();
-        result = func.apply(thisArg, args);
-        if (!timeoutId && !maxTimeoutId) {
-          args = thisArg = null;
-        }
-      }
-    } else {
-      timeoutId = setTimeout(delayed, remaining);
-    }
-  };
-
-  var maxDelayed = function() {
-    if (timeoutId) {
-      clearTimeout(timeoutId);
-    }
-    maxTimeoutId = timeoutId = trailingCall = undefined;
-    if (trailing || (maxWait !== wait)) {
-      lastCalled = now();
-      result = func.apply(thisArg, args);
-      if (!timeoutId && !maxTimeoutId) {
-        args = thisArg = null;
-      }
-    }
-  };
-
-  return function() {
-    args = arguments;
-    stamp = now();
-    thisArg = this;
-    trailingCall = trailing && (timeoutId || !leading);
-
-    if (maxWait === false) {
-      var leadingCall = leading && !timeoutId;
-    } else {
-      if (!maxTimeoutId && !leading) {
-        lastCalled = stamp;
-      }
-      var remaining = maxWait - (stamp - lastCalled),
-          isCalled = remaining <= 0;
-
-      if (isCalled) {
-        if (maxTimeoutId) {
-          maxTimeoutId = clearTimeout(maxTimeoutId);
-        }
-        lastCalled = stamp;
-        result = func.apply(thisArg, args);
-      }
-      else if (!maxTimeoutId) {
-        maxTimeoutId = setTimeout(maxDelayed, remaining);
-      }
-    }
-    if (isCalled && timeoutId) {
-      timeoutId = clearTimeout(timeoutId);
-    }
-    else if (!timeoutId && wait !== maxWait) {
-      timeoutId = setTimeout(delayed, wait);
-    }
-    if (leadingCall) {
-      isCalled = true;
-      result = func.apply(thisArg, args);
-    }
-    if (isCalled && !timeoutId && !maxTimeoutId) {
-      args = thisArg = null;
-    }
-    return result;
-  };
-}
-
-module.exports = debounce;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/functions/defer.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/functions/defer.js
deleted file mode 100644
index 45271be..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/functions/defer.js
+++ /dev/null
@@ -1,35 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isFunction = require('../objects/isFunction'),
-    slice = require('../internals/slice');
-
-/**
- * Defers executing the `func` function until the current call stack has cleared.
- * Additional arguments will be provided to `func` when it is invoked.
- *
- * @static
- * @memberOf _
- * @category Functions
- * @param {Function} func The function to defer.
- * @param {...*} [arg] Arguments to invoke the function with.
- * @returns {number} Returns the timer id.
- * @example
- *
- * _.defer(function(text) { console.log(text); }, 'deferred');
- * // logs 'deferred' after one or more milliseconds
- */
-function defer(func) {
-  if (!isFunction(func)) {
-    throw new TypeError;
-  }
-  var args = slice(arguments, 1);
-  return setTimeout(function() { func.apply(undefined, args); }, 1);
-}
-
-module.exports = defer;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/functions/delay.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/functions/delay.js
deleted file mode 100644
index 50b23af..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/functions/delay.js
+++ /dev/null
@@ -1,36 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isFunction = require('../objects/isFunction'),
-    slice = require('../internals/slice');
-
-/**
- * Executes the `func` function after `wait` milliseconds. Additional arguments
- * will be provided to `func` when it is invoked.
- *
- * @static
- * @memberOf _
- * @category Functions
- * @param {Function} func The function to delay.
- * @param {number} wait The number of milliseconds to delay execution.
- * @param {...*} [arg] Arguments to invoke the function with.
- * @returns {number} Returns the timer id.
- * @example
- *
- * _.delay(function(text) { console.log(text); }, 1000, 'later');
- * // => logs 'later' after one second
- */
-function delay(func, wait) {
-  if (!isFunction(func)) {
-    throw new TypeError;
-  }
-  var args = slice(arguments, 2);
-  return setTimeout(function() { func.apply(undefined, args); }, wait);
-}
-
-module.exports = delay;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/functions/memoize.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/functions/memoize.js
deleted file mode 100644
index e02aecb..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/functions/memoize.js
+++ /dev/null
@@ -1,71 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isFunction = require('../objects/isFunction'),
-    keyPrefix = require('../internals/keyPrefix');
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Native method shortcuts */
-var hasOwnProperty = objectProto.hasOwnProperty;
-
-/**
- * Creates a function that memoizes the result of `func`. If `resolver` is
- * provided it will be used to determine the cache key for storing the result
- * based on the arguments provided to the memoized function. By default, the
- * first argument provided to the memoized function is used as the cache key.
- * The `func` is executed with the `this` binding of the memoized function.
- * The result cache is exposed as the `cache` property on the memoized function.
- *
- * @static
- * @memberOf _
- * @category Functions
- * @param {Function} func The function to have its output memoized.
- * @param {Function} [resolver] A function used to resolve the cache key.
- * @returns {Function} Returns the new memoizing function.
- * @example
- *
- * var fibonacci = _.memoize(function(n) {
- *   return n < 2 ? n : fibonacci(n - 1) + fibonacci(n - 2);
- * });
- *
- * fibonacci(9)
- * // => 34
- *
- * var data = {
- *   'fred': { 'name': 'fred', 'age': 40 },
- *   'pebbles': { 'name': 'pebbles', 'age': 1 }
- * };
- *
- * // modifying the result cache
- * var get = _.memoize(function(name) { return data[name]; }, _.identity);
- * get('pebbles');
- * // => { 'name': 'pebbles', 'age': 1 }
- *
- * get.cache.pebbles.name = 'penelope';
- * get('pebbles');
- * // => { 'name': 'penelope', 'age': 1 }
- */
-function memoize(func, resolver) {
-  if (!isFunction(func)) {
-    throw new TypeError;
-  }
-  var memoized = function() {
-    var cache = memoized.cache,
-        key = resolver ? resolver.apply(this, arguments) : keyPrefix + arguments[0];
-
-    return hasOwnProperty.call(cache, key)
-      ? cache[key]
-      : (cache[key] = func.apply(this, arguments));
-  }
-  memoized.cache = {};
-  return memoized;
-}
-
-module.exports = memoize;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/functions/once.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/functions/once.js
deleted file mode 100644
index 8cc4d54..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/functions/once.js
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isFunction = require('../objects/isFunction');
-
-/**
- * Creates a function that is restricted to execute `func` once. Repeat calls to
- * the function will return the value of the first call. The `func` is executed
- * with the `this` binding of the created function.
- *
- * @static
- * @memberOf _
- * @category Functions
- * @param {Function} func The function to restrict.
- * @returns {Function} Returns the new restricted function.
- * @example
- *
- * var initialize = _.once(createApplication);
- * initialize();
- * initialize();
- * // `initialize` executes `createApplication` once
- */
-function once(func) {
-  var ran,
-      result;
-
-  if (!isFunction(func)) {
-    throw new TypeError;
-  }
-  return function() {
-    if (ran) {
-      return result;
-    }
-    ran = true;
-    result = func.apply(this, arguments);
-
-    // clear the `func` variable so the function may be garbage collected
-    func = null;
-    return result;
-  };
-}
-
-module.exports = once;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/functions/partial.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/functions/partial.js
deleted file mode 100644
index 87854f5..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/functions/partial.js
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createWrapper = require('../internals/createWrapper'),
-    slice = require('../internals/slice');
-
-/**
- * Creates a function that, when called, invokes `func` with any additional
- * `partial` arguments prepended to those provided to the new function. This
- * method is similar to `_.bind` except it does **not** alter the `this` binding.
- *
- * @static
- * @memberOf _
- * @category Functions
- * @param {Function} func The function to partially apply arguments to.
- * @param {...*} [arg] Arguments to be partially applied.
- * @returns {Function} Returns the new partially applied function.
- * @example
- *
- * var greet = function(greeting, name) { return greeting + ' ' + name; };
- * var hi = _.partial(greet, 'hi');
- * hi('fred');
- * // => 'hi fred'
- */
-function partial(func) {
-  return createWrapper(func, 16, slice(arguments, 1));
-}
-
-module.exports = partial;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/functions/partialRight.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/functions/partialRight.js
deleted file mode 100644
index 3958f6b..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/functions/partialRight.js
+++ /dev/null
@@ -1,43 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createWrapper = require('../internals/createWrapper'),
-    slice = require('../internals/slice');
-
-/**
- * This method is like `_.partial` except that `partial` arguments are
- * appended to those provided to the new function.
- *
- * @static
- * @memberOf _
- * @category Functions
- * @param {Function} func The function to partially apply arguments to.
- * @param {...*} [arg] Arguments to be partially applied.
- * @returns {Function} Returns the new partially applied function.
- * @example
- *
- * var defaultsDeep = _.partialRight(_.merge, _.defaults);
- *
- * var options = {
- *   'variable': 'data',
- *   'imports': { 'jq': $ }
- * };
- *
- * defaultsDeep(options, _.templateSettings);
- *
- * options.variable
- * // => 'data'
- *
- * options.imports
- * // => { '_': _, 'jq': $ }
- */
-function partialRight(func) {
-  return createWrapper(func, 32, null, slice(arguments, 1));
-}
-
-module.exports = partialRight;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/functions/throttle.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/functions/throttle.js
deleted file mode 100644
index 5b5daf5..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/functions/throttle.js
+++ /dev/null
@@ -1,71 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var debounce = require('./debounce'),
-    isFunction = require('../objects/isFunction'),
-    isObject = require('../objects/isObject');
-
-/** Used as an internal `_.debounce` options object */
-var debounceOptions = {
-  'leading': false,
-  'maxWait': 0,
-  'trailing': false
-};
-
-/**
- * Creates a function that, when executed, will only call the `func` function
- * at most once per every `wait` milliseconds. Provide an options object to
- * indicate that `func` should be invoked on the leading and/or trailing edge
- * of the `wait` timeout. Subsequent calls to the throttled function will
- * return the result of the last `func` call.
- *
- * Note: If `leading` and `trailing` options are `true` `func` will be called
- * on the trailing edge of the timeout only if the the throttled function is
- * invoked more than once during the `wait` timeout.
- *
- * @static
- * @memberOf _
- * @category Functions
- * @param {Function} func The function to throttle.
- * @param {number} wait The number of milliseconds to throttle executions to.
- * @param {Object} [options] The options object.
- * @param {boolean} [options.leading=true] Specify execution on the leading edge of the timeout.
- * @param {boolean} [options.trailing=true] Specify execution on the trailing edge of the timeout.
- * @returns {Function} Returns the new throttled function.
- * @example
- *
- * // avoid excessively updating the position while scrolling
- * var throttled = _.throttle(updatePosition, 100);
- * jQuery(window).on('scroll', throttled);
- *
- * // execute `renewToken` when the click event is fired, but not more than once every 5 minutes
- * jQuery('.interactive').on('click', _.throttle(renewToken, 300000, {
- *   'trailing': false
- * }));
- */
-function throttle(func, wait, options) {
-  var leading = true,
-      trailing = true;
-
-  if (!isFunction(func)) {
-    throw new TypeError;
-  }
-  if (options === false) {
-    leading = false;
-  } else if (isObject(options)) {
-    leading = 'leading' in options ? options.leading : leading;
-    trailing = 'trailing' in options ? options.trailing : trailing;
-  }
-  debounceOptions.leading = leading;
-  debounceOptions.maxWait = wait;
-  debounceOptions.trailing = trailing;
-
-  return debounce(func, wait, debounceOptions);
-}
-
-module.exports = throttle;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/functions/wrap.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/functions/wrap.js
deleted file mode 100644
index e547b1d..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/functions/wrap.js
+++ /dev/null
@@ -1,36 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createWrapper = require('../internals/createWrapper');
-
-/**
- * Creates a function that provides `value` to the wrapper function as its
- * first argument. Additional arguments provided to the function are appended
- * to those provided to the wrapper function. The wrapper is executed with
- * the `this` binding of the created function.
- *
- * @static
- * @memberOf _
- * @category Functions
- * @param {*} value The value to wrap.
- * @param {Function} wrapper The wrapper function.
- * @returns {Function} Returns the new function.
- * @example
- *
- * var p = _.wrap(_.escape, function(func, text) {
- *   return '<p>' + func(text) + '</p>';
- * });
- *
- * p('Fred, Wilma, & Pebbles');
- * // => '<p>Fred, Wilma, &amp; Pebbles</p>'
- */
-function wrap(value, wrapper) {
-  return createWrapper(wrapper, 16, [value]);
-}
-
-module.exports = wrap;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/index.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/index.js
deleted file mode 100644
index e98868e..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/index.js
+++ /dev/null
@@ -1,354 +0,0 @@
-/**
- * @license
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var arrays = require('./arrays'),
-    chaining = require('./chaining'),
-    collections = require('./collections'),
-    functions = require('./functions'),
-    objects = require('./objects'),
-    utilities = require('./utilities'),
-    forEach = require('./collections/forEach'),
-    forOwn = require('./objects/forOwn'),
-    isArray = require('./objects/isArray'),
-    lodashWrapper = require('./internals/lodashWrapper'),
-    mixin = require('./utilities/mixin'),
-    support = require('./support'),
-    templateSettings = require('./utilities/templateSettings');
-
-/**
- * Used for `Array` method references.
- *
- * Normally `Array.prototype` would suffice, however, using an array literal
- * avoids issues in Narwhal.
- */
-var arrayRef = [];
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Native method shortcuts */
-var hasOwnProperty = objectProto.hasOwnProperty;
-
-/**
- * Creates a `lodash` object which wraps the given value to enable intuitive
- * method chaining.
- *
- * In addition to Lo-Dash methods, wrappers also have the following `Array` methods:
- * `concat`, `join`, `pop`, `push`, `reverse`, `shift`, `slice`, `sort`, `splice`,
- * and `unshift`
- *
- * Chaining is supported in custom builds as long as the `value` method is
- * implicitly or explicitly included in the build.
- *
- * The chainable wrapper functions are:
- * `after`, `assign`, `bind`, `bindAll`, `bindKey`, `chain`, `compact`,
- * `compose`, `concat`, `countBy`, `create`, `createCallback`, `curry`,
- * `debounce`, `defaults`, `defer`, `delay`, `difference`, `filter`, `flatten`,
- * `forEach`, `forEachRight`, `forIn`, `forInRight`, `forOwn`, `forOwnRight`,
- * `functions`, `groupBy`, `indexBy`, `initial`, `intersection`, `invert`,
- * `invoke`, `keys`, `map`, `max`, `memoize`, `merge`, `min`, `object`, `omit`,
- * `once`, `pairs`, `partial`, `partialRight`, `pick`, `pluck`, `pull`, `push`,
- * `range`, `reject`, `remove`, `rest`, `reverse`, `shuffle`, `slice`, `sort`,
- * `sortBy`, `splice`, `tap`, `throttle`, `times`, `toArray`, `transform`,
- * `union`, `uniq`, `unshift`, `unzip`, `values`, `where`, `without`, `wrap`,
- * and `zip`
- *
- * The non-chainable wrapper functions are:
- * `clone`, `cloneDeep`, `contains`, `escape`, `every`, `find`, `findIndex`,
- * `findKey`, `findLast`, `findLastIndex`, `findLastKey`, `has`, `identity`,
- * `indexOf`, `isArguments`, `isArray`, `isBoolean`, `isDate`, `isElement`,
- * `isEmpty`, `isEqual`, `isFinite`, `isFunction`, `isNaN`, `isNull`, `isNumber`,
- * `isObject`, `isPlainObject`, `isRegExp`, `isString`, `isUndefined`, `join`,
- * `lastIndexOf`, `mixin`, `noConflict`, `parseInt`, `pop`, `random`, `reduce`,
- * `reduceRight`, `result`, `shift`, `size`, `some`, `sortedIndex`, `runInContext`,
- * `template`, `unescape`, `uniqueId`, and `value`
- *
- * The wrapper functions `first` and `last` return wrapped values when `n` is
- * provided, otherwise they return unwrapped values.
- *
- * Explicit chaining can be enabled by using the `_.chain` method.
- *
- * @name _
- * @constructor
- * @category Chaining
- * @param {*} value The value to wrap in a `lodash` instance.
- * @returns {Object} Returns a `lodash` instance.
- * @example
- *
- * var wrapped = _([1, 2, 3]);
- *
- * // returns an unwrapped value
- * wrapped.reduce(function(sum, num) {
- *   return sum + num;
- * });
- * // => 6
- *
- * // returns a wrapped value
- * var squares = wrapped.map(function(num) {
- *   return num * num;
- * });
- *
- * _.isArray(squares);
- * // => false
- *
- * _.isArray(squares.value());
- * // => true
- */
-function lodash(value) {
-  // don't wrap if already wrapped, even if wrapped by a different `lodash` constructor
-  return (value && typeof value == 'object' && !isArray(value) && hasOwnProperty.call(value, '__wrapped__'))
-   ? value
-   : new lodashWrapper(value);
-}
-// ensure `new lodashWrapper` is an instance of `lodash`
-lodashWrapper.prototype = lodash.prototype;
-
-// wrap `_.mixin` so it works when provided only one argument
-mixin = (function(fn) {
-  var functions = objects.functions;
-  return function(object, source, options) {
-    if (!source || (!options && !functions(source).length)) {
-      if (options == null) {
-        options = source;
-      }
-      source = object;
-      object = lodash;
-    }
-    return fn(object, source, options);
-  };
-}(mixin));
-
-// add functions that return wrapped values when chaining
-lodash.after = functions.after;
-lodash.assign = objects.assign;
-lodash.at = collections.at;
-lodash.bind = functions.bind;
-lodash.bindAll = functions.bindAll;
-lodash.bindKey = functions.bindKey;
-lodash.chain = chaining.chain;
-lodash.compact = arrays.compact;
-lodash.compose = functions.compose;
-lodash.constant = utilities.constant;
-lodash.countBy = collections.countBy;
-lodash.create = objects.create;
-lodash.createCallback = functions.createCallback;
-lodash.curry = functions.curry;
-lodash.debounce = functions.debounce;
-lodash.defaults = objects.defaults;
-lodash.defer = functions.defer;
-lodash.delay = functions.delay;
-lodash.difference = arrays.difference;
-lodash.filter = collections.filter;
-lodash.flatten = arrays.flatten;
-lodash.forEach = forEach;
-lodash.forEachRight = collections.forEachRight;
-lodash.forIn = objects.forIn;
-lodash.forInRight = objects.forInRight;
-lodash.forOwn = forOwn;
-lodash.forOwnRight = objects.forOwnRight;
-lodash.functions = objects.functions;
-lodash.groupBy = collections.groupBy;
-lodash.indexBy = collections.indexBy;
-lodash.initial = arrays.initial;
-lodash.intersection = arrays.intersection;
-lodash.invert = objects.invert;
-lodash.invoke = collections.invoke;
-lodash.keys = objects.keys;
-lodash.map = collections.map;
-lodash.mapValues = objects.mapValues;
-lodash.max = collections.max;
-lodash.memoize = functions.memoize;
-lodash.merge = objects.merge;
-lodash.min = collections.min;
-lodash.omit = objects.omit;
-lodash.once = functions.once;
-lodash.pairs = objects.pairs;
-lodash.partial = functions.partial;
-lodash.partialRight = functions.partialRight;
-lodash.pick = objects.pick;
-lodash.pluck = collections.pluck;
-lodash.property = utilities.property;
-lodash.pull = arrays.pull;
-lodash.range = arrays.range;
-lodash.reject = collections.reject;
-lodash.remove = arrays.remove;
-lodash.rest = arrays.rest;
-lodash.shuffle = collections.shuffle;
-lodash.sortBy = collections.sortBy;
-lodash.tap = chaining.tap;
-lodash.throttle = functions.throttle;
-lodash.times = utilities.times;
-lodash.toArray = collections.toArray;
-lodash.transform = objects.transform;
-lodash.union = arrays.union;
-lodash.uniq = arrays.uniq;
-lodash.values = objects.values;
-lodash.where = collections.where;
-lodash.without = arrays.without;
-lodash.wrap = functions.wrap;
-lodash.xor = arrays.xor;
-lodash.zip = arrays.zip;
-lodash.zipObject = arrays.zipObject;
-
-// add aliases
-lodash.collect = collections.map;
-lodash.drop = arrays.rest;
-lodash.each = forEach;
-lodash.eachRight = collections.forEachRight;
-lodash.extend = objects.assign;
-lodash.methods = objects.functions;
-lodash.object = arrays.zipObject;
-lodash.select = collections.filter;
-lodash.tail = arrays.rest;
-lodash.unique = arrays.uniq;
-lodash.unzip = arrays.zip;
-
-// add functions to `lodash.prototype`
-mixin(lodash);
-
-// add functions that return unwrapped values when chaining
-lodash.clone = objects.clone;
-lodash.cloneDeep = objects.cloneDeep;
-lodash.contains = collections.contains;
-lodash.escape = utilities.escape;
-lodash.every = collections.every;
-lodash.find = collections.find;
-lodash.findIndex = arrays.findIndex;
-lodash.findKey = objects.findKey;
-lodash.findLast = collections.findLast;
-lodash.findLastIndex = arrays.findLastIndex;
-lodash.findLastKey = objects.findLastKey;
-lodash.has = objects.has;
-lodash.identity = utilities.identity;
-lodash.indexOf = arrays.indexOf;
-lodash.isArguments = objects.isArguments;
-lodash.isArray = isArray;
-lodash.isBoolean = objects.isBoolean;
-lodash.isDate = objects.isDate;
-lodash.isElement = objects.isElement;
-lodash.isEmpty = objects.isEmpty;
-lodash.isEqual = objects.isEqual;
-lodash.isFinite = objects.isFinite;
-lodash.isFunction = objects.isFunction;
-lodash.isNaN = objects.isNaN;
-lodash.isNull = objects.isNull;
-lodash.isNumber = objects.isNumber;
-lodash.isObject = objects.isObject;
-lodash.isPlainObject = objects.isPlainObject;
-lodash.isRegExp = objects.isRegExp;
-lodash.isString = objects.isString;
-lodash.isUndefined = objects.isUndefined;
-lodash.lastIndexOf = arrays.lastIndexOf;
-lodash.mixin = mixin;
-lodash.noConflict = utilities.noConflict;
-lodash.noop = utilities.noop;
-lodash.now = utilities.now;
-lodash.parseInt = utilities.parseInt;
-lodash.random = utilities.random;
-lodash.reduce = collections.reduce;
-lodash.reduceRight = collections.reduceRight;
-lodash.result = utilities.result;
-lodash.size = collections.size;
-lodash.some = collections.some;
-lodash.sortedIndex = arrays.sortedIndex;
-lodash.template = utilities.template;
-lodash.unescape = utilities.unescape;
-lodash.uniqueId = utilities.uniqueId;
-
-// add aliases
-lodash.all = collections.every;
-lodash.any = collections.some;
-lodash.detect = collections.find;
-lodash.findWhere = collections.find;
-lodash.foldl = collections.reduce;
-lodash.foldr = collections.reduceRight;
-lodash.include = collections.contains;
-lodash.inject = collections.reduce;
-
-mixin(function() {
-  var source = {}
-  forOwn(lodash, function(func, methodName) {
-    if (!lodash.prototype[methodName]) {
-      source[methodName] = func;
-    }
-  });
-  return source;
-}(), false);
-
-// add functions capable of returning wrapped and unwrapped values when chaining
-lodash.first = arrays.first;
-lodash.last = arrays.last;
-lodash.sample = collections.sample;
-
-// add aliases
-lodash.take = arrays.first;
-lodash.head = arrays.first;
-
-forOwn(lodash, function(func, methodName) {
-  var callbackable = methodName !== 'sample';
-  if (!lodash.prototype[methodName]) {
-    lodash.prototype[methodName]= function(n, guard) {
-      var chainAll = this.__chain__,
-          result = func(this.__wrapped__, n, guard);
-
-      return !chainAll && (n == null || (guard && !(callbackable && typeof n == 'function')))
-        ? result
-        : new lodashWrapper(result, chainAll);
-    };
-  }
-});
-
-/**
- * The semantic version number.
- *
- * @static
- * @memberOf _
- * @type string
- */
-lodash.VERSION = '2.4.1';
-
-// add "Chaining" functions to the wrapper
-lodash.prototype.chain = chaining.wrapperChain;
-lodash.prototype.toString = chaining.wrapperToString;
-lodash.prototype.value = chaining.wrapperValueOf;
-lodash.prototype.valueOf = chaining.wrapperValueOf;
-
-// add `Array` functions that return unwrapped values
-forEach(['join', 'pop', 'shift'], function(methodName) {
-  var func = arrayRef[methodName];
-  lodash.prototype[methodName] = function() {
-    var chainAll = this.__chain__,
-        result = func.apply(this.__wrapped__, arguments);
-
-    return chainAll
-      ? new lodashWrapper(result, chainAll)
-      : result;
-  };
-});
-
-// add `Array` functions that return the existing wrapped value
-forEach(['push', 'reverse', 'sort', 'unshift'], function(methodName) {
-  var func = arrayRef[methodName];
-  lodash.prototype[methodName] = function() {
-    func.apply(this.__wrapped__, arguments);
-    return this;
-  };
-});
-
-// add `Array` functions that return new wrapped values
-forEach(['concat', 'slice', 'splice'], function(methodName) {
-  var func = arrayRef[methodName];
-  lodash.prototype[methodName] = function() {
-    return new lodashWrapper(func.apply(this.__wrapped__, arguments), this.__chain__);
-  };
-});
-
-lodash.support = support;
-(lodash.templateSettings = utilities.templateSettings).imports._ = lodash;
-module.exports = lodash;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/arrayPool.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/arrayPool.js
deleted file mode 100644
index bc41f7f..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/arrayPool.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** Used to pool arrays and objects used internally */
-var arrayPool = [];
-
-module.exports = arrayPool;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/baseBind.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/baseBind.js
deleted file mode 100644
index ecf04c5..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/baseBind.js
+++ /dev/null
@@ -1,62 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseCreate = require('./baseCreate'),
-    isObject = require('../objects/isObject'),
-    setBindData = require('./setBindData'),
-    slice = require('./slice');
-
-/**
- * Used for `Array` method references.
- *
- * Normally `Array.prototype` would suffice, however, using an array literal
- * avoids issues in Narwhal.
- */
-var arrayRef = [];
-
-/** Native method shortcuts */
-var push = arrayRef.push;
-
-/**
- * The base implementation of `_.bind` that creates the bound function and
- * sets its meta data.
- *
- * @private
- * @param {Array} bindData The bind data array.
- * @returns {Function} Returns the new bound function.
- */
-function baseBind(bindData) {
-  var func = bindData[0],
-      partialArgs = bindData[2],
-      thisArg = bindData[4];
-
-  function bound() {
-    // `Function#bind` spec
-    // http://es5.github.io/#x15.3.4.5
-    if (partialArgs) {
-      // avoid `arguments` object deoptimizations by using `slice` instead
-      // of `Array.prototype.slice.call` and not assigning `arguments` to a
-      // variable as a ternary expression
-      var args = slice(partialArgs);
-      push.apply(args, arguments);
-    }
-    // mimic the constructor's `return` behavior
-    // http://es5.github.io/#x13.2.2
-    if (this instanceof bound) {
-      // ensure `new bound` is an instance of `func`
-      var thisBinding = baseCreate(func.prototype),
-          result = func.apply(thisBinding, args || arguments);
-      return isObject(result) ? result : thisBinding;
-    }
-    return func.apply(thisArg, args || arguments);
-  }
-  setBindData(bound, bindData);
-  return bound;
-}
-
-module.exports = baseBind;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/baseClone.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/baseClone.js
deleted file mode 100644
index 13c8354..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/baseClone.js
+++ /dev/null
@@ -1,152 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var assign = require('../objects/assign'),
-    forEach = require('../collections/forEach'),
-    forOwn = require('../objects/forOwn'),
-    getArray = require('./getArray'),
-    isArray = require('../objects/isArray'),
-    isObject = require('../objects/isObject'),
-    releaseArray = require('./releaseArray'),
-    slice = require('./slice');
-
-/** Used to match regexp flags from their coerced string values */
-var reFlags = /\w*$/;
-
-/** `Object#toString` result shortcuts */
-var argsClass = '[object Arguments]',
-    arrayClass = '[object Array]',
-    boolClass = '[object Boolean]',
-    dateClass = '[object Date]',
-    funcClass = '[object Function]',
-    numberClass = '[object Number]',
-    objectClass = '[object Object]',
-    regexpClass = '[object RegExp]',
-    stringClass = '[object String]';
-
-/** Used to identify object classifications that `_.clone` supports */
-var cloneableClasses = {};
-cloneableClasses[funcClass] = false;
-cloneableClasses[argsClass] = cloneableClasses[arrayClass] =
-cloneableClasses[boolClass] = cloneableClasses[dateClass] =
-cloneableClasses[numberClass] = cloneableClasses[objectClass] =
-cloneableClasses[regexpClass] = cloneableClasses[stringClass] = true;
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Used to resolve the internal [[Class]] of values */
-var toString = objectProto.toString;
-
-/** Native method shortcuts */
-var hasOwnProperty = objectProto.hasOwnProperty;
-
-/** Used to lookup a built-in constructor by [[Class]] */
-var ctorByClass = {};
-ctorByClass[arrayClass] = Array;
-ctorByClass[boolClass] = Boolean;
-ctorByClass[dateClass] = Date;
-ctorByClass[funcClass] = Function;
-ctorByClass[objectClass] = Object;
-ctorByClass[numberClass] = Number;
-ctorByClass[regexpClass] = RegExp;
-ctorByClass[stringClass] = String;
-
-/**
- * The base implementation of `_.clone` without argument juggling or support
- * for `thisArg` binding.
- *
- * @private
- * @param {*} value The value to clone.
- * @param {boolean} [isDeep=false] Specify a deep clone.
- * @param {Function} [callback] The function to customize cloning values.
- * @param {Array} [stackA=[]] Tracks traversed source objects.
- * @param {Array} [stackB=[]] Associates clones with source counterparts.
- * @returns {*} Returns the cloned value.
- */
-function baseClone(value, isDeep, callback, stackA, stackB) {
-  if (callback) {
-    var result = callback(value);
-    if (typeof result != 'undefined') {
-      return result;
-    }
-  }
-  // inspect [[Class]]
-  var isObj = isObject(value);
-  if (isObj) {
-    var className = toString.call(value);
-    if (!cloneableClasses[className]) {
-      return value;
-    }
-    var ctor = ctorByClass[className];
-    switch (className) {
-      case boolClass:
-      case dateClass:
-        return new ctor(+value);
-
-      case numberClass:
-      case stringClass:
-        return new ctor(value);
-
-      case regexpClass:
-        result = ctor(value.source, reFlags.exec(value));
-        result.lastIndex = value.lastIndex;
-        return result;
-    }
-  } else {
-    return value;
-  }
-  var isArr = isArray(value);
-  if (isDeep) {
-    // check for circular references and return corresponding clone
-    var initedStack = !stackA;
-    stackA || (stackA = getArray());
-    stackB || (stackB = getArray());
-
-    var length = stackA.length;
-    while (length--) {
-      if (stackA[length] == value) {
-        return stackB[length];
-      }
-    }
-    result = isArr ? ctor(value.length) : {};
-  }
-  else {
-    result = isArr ? slice(value) : assign({}, value);
-  }
-  // add array properties assigned by `RegExp#exec`
-  if (isArr) {
-    if (hasOwnProperty.call(value, 'index')) {
-      result.index = value.index;
-    }
-    if (hasOwnProperty.call(value, 'input')) {
-      result.input = value.input;
-    }
-  }
-  // exit for shallow clone
-  if (!isDeep) {
-    return result;
-  }
-  // add the source value to the stack of traversed objects
-  // and associate it with its clone
-  stackA.push(value);
-  stackB.push(result);
-
-  // recursively populate clone (susceptible to call stack limits)
-  (isArr ? forEach : forOwn)(value, function(objValue, key) {
-    result[key] = baseClone(objValue, isDeep, callback, stackA, stackB);
-  });
-
-  if (initedStack) {
-    releaseArray(stackA);
-    releaseArray(stackB);
-  }
-  return result;
-}
-
-module.exports = baseClone;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/baseCreate.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/baseCreate.js
deleted file mode 100644
index 32d80e5..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/baseCreate.js
+++ /dev/null
@@ -1,42 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isNative = require('./isNative'),
-    isObject = require('../objects/isObject'),
-    noop = require('../utilities/noop');
-
-/* Native method shortcuts for methods with the same name as other `lodash` methods */
-var nativeCreate = isNative(nativeCreate = Object.create) && nativeCreate;
-
-/**
- * The base implementation of `_.create` without support for assigning
- * properties to the created object.
- *
- * @private
- * @param {Object} prototype The object to inherit from.
- * @returns {Object} Returns the new object.
- */
-function baseCreate(prototype, properties) {
-  return isObject(prototype) ? nativeCreate(prototype) : {};
-}
-// fallback for browsers without `Object.create`
-if (!nativeCreate) {
-  baseCreate = (function() {
-    function Object() {}
-    return function(prototype) {
-      if (isObject(prototype)) {
-        Object.prototype = prototype;
-        var result = new Object;
-        Object.prototype = null;
-      }
-      return result || global.Object();
-    };
-  }());
-}
-
-module.exports = baseCreate;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/baseCreateCallback.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/baseCreateCallback.js
deleted file mode 100644
index 7f90303..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/baseCreateCallback.js
+++ /dev/null
@@ -1,80 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var bind = require('../functions/bind'),
-    identity = require('../utilities/identity'),
-    setBindData = require('./setBindData'),
-    support = require('../support');
-
-/** Used to detected named functions */
-var reFuncName = /^\s*function[ \n\r\t]+\w/;
-
-/** Used to detect functions containing a `this` reference */
-var reThis = /\bthis\b/;
-
-/** Native method shortcuts */
-var fnToString = Function.prototype.toString;
-
-/**
- * The base implementation of `_.createCallback` without support for creating
- * "_.pluck" or "_.where" style callbacks.
- *
- * @private
- * @param {*} [func=identity] The value to convert to a callback.
- * @param {*} [thisArg] The `this` binding of the created callback.
- * @param {number} [argCount] The number of arguments the callback accepts.
- * @returns {Function} Returns a callback function.
- */
-function baseCreateCallback(func, thisArg, argCount) {
-  if (typeof func != 'function') {
-    return identity;
-  }
-  // exit early for no `thisArg` or already bound by `Function#bind`
-  if (typeof thisArg == 'undefined' || !('prototype' in func)) {
-    return func;
-  }
-  var bindData = func.__bindData__;
-  if (typeof bindData == 'undefined') {
-    if (support.funcNames) {
-      bindData = !func.name;
-    }
-    bindData = bindData || !support.funcDecomp;
-    if (!bindData) {
-      var source = fnToString.call(func);
-      if (!support.funcNames) {
-        bindData = !reFuncName.test(source);
-      }
-      if (!bindData) {
-        // checks if `func` references the `this` keyword and stores the result
-        bindData = reThis.test(source);
-        setBindData(func, bindData);
-      }
-    }
-  }
-  // exit early if there are no `this` references or `func` is bound
-  if (bindData === false || (bindData !== true && bindData[1] & 1)) {
-    return func;
-  }
-  switch (argCount) {
-    case 1: return function(value) {
-      return func.call(thisArg, value);
-    };
-    case 2: return function(a, b) {
-      return func.call(thisArg, a, b);
-    };
-    case 3: return function(value, index, collection) {
-      return func.call(thisArg, value, index, collection);
-    };
-    case 4: return function(accumulator, value, index, collection) {
-      return func.call(thisArg, accumulator, value, index, collection);
-    };
-  }
-  return bind(func, thisArg);
-}
-
-module.exports = baseCreateCallback;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/baseCreateWrapper.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/baseCreateWrapper.js
deleted file mode 100644
index 3ce5a77..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/baseCreateWrapper.js
+++ /dev/null
@@ -1,78 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseCreate = require('./baseCreate'),
-    isObject = require('../objects/isObject'),
-    setBindData = require('./setBindData'),
-    slice = require('./slice');
-
-/**
- * Used for `Array` method references.
- *
- * Normally `Array.prototype` would suffice, however, using an array literal
- * avoids issues in Narwhal.
- */
-var arrayRef = [];
-
-/** Native method shortcuts */
-var push = arrayRef.push;
-
-/**
- * The base implementation of `createWrapper` that creates the wrapper and
- * sets its meta data.
- *
- * @private
- * @param {Array} bindData The bind data array.
- * @returns {Function} Returns the new function.
- */
-function baseCreateWrapper(bindData) {
-  var func = bindData[0],
-      bitmask = bindData[1],
-      partialArgs = bindData[2],
-      partialRightArgs = bindData[3],
-      thisArg = bindData[4],
-      arity = bindData[5];
-
-  var isBind = bitmask & 1,
-      isBindKey = bitmask & 2,
-      isCurry = bitmask & 4,
-      isCurryBound = bitmask & 8,
-      key = func;
-
-  function bound() {
-    var thisBinding = isBind ? thisArg : this;
-    if (partialArgs) {
-      var args = slice(partialArgs);
-      push.apply(args, arguments);
-    }
-    if (partialRightArgs || isCurry) {
-      args || (args = slice(arguments));
-      if (partialRightArgs) {
-        push.apply(args, partialRightArgs);
-      }
-      if (isCurry && args.length < arity) {
-        bitmask |= 16 & ~32;
-        return baseCreateWrapper([func, (isCurryBound ? bitmask : bitmask & ~3), args, null, thisArg, arity]);
-      }
-    }
-    args || (args = arguments);
-    if (isBindKey) {
-      func = thisBinding[key];
-    }
-    if (this instanceof bound) {
-      thisBinding = baseCreate(func.prototype);
-      var result = func.apply(thisBinding, args);
-      return isObject(result) ? result : thisBinding;
-    }
-    return func.apply(thisBinding, args);
-  }
-  setBindData(bound, bindData);
-  return bound;
-}
-
-module.exports = baseCreateWrapper;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/baseDifference.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/baseDifference.js
deleted file mode 100644
index 6cd38a5..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/baseDifference.js
+++ /dev/null
@@ -1,52 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseIndexOf = require('./baseIndexOf'),
-    cacheIndexOf = require('./cacheIndexOf'),
-    createCache = require('./createCache'),
-    largeArraySize = require('./largeArraySize'),
-    releaseObject = require('./releaseObject');
-
-/**
- * The base implementation of `_.difference` that accepts a single array
- * of values to exclude.
- *
- * @private
- * @param {Array} array The array to process.
- * @param {Array} [values] The array of values to exclude.
- * @returns {Array} Returns a new array of filtered values.
- */
-function baseDifference(array, values) {
-  var index = -1,
-      indexOf = baseIndexOf,
-      length = array ? array.length : 0,
-      isLarge = length >= largeArraySize,
-      result = [];
-
-  if (isLarge) {
-    var cache = createCache(values);
-    if (cache) {
-      indexOf = cacheIndexOf;
-      values = cache;
-    } else {
-      isLarge = false;
-    }
-  }
-  while (++index < length) {
-    var value = array[index];
-    if (indexOf(values, value) < 0) {
-      result.push(value);
-    }
-  }
-  if (isLarge) {
-    releaseObject(values);
-  }
-  return result;
-}
-
-module.exports = baseDifference;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/baseFlatten.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/baseFlatten.js
deleted file mode 100644
index 5da8ba0..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/baseFlatten.js
+++ /dev/null
@@ -1,52 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isArguments = require('../objects/isArguments'),
-    isArray = require('../objects/isArray');
-
-/**
- * The base implementation of `_.flatten` without support for callback
- * shorthands or `thisArg` binding.
- *
- * @private
- * @param {Array} array The array to flatten.
- * @param {boolean} [isShallow=false] A flag to restrict flattening to a single level.
- * @param {boolean} [isStrict=false] A flag to restrict flattening to arrays and `arguments` objects.
- * @param {number} [fromIndex=0] The index to start from.
- * @returns {Array} Returns a new flattened array.
- */
-function baseFlatten(array, isShallow, isStrict, fromIndex) {
-  var index = (fromIndex || 0) - 1,
-      length = array ? array.length : 0,
-      result = [];
-
-  while (++index < length) {
-    var value = array[index];
-
-    if (value && typeof value == 'object' && typeof value.length == 'number'
-        && (isArray(value) || isArguments(value))) {
-      // recursively flatten arrays (susceptible to call stack limits)
-      if (!isShallow) {
-        value = baseFlatten(value, isShallow, isStrict);
-      }
-      var valIndex = -1,
-          valLength = value.length,
-          resIndex = result.length;
-
-      result.length += valLength;
-      while (++valIndex < valLength) {
-        result[resIndex++] = value[valIndex];
-      }
-    } else if (!isStrict) {
-      result.push(value);
-    }
-  }
-  return result;
-}
-
-module.exports = baseFlatten;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/baseIndexOf.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/baseIndexOf.js
deleted file mode 100644
index f1f7fef..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/baseIndexOf.js
+++ /dev/null
@@ -1,32 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * The base implementation of `_.indexOf` without support for binary searches
- * or `fromIndex` constraints.
- *
- * @private
- * @param {Array} array The array to search.
- * @param {*} value The value to search for.
- * @param {number} [fromIndex=0] The index to search from.
- * @returns {number} Returns the index of the matched value or `-1`.
- */
-function baseIndexOf(array, value, fromIndex) {
-  var index = (fromIndex || 0) - 1,
-      length = array ? array.length : 0;
-
-  while (++index < length) {
-    if (array[index] === value) {
-      return index;
-    }
-  }
-  return -1;
-}
-
-module.exports = baseIndexOf;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/baseIsEqual.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/baseIsEqual.js
deleted file mode 100644
index 19504c7..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/baseIsEqual.js
+++ /dev/null
@@ -1,209 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var forIn = require('../objects/forIn'),
-    getArray = require('./getArray'),
-    isFunction = require('../objects/isFunction'),
-    objectTypes = require('./objectTypes'),
-    releaseArray = require('./releaseArray');
-
-/** `Object#toString` result shortcuts */
-var argsClass = '[object Arguments]',
-    arrayClass = '[object Array]',
-    boolClass = '[object Boolean]',
-    dateClass = '[object Date]',
-    numberClass = '[object Number]',
-    objectClass = '[object Object]',
-    regexpClass = '[object RegExp]',
-    stringClass = '[object String]';
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Used to resolve the internal [[Class]] of values */
-var toString = objectProto.toString;
-
-/** Native method shortcuts */
-var hasOwnProperty = objectProto.hasOwnProperty;
-
-/**
- * The base implementation of `_.isEqual`, without support for `thisArg` binding,
- * that allows partial "_.where" style comparisons.
- *
- * @private
- * @param {*} a The value to compare.
- * @param {*} b The other value to compare.
- * @param {Function} [callback] The function to customize comparing values.
- * @param {Function} [isWhere=false] A flag to indicate performing partial comparisons.
- * @param {Array} [stackA=[]] Tracks traversed `a` objects.
- * @param {Array} [stackB=[]] Tracks traversed `b` objects.
- * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
- */
-function baseIsEqual(a, b, callback, isWhere, stackA, stackB) {
-  // used to indicate that when comparing objects, `a` has at least the properties of `b`
-  if (callback) {
-    var result = callback(a, b);
-    if (typeof result != 'undefined') {
-      return !!result;
-    }
-  }
-  // exit early for identical values
-  if (a === b) {
-    // treat `+0` vs. `-0` as not equal
-    return a !== 0 || (1 / a == 1 / b);
-  }
-  var type = typeof a,
-      otherType = typeof b;
-
-  // exit early for unlike primitive values
-  if (a === a &&
-      !(a && objectTypes[type]) &&
-      !(b && objectTypes[otherType])) {
-    return false;
-  }
-  // exit early for `null` and `undefined` avoiding ES3's Function#call behavior
-  // http://es5.github.io/#x15.3.4.4
-  if (a == null || b == null) {
-    return a === b;
-  }
-  // compare [[Class]] names
-  var className = toString.call(a),
-      otherClass = toString.call(b);
-
-  if (className == argsClass) {
-    className = objectClass;
-  }
-  if (otherClass == argsClass) {
-    otherClass = objectClass;
-  }
-  if (className != otherClass) {
-    return false;
-  }
-  switch (className) {
-    case boolClass:
-    case dateClass:
-      // coerce dates and booleans to numbers, dates to milliseconds and booleans
-      // to `1` or `0` treating invalid dates coerced to `NaN` as not equal
-      return +a == +b;
-
-    case numberClass:
-      // treat `NaN` vs. `NaN` as equal
-      return (a != +a)
-        ? b != +b
-        // but treat `+0` vs. `-0` as not equal
-        : (a == 0 ? (1 / a == 1 / b) : a == +b);
-
-    case regexpClass:
-    case stringClass:
-      // coerce regexes to strings (http://es5.github.io/#x15.10.6.4)
-      // treat string primitives and their corresponding object instances as equal
-      return a == String(b);
-  }
-  var isArr = className == arrayClass;
-  if (!isArr) {
-    // unwrap any `lodash` wrapped values
-    var aWrapped = hasOwnProperty.call(a, '__wrapped__'),
-        bWrapped = hasOwnProperty.call(b, '__wrapped__');
-
-    if (aWrapped || bWrapped) {
-      return baseIsEqual(aWrapped ? a.__wrapped__ : a, bWrapped ? b.__wrapped__ : b, callback, isWhere, stackA, stackB);
-    }
-    // exit for functions and DOM nodes
-    if (className != objectClass) {
-      return false;
-    }
-    // in older versions of Opera, `arguments` objects have `Array` constructors
-    var ctorA = a.constructor,
-        ctorB = b.constructor;
-
-    // non `Object` object instances with different constructors are not equal
-    if (ctorA != ctorB &&
-          !(isFunction(ctorA) && ctorA instanceof ctorA && isFunction(ctorB) && ctorB instanceof ctorB) &&
-          ('constructor' in a && 'constructor' in b)
-        ) {
-      return false;
-    }
-  }
-  // assume cyclic structures are equal
-  // the algorithm for detecting cyclic structures is adapted from ES 5.1
-  // section 15.12.3, abstract operation `JO` (http://es5.github.io/#x15.12.3)
-  var initedStack = !stackA;
-  stackA || (stackA = getArray());
-  stackB || (stackB = getArray());
-
-  var length = stackA.length;
-  while (length--) {
-    if (stackA[length] == a) {
-      return stackB[length] == b;
-    }
-  }
-  var size = 0;
-  result = true;
-
-  // add `a` and `b` to the stack of traversed objects
-  stackA.push(a);
-  stackB.push(b);
-
-  // recursively compare objects and arrays (susceptible to call stack limits)
-  if (isArr) {
-    // compare lengths to determine if a deep comparison is necessary
-    length = a.length;
-    size = b.length;
-    result = size == length;
-
-    if (result || isWhere) {
-      // deep compare the contents, ignoring non-numeric properties
-      while (size--) {
-        var index = length,
-            value = b[size];
-
-        if (isWhere) {
-          while (index--) {
-            if ((result = baseIsEqual(a[index], value, callback, isWhere, stackA, stackB))) {
-              break;
-            }
-          }
-        } else if (!(result = baseIsEqual(a[size], value, callback, isWhere, stackA, stackB))) {
-          break;
-        }
-      }
-    }
-  }
-  else {
-    // deep compare objects using `forIn`, instead of `forOwn`, to avoid `Object.keys`
-    // which, in this case, is more costly
-    forIn(b, function(value, key, b) {
-      if (hasOwnProperty.call(b, key)) {
-        // count the number of properties.
-        size++;
-        // deep compare each property value.
-        return (result = hasOwnProperty.call(a, key) && baseIsEqual(a[key], value, callback, isWhere, stackA, stackB));
-      }
-    });
-
-    if (result && !isWhere) {
-      // ensure both objects have the same number of properties
-      forIn(a, function(value, key, a) {
-        if (hasOwnProperty.call(a, key)) {
-          // `size` will be `-1` if `a` has more properties than `b`
-          return (result = --size > -1);
-        }
-      });
-    }
-  }
-  stackA.pop();
-  stackB.pop();
-
-  if (initedStack) {
-    releaseArray(stackA);
-    releaseArray(stackB);
-  }
-  return result;
-}
-
-module.exports = baseIsEqual;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/baseMerge.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/baseMerge.js
deleted file mode 100644
index ae13bad..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/baseMerge.js
+++ /dev/null
@@ -1,79 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var forEach = require('../collections/forEach'),
-    forOwn = require('../objects/forOwn'),
-    isArray = require('../objects/isArray'),
-    isPlainObject = require('../objects/isPlainObject');
-
-/**
- * The base implementation of `_.merge` without argument juggling or support
- * for `thisArg` binding.
- *
- * @private
- * @param {Object} object The destination object.
- * @param {Object} source The source object.
- * @param {Function} [callback] The function to customize merging properties.
- * @param {Array} [stackA=[]] Tracks traversed source objects.
- * @param {Array} [stackB=[]] Associates values with source counterparts.
- */
-function baseMerge(object, source, callback, stackA, stackB) {
-  (isArray(source) ? forEach : forOwn)(source, function(source, key) {
-    var found,
-        isArr,
-        result = source,
-        value = object[key];
-
-    if (source && ((isArr = isArray(source)) || isPlainObject(source))) {
-      // avoid merging previously merged cyclic sources
-      var stackLength = stackA.length;
-      while (stackLength--) {
-        if ((found = stackA[stackLength] == source)) {
-          value = stackB[stackLength];
-          break;
-        }
-      }
-      if (!found) {
-        var isShallow;
-        if (callback) {
-          result = callback(value, source);
-          if ((isShallow = typeof result != 'undefined')) {
-            value = result;
-          }
-        }
-        if (!isShallow) {
-          value = isArr
-            ? (isArray(value) ? value : [])
-            : (isPlainObject(value) ? value : {});
-        }
-        // add `source` and associated `value` to the stack of traversed objects
-        stackA.push(source);
-        stackB.push(value);
-
-        // recursively merge objects and arrays (susceptible to call stack limits)
-        if (!isShallow) {
-          baseMerge(value, source, callback, stackA, stackB);
-        }
-      }
-    }
-    else {
-      if (callback) {
-        result = callback(value, source);
-        if (typeof result == 'undefined') {
-          result = source;
-        }
-      }
-      if (typeof result != 'undefined') {
-        value = result;
-      }
-    }
-    object[key] = value;
-  });
-}
-
-module.exports = baseMerge;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/baseRandom.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/baseRandom.js
deleted file mode 100644
index 3bce8f8..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/baseRandom.js
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** Native method shortcuts */
-var floor = Math.floor;
-
-/* Native method shortcuts for methods with the same name as other `lodash` methods */
-var nativeRandom = Math.random;
-
-/**
- * The base implementation of `_.random` without argument juggling or support
- * for returning floating-point numbers.
- *
- * @private
- * @param {number} min The minimum possible value.
- * @param {number} max The maximum possible value.
- * @returns {number} Returns a random number.
- */
-function baseRandom(min, max) {
-  return min + floor(nativeRandom() * (max - min + 1));
-}
-
-module.exports = baseRandom;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/baseUniq.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/baseUniq.js
deleted file mode 100644
index 32353cc..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/baseUniq.js
+++ /dev/null
@@ -1,64 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseIndexOf = require('./baseIndexOf'),
-    cacheIndexOf = require('./cacheIndexOf'),
-    createCache = require('./createCache'),
-    getArray = require('./getArray'),
-    largeArraySize = require('./largeArraySize'),
-    releaseArray = require('./releaseArray'),
-    releaseObject = require('./releaseObject');
-
-/**
- * The base implementation of `_.uniq` without support for callback shorthands
- * or `thisArg` binding.
- *
- * @private
- * @param {Array} array The array to process.
- * @param {boolean} [isSorted=false] A flag to indicate that `array` is sorted.
- * @param {Function} [callback] The function called per iteration.
- * @returns {Array} Returns a duplicate-value-free array.
- */
-function baseUniq(array, isSorted, callback) {
-  var index = -1,
-      indexOf = baseIndexOf,
-      length = array ? array.length : 0,
-      result = [];
-
-  var isLarge = !isSorted && length >= largeArraySize,
-      seen = (callback || isLarge) ? getArray() : result;
-
-  if (isLarge) {
-    var cache = createCache(seen);
-    indexOf = cacheIndexOf;
-    seen = cache;
-  }
-  while (++index < length) {
-    var value = array[index],
-        computed = callback ? callback(value, index, array) : value;
-
-    if (isSorted
-          ? !index || seen[seen.length - 1] !== computed
-          : indexOf(seen, computed) < 0
-        ) {
-      if (callback || isLarge) {
-        seen.push(computed);
-      }
-      result.push(value);
-    }
-  }
-  if (isLarge) {
-    releaseArray(seen.array);
-    releaseObject(seen);
-  } else if (callback) {
-    releaseArray(seen);
-  }
-  return result;
-}
-
-module.exports = baseUniq;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/cacheIndexOf.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/cacheIndexOf.js
deleted file mode 100644
index 2d8849c..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/cacheIndexOf.js
+++ /dev/null
@@ -1,39 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseIndexOf = require('./baseIndexOf'),
-    keyPrefix = require('./keyPrefix');
-
-/**
- * An implementation of `_.contains` for cache objects that mimics the return
- * signature of `_.indexOf` by returning `0` if the value is found, else `-1`.
- *
- * @private
- * @param {Object} cache The cache object to inspect.
- * @param {*} value The value to search for.
- * @returns {number} Returns `0` if `value` is found, else `-1`.
- */
-function cacheIndexOf(cache, value) {
-  var type = typeof value;
-  cache = cache.cache;
-
-  if (type == 'boolean' || value == null) {
-    return cache[value] ? 0 : -1;
-  }
-  if (type != 'number' && type != 'string') {
-    type = 'object';
-  }
-  var key = type == 'number' ? value : keyPrefix + value;
-  cache = (cache = cache[type]) && cache[key];
-
-  return type == 'object'
-    ? (cache && baseIndexOf(cache, value) > -1 ? 0 : -1)
-    : (cache ? 0 : -1);
-}
-
-module.exports = cacheIndexOf;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/cachePush.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/cachePush.js
deleted file mode 100644
index 494ccb8..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/cachePush.js
+++ /dev/null
@@ -1,38 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var keyPrefix = require('./keyPrefix');
-
-/**
- * Adds a given value to the corresponding cache object.
- *
- * @private
- * @param {*} value The value to add to the cache.
- */
-function cachePush(value) {
-  var cache = this.cache,
-      type = typeof value;
-
-  if (type == 'boolean' || value == null) {
-    cache[value] = true;
-  } else {
-    if (type != 'number' && type != 'string') {
-      type = 'object';
-    }
-    var key = type == 'number' ? value : keyPrefix + value,
-        typeCache = cache[type] || (cache[type] = {});
-
-    if (type == 'object') {
-      (typeCache[key] || (typeCache[key] = [])).push(value);
-    } else {
-      typeCache[key] = true;
-    }
-  }
-}
-
-module.exports = cachePush;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/charAtCallback.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/charAtCallback.js
deleted file mode 100644
index b2ee65a..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/charAtCallback.js
+++ /dev/null
@@ -1,22 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * Used by `_.max` and `_.min` as the default callback when a given
- * collection is a string value.
- *
- * @private
- * @param {string} value The character to inspect.
- * @returns {number} Returns the code unit of given character.
- */
-function charAtCallback(value) {
-  return value.charCodeAt(0);
-}
-
-module.exports = charAtCallback;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/compareAscending.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/compareAscending.js
deleted file mode 100644
index 4dd1a8f..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/compareAscending.js
+++ /dev/null
@@ -1,47 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * Used by `sortBy` to compare transformed `collection` elements, stable sorting
- * them in ascending order.
- *
- * @private
- * @param {Object} a The object to compare to `b`.
- * @param {Object} b The object to compare to `a`.
- * @returns {number} Returns the sort order indicator of `1` or `-1`.
- */
-function compareAscending(a, b) {
-  var ac = a.criteria,
-      bc = b.criteria,
-      index = -1,
-      length = ac.length;
-
-  while (++index < length) {
-    var value = ac[index],
-        other = bc[index];
-
-    if (value !== other) {
-      if (value > other || typeof value == 'undefined') {
-        return 1;
-      }
-      if (value < other || typeof other == 'undefined') {
-        return -1;
-      }
-    }
-  }
-  // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications
-  // that causes it, under certain circumstances, to return the same value for
-  // `a` and `b`. See https://github.com/jashkenas/underscore/pull/1247
-  //
-  // This also ensures a stable sort in V8 and other engines.
-  // See http://code.google.com/p/v8/issues/detail?id=90
-  return a.index - b.index;
-}
-
-module.exports = compareAscending;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/createAggregator.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/createAggregator.js
deleted file mode 100644
index 3c99dba..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/createAggregator.js
+++ /dev/null
@@ -1,45 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback'),
-    forOwn = require('../objects/forOwn'),
-    isArray = require('../objects/isArray');
-
-/**
- * Creates a function that aggregates a collection, creating an object composed
- * of keys generated from the results of running each element of the collection
- * through a callback. The given `setter` function sets the keys and values
- * of the composed object.
- *
- * @private
- * @param {Function} setter The setter function.
- * @returns {Function} Returns the new aggregator function.
- */
-function createAggregator(setter) {
-  return function(collection, callback, thisArg) {
-    var result = {};
-    callback = createCallback(callback, thisArg, 3);
-
-    var index = -1,
-        length = collection ? collection.length : 0;
-
-    if (typeof length == 'number') {
-      while (++index < length) {
-        var value = collection[index];
-        setter(result, value, callback(value, index, collection), collection);
-      }
-    } else {
-      forOwn(collection, function(value, key, collection) {
-        setter(result, value, callback(value, key, collection), collection);
-      });
-    }
-    return result;
-  };
-}
-
-module.exports = createAggregator;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/createCache.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/createCache.js
deleted file mode 100644
index e210516..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/createCache.js
+++ /dev/null
@@ -1,45 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var cachePush = require('./cachePush'),
-    getObject = require('./getObject'),
-    releaseObject = require('./releaseObject');
-
-/**
- * Creates a cache object to optimize linear searches of large arrays.
- *
- * @private
- * @param {Array} [array=[]] The array to search.
- * @returns {null|Object} Returns the cache object or `null` if caching should not be used.
- */
-function createCache(array) {
-  var index = -1,
-      length = array.length,
-      first = array[0],
-      mid = array[(length / 2) | 0],
-      last = array[length - 1];
-
-  if (first && typeof first == 'object' &&
-      mid && typeof mid == 'object' && last && typeof last == 'object') {
-    return false;
-  }
-  var cache = getObject();
-  cache['false'] = cache['null'] = cache['true'] = cache['undefined'] = false;
-
-  var result = getObject();
-  result.array = array;
-  result.cache = cache;
-  result.push = cachePush;
-
-  while (++index < length) {
-    result.push(array[index]);
-  }
-  return result;
-}
-
-module.exports = createCache;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/createWrapper.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/createWrapper.js
deleted file mode 100644
index c39d340..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/createWrapper.js
+++ /dev/null
@@ -1,106 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseBind = require('./baseBind'),
-    baseCreateWrapper = require('./baseCreateWrapper'),
-    isFunction = require('../objects/isFunction'),
-    slice = require('./slice');
-
-/**
- * Used for `Array` method references.
- *
- * Normally `Array.prototype` would suffice, however, using an array literal
- * avoids issues in Narwhal.
- */
-var arrayRef = [];
-
-/** Native method shortcuts */
-var push = arrayRef.push,
-    unshift = arrayRef.unshift;
-
-/**
- * Creates a function that, when called, either curries or invokes `func`
- * with an optional `this` binding and partially applied arguments.
- *
- * @private
- * @param {Function|string} func The function or method name to reference.
- * @param {number} bitmask The bitmask of method flags to compose.
- *  The bitmask may be composed of the following flags:
- *  1 - `_.bind`
- *  2 - `_.bindKey`
- *  4 - `_.curry`
- *  8 - `_.curry` (bound)
- *  16 - `_.partial`
- *  32 - `_.partialRight`
- * @param {Array} [partialArgs] An array of arguments to prepend to those
- *  provided to the new function.
- * @param {Array} [partialRightArgs] An array of arguments to append to those
- *  provided to the new function.
- * @param {*} [thisArg] The `this` binding of `func`.
- * @param {number} [arity] The arity of `func`.
- * @returns {Function} Returns the new function.
- */
-function createWrapper(func, bitmask, partialArgs, partialRightArgs, thisArg, arity) {
-  var isBind = bitmask & 1,
-      isBindKey = bitmask & 2,
-      isCurry = bitmask & 4,
-      isCurryBound = bitmask & 8,
-      isPartial = bitmask & 16,
-      isPartialRight = bitmask & 32;
-
-  if (!isBindKey && !isFunction(func)) {
-    throw new TypeError;
-  }
-  if (isPartial && !partialArgs.length) {
-    bitmask &= ~16;
-    isPartial = partialArgs = false;
-  }
-  if (isPartialRight && !partialRightArgs.length) {
-    bitmask &= ~32;
-    isPartialRight = partialRightArgs = false;
-  }
-  var bindData = func && func.__bindData__;
-  if (bindData && bindData !== true) {
-    // clone `bindData`
-    bindData = slice(bindData);
-    if (bindData[2]) {
-      bindData[2] = slice(bindData[2]);
-    }
-    if (bindData[3]) {
-      bindData[3] = slice(bindData[3]);
-    }
-    // set `thisBinding` is not previously bound
-    if (isBind && !(bindData[1] & 1)) {
-      bindData[4] = thisArg;
-    }
-    // set if previously bound but not currently (subsequent curried functions)
-    if (!isBind && bindData[1] & 1) {
-      bitmask |= 8;
-    }
-    // set curried arity if not yet set
-    if (isCurry && !(bindData[1] & 4)) {
-      bindData[5] = arity;
-    }
-    // append partial left arguments
-    if (isPartial) {
-      push.apply(bindData[2] || (bindData[2] = []), partialArgs);
-    }
-    // append partial right arguments
-    if (isPartialRight) {
-      unshift.apply(bindData[3] || (bindData[3] = []), partialRightArgs);
-    }
-    // merge flags
-    bindData[1] |= bitmask;
-    return createWrapper.apply(null, bindData);
-  }
-  // fast path for `_.bind`
-  var creater = (bitmask == 1 || bitmask === 17) ? baseBind : baseCreateWrapper;
-  return creater([func, bitmask, partialArgs, partialRightArgs, thisArg, arity]);
-}
-
-module.exports = createWrapper;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/escapeHtmlChar.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/escapeHtmlChar.js
deleted file mode 100644
index 1d7b6f1..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/escapeHtmlChar.js
+++ /dev/null
@@ -1,22 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var htmlEscapes = require('./htmlEscapes');
-
-/**
- * Used by `escape` to convert characters to HTML entities.
- *
- * @private
- * @param {string} match The matched character to escape.
- * @returns {string} Returns the escaped character.
- */
-function escapeHtmlChar(match) {
-  return htmlEscapes[match];
-}
-
-module.exports = escapeHtmlChar;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/escapeStringChar.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/escapeStringChar.js
deleted file mode 100644
index 9cf267f..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/escapeStringChar.js
+++ /dev/null
@@ -1,33 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** Used to escape characters for inclusion in compiled string literals */
-var stringEscapes = {
-  '\\': '\\',
-  "'": "'",
-  '\n': 'n',
-  '\r': 'r',
-  '\t': 't',
-  '\u2028': 'u2028',
-  '\u2029': 'u2029'
-};
-
-/**
- * Used by `template` to escape characters for inclusion in compiled
- * string literals.
- *
- * @private
- * @param {string} match The matched character to escape.
- * @returns {string} Returns the escaped character.
- */
-function escapeStringChar(match) {
-  return '\\' + stringEscapes[match];
-}
-
-module.exports = escapeStringChar;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/getArray.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/getArray.js
deleted file mode 100644
index 50fbc2f..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/getArray.js
+++ /dev/null
@@ -1,21 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var arrayPool = require('./arrayPool');
-
-/**
- * Gets an array from the array pool or creates a new one if the pool is empty.
- *
- * @private
- * @returns {Array} The array from the pool.
- */
-function getArray() {
-  return arrayPool.pop() || [];
-}
-
-module.exports = getArray;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/getObject.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/getObject.js
deleted file mode 100644
index ce1ee73..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/getObject.js
+++ /dev/null
@@ -1,35 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var objectPool = require('./objectPool');
-
-/**
- * Gets an object from the object pool or creates a new one if the pool is empty.
- *
- * @private
- * @returns {Object} The object from the pool.
- */
-function getObject() {
-  return objectPool.pop() || {
-    'array': null,
-    'cache': null,
-    'criteria': null,
-    'false': false,
-    'index': 0,
-    'null': false,
-    'number': null,
-    'object': null,
-    'push': null,
-    'string': null,
-    'true': false,
-    'undefined': false,
-    'value': null
-  };
-}
-
-module.exports = getObject;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/htmlEscapes.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/htmlEscapes.js
deleted file mode 100644
index 9933d60..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/htmlEscapes.js
+++ /dev/null
@@ -1,26 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * Used to convert characters to HTML entities:
- *
- * Though the `>` character is escaped for symmetry, characters like `>` and `/`
- * don't require escaping in HTML and have no special meaning unless they're part
- * of a tag or an unquoted attribute value.
- * http://mathiasbynens.be/notes/ambiguous-ampersands (under "semi-related fun fact")
- */
-var htmlEscapes = {
-  '&': '&amp;',
-  '<': '&lt;',
-  '>': '&gt;',
-  '"': '&quot;',
-  "'": '&#39;'
-};
-
-module.exports = htmlEscapes;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/htmlUnescapes.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/htmlUnescapes.js
deleted file mode 100644
index eeaaa1f..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/htmlUnescapes.js
+++ /dev/null
@@ -1,15 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var htmlEscapes = require('./htmlEscapes'),
-    invert = require('../objects/invert');
-
-/** Used to convert HTML entities to characters */
-var htmlUnescapes = invert(htmlEscapes);
-
-module.exports = htmlUnescapes;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/isNative.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/isNative.js
deleted file mode 100644
index 4053eed..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/isNative.js
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Used to resolve the internal [[Class]] of values */
-var toString = objectProto.toString;
-
-/** Used to detect if a method is native */
-var reNative = RegExp('^' +
-  String(toString)
-    .replace(/[.*+?^${}()|[\]\\]/g, '\\$&')
-    .replace(/toString| for [^\]]+/g, '.*?') + '$'
-);
-
-/**
- * Checks if `value` is a native function.
- *
- * @private
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if the `value` is a native function, else `false`.
- */
-function isNative(value) {
-  return typeof value == 'function' && reNative.test(value);
-}
-
-module.exports = isNative;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/keyPrefix.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/keyPrefix.js
deleted file mode 100644
index a23cf32..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/keyPrefix.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** Used to prefix keys to avoid issues with `__proto__` and properties on `Object.prototype` */
-var keyPrefix = +new Date + '';
-
-module.exports = keyPrefix;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/largeArraySize.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/largeArraySize.js
deleted file mode 100644
index c876188..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/largeArraySize.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** Used as the size when optimizations are enabled for large arrays */
-var largeArraySize = 75;
-
-module.exports = largeArraySize;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/lodashWrapper.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/lodashWrapper.js
deleted file mode 100644
index a820145..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/lodashWrapper.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * A fast path for creating `lodash` wrapper objects.
- *
- * @private
- * @param {*} value The value to wrap in a `lodash` instance.
- * @param {boolean} chainAll A flag to enable chaining for all methods
- * @returns {Object} Returns a `lodash` instance.
- */
-function lodashWrapper(value, chainAll) {
-  this.__chain__ = !!chainAll;
-  this.__wrapped__ = value;
-}
-
-module.exports = lodashWrapper;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/maxPoolSize.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/maxPoolSize.js
deleted file mode 100644
index 86dafab..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/maxPoolSize.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** Used as the max size of the `arrayPool` and `objectPool` */
-var maxPoolSize = 40;
-
-module.exports = maxPoolSize;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/objectPool.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/objectPool.js
deleted file mode 100644
index fea0bf0..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/objectPool.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** Used to pool arrays and objects used internally */
-var objectPool = [];
-
-module.exports = objectPool;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/objectTypes.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/objectTypes.js
deleted file mode 100644
index a100109..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/objectTypes.js
+++ /dev/null
@@ -1,20 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** Used to determine if values are of the language type Object */
-var objectTypes = {
-  'boolean': false,
-  'function': true,
-  'object': true,
-  'number': false,
-  'string': false,
-  'undefined': false
-};
-
-module.exports = objectTypes;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/reEscapedHtml.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/reEscapedHtml.js
deleted file mode 100644
index a52d67d..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/reEscapedHtml.js
+++ /dev/null
@@ -1,15 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var htmlUnescapes = require('./htmlUnescapes'),
-    keys = require('../objects/keys');
-
-/** Used to match HTML entities and HTML characters */
-var reEscapedHtml = RegExp('(' + keys(htmlUnescapes).join('|') + ')', 'g');
-
-module.exports = reEscapedHtml;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/reInterpolate.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/reInterpolate.js
deleted file mode 100644
index bb4b865..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/reInterpolate.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** Used to match "interpolate" template delimiters */
-var reInterpolate = /<%=([\s\S]+?)%>/g;
-
-module.exports = reInterpolate;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/reUnescapedHtml.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/reUnescapedHtml.js
deleted file mode 100644
index 75f6895..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/reUnescapedHtml.js
+++ /dev/null
@@ -1,15 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var htmlEscapes = require('./htmlEscapes'),
-    keys = require('../objects/keys');
-
-/** Used to match HTML entities and HTML characters */
-var reUnescapedHtml = RegExp('[' + keys(htmlEscapes).join('') + ']', 'g');
-
-module.exports = reUnescapedHtml;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/releaseArray.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/releaseArray.js
deleted file mode 100644
index 5a75e51..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/releaseArray.js
+++ /dev/null
@@ -1,25 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var arrayPool = require('./arrayPool'),
-    maxPoolSize = require('./maxPoolSize');
-
-/**
- * Releases the given array back to the array pool.
- *
- * @private
- * @param {Array} [array] The array to release.
- */
-function releaseArray(array) {
-  array.length = 0;
-  if (arrayPool.length < maxPoolSize) {
-    arrayPool.push(array);
-  }
-}
-
-module.exports = releaseArray;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/releaseObject.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/releaseObject.js
deleted file mode 100644
index d2b9594..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/releaseObject.js
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var maxPoolSize = require('./maxPoolSize'),
-    objectPool = require('./objectPool');
-
-/**
- * Releases the given object back to the object pool.
- *
- * @private
- * @param {Object} [object] The object to release.
- */
-function releaseObject(object) {
-  var cache = object.cache;
-  if (cache) {
-    releaseObject(cache);
-  }
-  object.array = object.cache = object.criteria = object.object = object.number = object.string = object.value = null;
-  if (objectPool.length < maxPoolSize) {
-    objectPool.push(object);
-  }
-}
-
-module.exports = releaseObject;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/setBindData.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/setBindData.js
deleted file mode 100644
index 0f800ee..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/setBindData.js
+++ /dev/null
@@ -1,43 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isNative = require('./isNative'),
-    noop = require('../utilities/noop');
-
-/** Used as the property descriptor for `__bindData__` */
-var descriptor = {
-  'configurable': false,
-  'enumerable': false,
-  'value': null,
-  'writable': false
-};
-
-/** Used to set meta data on functions */
-var defineProperty = (function() {
-  // IE 8 only accepts DOM elements
-  try {
-    var o = {},
-        func = isNative(func = Object.defineProperty) && func,
-        result = func(o, o, o) && func;
-  } catch(e) { }
-  return result;
-}());
-
-/**
- * Sets `this` binding data on a given function.
- *
- * @private
- * @param {Function} func The function to set data on.
- * @param {Array} value The data array to set.
- */
-var setBindData = !defineProperty ? noop : function(func, value) {
-  descriptor.value = value;
-  defineProperty(func, '__bindData__', descriptor);
-};
-
-module.exports = setBindData;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/shimIsPlainObject.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/shimIsPlainObject.js
deleted file mode 100644
index 55c9875..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/shimIsPlainObject.js
+++ /dev/null
@@ -1,52 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var forIn = require('../objects/forIn'),
-    isFunction = require('../objects/isFunction');
-
-/** `Object#toString` result shortcuts */
-var objectClass = '[object Object]';
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Used to resolve the internal [[Class]] of values */
-var toString = objectProto.toString;
-
-/** Native method shortcuts */
-var hasOwnProperty = objectProto.hasOwnProperty;
-
-/**
- * A fallback implementation of `isPlainObject` which checks if a given value
- * is an object created by the `Object` constructor, assuming objects created
- * by the `Object` constructor have no inherited enumerable properties and that
- * there are no `Object.prototype` extensions.
- *
- * @private
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.
- */
-function shimIsPlainObject(value) {
-  var ctor,
-      result;
-
-  // avoid non Object objects, `arguments` objects, and DOM elements
-  if (!(value && toString.call(value) == objectClass) ||
-      (ctor = value.constructor, isFunction(ctor) && !(ctor instanceof ctor))) {
-    return false;
-  }
-  // In most environments an object's own properties are iterated before
-  // its inherited properties. If the last iterated property is an object's
-  // own property then there are no inherited enumerable properties.
-  forIn(value, function(value, key) {
-    result = key;
-  });
-  return typeof result == 'undefined' || hasOwnProperty.call(value, result);
-}
-
-module.exports = shimIsPlainObject;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/shimKeys.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/shimKeys.js
deleted file mode 100644
index 31adba1..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/shimKeys.js
+++ /dev/null
@@ -1,38 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var objectTypes = require('./objectTypes');
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Native method shortcuts */
-var hasOwnProperty = objectProto.hasOwnProperty;
-
-/**
- * A fallback implementation of `Object.keys` which produces an array of the
- * given object's own enumerable property names.
- *
- * @private
- * @type Function
- * @param {Object} object The object to inspect.
- * @returns {Array} Returns an array of property names.
- */
-var shimKeys = function(object) {
-  var index, iterable = object, result = [];
-  if (!iterable) return result;
-  if (!(objectTypes[typeof object])) return result;
-    for (index in iterable) {
-      if (hasOwnProperty.call(iterable, index)) {
-        result.push(index);
-      }
-    }
-  return result
-};
-
-module.exports = shimKeys;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/slice.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/slice.js
deleted file mode 100644
index ae00390..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/slice.js
+++ /dev/null
@@ -1,38 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * Slices the `collection` from the `start` index up to, but not including,
- * the `end` index.
- *
- * Note: This function is used instead of `Array#slice` to support node lists
- * in IE < 9 and to ensure dense arrays are returned.
- *
- * @private
- * @param {Array|Object|string} collection The collection to slice.
- * @param {number} start The start index.
- * @param {number} end The end index.
- * @returns {Array} Returns the new array.
- */
-function slice(array, start, end) {
-  start || (start = 0);
-  if (typeof end == 'undefined') {
-    end = array ? array.length : 0;
-  }
-  var index = -1,
-      length = end - start || 0,
-      result = Array(length < 0 ? 0 : length);
-
-  while (++index < length) {
-    result[index] = array[start + index];
-  }
-  return result;
-}
-
-module.exports = slice;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/unescapeHtmlChar.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/unescapeHtmlChar.js
deleted file mode 100644
index b209f7a..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/internals/unescapeHtmlChar.js
+++ /dev/null
@@ -1,22 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var htmlUnescapes = require('./htmlUnescapes');
-
-/**
- * Used by `unescape` to convert HTML entities to characters.
- *
- * @private
- * @param {string} match The matched character to unescape.
- * @returns {string} Returns the unescaped character.
- */
-function unescapeHtmlChar(match) {
-  return htmlUnescapes[match];
-}
-
-module.exports = unescapeHtmlChar;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects.js
deleted file mode 100644
index d600832..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects.js
+++ /dev/null
@@ -1,52 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-module.exports = {
-  'assign': require('./objects/assign'),
-  'clone': require('./objects/clone'),
-  'cloneDeep': require('./objects/cloneDeep'),
-  'create': require('./objects/create'),
-  'defaults': require('./objects/defaults'),
-  'extend': require('./objects/assign'),
-  'findKey': require('./objects/findKey'),
-  'findLastKey': require('./objects/findLastKey'),
-  'forIn': require('./objects/forIn'),
-  'forInRight': require('./objects/forInRight'),
-  'forOwn': require('./objects/forOwn'),
-  'forOwnRight': require('./objects/forOwnRight'),
-  'functions': require('./objects/functions'),
-  'has': require('./objects/has'),
-  'invert': require('./objects/invert'),
-  'isArguments': require('./objects/isArguments'),
-  'isArray': require('./objects/isArray'),
-  'isBoolean': require('./objects/isBoolean'),
-  'isDate': require('./objects/isDate'),
-  'isElement': require('./objects/isElement'),
-  'isEmpty': require('./objects/isEmpty'),
-  'isEqual': require('./objects/isEqual'),
-  'isFinite': require('./objects/isFinite'),
-  'isFunction': require('./objects/isFunction'),
-  'isNaN': require('./objects/isNaN'),
-  'isNull': require('./objects/isNull'),
-  'isNumber': require('./objects/isNumber'),
-  'isObject': require('./objects/isObject'),
-  'isPlainObject': require('./objects/isPlainObject'),
-  'isRegExp': require('./objects/isRegExp'),
-  'isString': require('./objects/isString'),
-  'isUndefined': require('./objects/isUndefined'),
-  'keys': require('./objects/keys'),
-  'mapValues': require('./objects/mapValues'),
-  'merge': require('./objects/merge'),
-  'methods': require('./objects/functions'),
-  'omit': require('./objects/omit'),
-  'pairs': require('./objects/pairs'),
-  'pick': require('./objects/pick'),
-  'transform': require('./objects/transform'),
-  'values': require('./objects/values')
-};
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/assign.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/assign.js
deleted file mode 100644
index 36e0690..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/assign.js
+++ /dev/null
@@ -1,70 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseCreateCallback = require('../internals/baseCreateCallback'),
-    keys = require('./keys'),
-    objectTypes = require('../internals/objectTypes');
-
-/**
- * Assigns own enumerable properties of source object(s) to the destination
- * object. Subsequent sources will overwrite property assignments of previous
- * sources. If a callback is provided it will be executed to produce the
- * assigned values. The callback is bound to `thisArg` and invoked with two
- * arguments; (objectValue, sourceValue).
- *
- * @static
- * @memberOf _
- * @type Function
- * @alias extend
- * @category Objects
- * @param {Object} object The destination object.
- * @param {...Object} [source] The source objects.
- * @param {Function} [callback] The function to customize assigning values.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Object} Returns the destination object.
- * @example
- *
- * _.assign({ 'name': 'fred' }, { 'employer': 'slate' });
- * // => { 'name': 'fred', 'employer': 'slate' }
- *
- * var defaults = _.partialRight(_.assign, function(a, b) {
- *   return typeof a == 'undefined' ? b : a;
- * });
- *
- * var object = { 'name': 'barney' };
- * defaults(object, { 'name': 'fred', 'employer': 'slate' });
- * // => { 'name': 'barney', 'employer': 'slate' }
- */
-var assign = function(object, source, guard) {
-  var index, iterable = object, result = iterable;
-  if (!iterable) return result;
-  var args = arguments,
-      argsIndex = 0,
-      argsLength = typeof guard == 'number' ? 2 : args.length;
-  if (argsLength > 3 && typeof args[argsLength - 2] == 'function') {
-    var callback = baseCreateCallback(args[--argsLength - 1], args[argsLength--], 2);
-  } else if (argsLength > 2 && typeof args[argsLength - 1] == 'function') {
-    callback = args[--argsLength];
-  }
-  while (++argsIndex < argsLength) {
-    iterable = args[argsIndex];
-    if (iterable && objectTypes[typeof iterable]) {
-    var ownIndex = -1,
-        ownProps = objectTypes[typeof iterable] && keys(iterable),
-        length = ownProps ? ownProps.length : 0;
-
-    while (++ownIndex < length) {
-      index = ownProps[ownIndex];
-      result[index] = callback ? callback(result[index], iterable[index]) : iterable[index];
-    }
-    }
-  }
-  return result
-};
-
-module.exports = assign;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/clone.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/clone.js
deleted file mode 100644
index 6932a81..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/clone.js
+++ /dev/null
@@ -1,63 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseClone = require('../internals/baseClone'),
-    baseCreateCallback = require('../internals/baseCreateCallback');
-
-/**
- * Creates a clone of `value`. If `isDeep` is `true` nested objects will also
- * be cloned, otherwise they will be assigned by reference. If a callback
- * is provided it will be executed to produce the cloned values. If the
- * callback returns `undefined` cloning will be handled by the method instead.
- * The callback is bound to `thisArg` and invoked with one argument; (value).
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {*} value The value to clone.
- * @param {boolean} [isDeep=false] Specify a deep clone.
- * @param {Function} [callback] The function to customize cloning values.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {*} Returns the cloned value.
- * @example
- *
- * var characters = [
- *   { 'name': 'barney', 'age': 36 },
- *   { 'name': 'fred',   'age': 40 }
- * ];
- *
- * var shallow = _.clone(characters);
- * shallow[0] === characters[0];
- * // => true
- *
- * var deep = _.clone(characters, true);
- * deep[0] === characters[0];
- * // => false
- *
- * _.mixin({
- *   'clone': _.partialRight(_.clone, function(value) {
- *     return _.isElement(value) ? value.cloneNode(false) : undefined;
- *   })
- * });
- *
- * var clone = _.clone(document.body);
- * clone.childNodes.length;
- * // => 0
- */
-function clone(value, isDeep, callback, thisArg) {
-  // allows working with "Collections" methods without using their `index`
-  // and `collection` arguments for `isDeep` and `callback`
-  if (typeof isDeep != 'boolean' && isDeep != null) {
-    thisArg = callback;
-    callback = isDeep;
-    isDeep = false;
-  }
-  return baseClone(value, isDeep, typeof callback == 'function' && baseCreateCallback(callback, thisArg, 1));
-}
-
-module.exports = clone;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/cloneDeep.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/cloneDeep.js
deleted file mode 100644
index 7bd6866..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/cloneDeep.js
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseClone = require('../internals/baseClone'),
-    baseCreateCallback = require('../internals/baseCreateCallback');
-
-/**
- * Creates a deep clone of `value`. If a callback is provided it will be
- * executed to produce the cloned values. If the callback returns `undefined`
- * cloning will be handled by the method instead. The callback is bound to
- * `thisArg` and invoked with one argument; (value).
- *
- * Note: This method is loosely based on the structured clone algorithm. Functions
- * and DOM nodes are **not** cloned. The enumerable properties of `arguments` objects and
- * objects created by constructors other than `Object` are cloned to plain `Object` objects.
- * See http://www.w3.org/TR/html5/infrastructure.html#internal-structured-cloning-algorithm.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {*} value The value to deep clone.
- * @param {Function} [callback] The function to customize cloning values.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {*} Returns the deep cloned value.
- * @example
- *
- * var characters = [
- *   { 'name': 'barney', 'age': 36 },
- *   { 'name': 'fred',   'age': 40 }
- * ];
- *
- * var deep = _.cloneDeep(characters);
- * deep[0] === characters[0];
- * // => false
- *
- * var view = {
- *   'label': 'docs',
- *   'node': element
- * };
- *
- * var clone = _.cloneDeep(view, function(value) {
- *   return _.isElement(value) ? value.cloneNode(true) : undefined;
- * });
- *
- * clone.node == view.node;
- * // => false
- */
-function cloneDeep(value, callback, thisArg) {
-  return baseClone(value, true, typeof callback == 'function' && baseCreateCallback(callback, thisArg, 1));
-}
-
-module.exports = cloneDeep;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/create.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/create.js
deleted file mode 100644
index fda6a94..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/create.js
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var assign = require('./assign'),
-    baseCreate = require('../internals/baseCreate');
-
-/**
- * Creates an object that inherits from the given `prototype` object. If a
- * `properties` object is provided its own enumerable properties are assigned
- * to the created object.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {Object} prototype The object to inherit from.
- * @param {Object} [properties] The properties to assign to the object.
- * @returns {Object} Returns the new object.
- * @example
- *
- * function Shape() {
- *   this.x = 0;
- *   this.y = 0;
- * }
- *
- * function Circle() {
- *   Shape.call(this);
- * }
- *
- * Circle.prototype = _.create(Shape.prototype, { 'constructor': Circle });
- *
- * var circle = new Circle;
- * circle instanceof Circle;
- * // => true
- *
- * circle instanceof Shape;
- * // => true
- */
-function create(prototype, properties) {
-  var result = baseCreate(prototype);
-  return properties ? assign(result, properties) : result;
-}
-
-module.exports = create;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/defaults.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/defaults.js
deleted file mode 100644
index 6427fdc..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/defaults.js
+++ /dev/null
@@ -1,54 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var keys = require('./keys'),
-    objectTypes = require('../internals/objectTypes');
-
-/**
- * Assigns own enumerable properties of source object(s) to the destination
- * object for all destination properties that resolve to `undefined`. Once a
- * property is set, additional defaults of the same property will be ignored.
- *
- * @static
- * @memberOf _
- * @type Function
- * @category Objects
- * @param {Object} object The destination object.
- * @param {...Object} [source] The source objects.
- * @param- {Object} [guard] Allows working with `_.reduce` without using its
- *  `key` and `object` arguments as sources.
- * @returns {Object} Returns the destination object.
- * @example
- *
- * var object = { 'name': 'barney' };
- * _.defaults(object, { 'name': 'fred', 'employer': 'slate' });
- * // => { 'name': 'barney', 'employer': 'slate' }
- */
-var defaults = function(object, source, guard) {
-  var index, iterable = object, result = iterable;
-  if (!iterable) return result;
-  var args = arguments,
-      argsIndex = 0,
-      argsLength = typeof guard == 'number' ? 2 : args.length;
-  while (++argsIndex < argsLength) {
-    iterable = args[argsIndex];
-    if (iterable && objectTypes[typeof iterable]) {
-    var ownIndex = -1,
-        ownProps = objectTypes[typeof iterable] && keys(iterable),
-        length = ownProps ? ownProps.length : 0;
-
-    while (++ownIndex < length) {
-      index = ownProps[ownIndex];
-      if (typeof result[index] == 'undefined') result[index] = iterable[index];
-    }
-    }
-  }
-  return result
-};
-
-module.exports = defaults;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/findKey.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/findKey.js
deleted file mode 100644
index 6713253..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/findKey.js
+++ /dev/null
@@ -1,65 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback'),
-    forOwn = require('./forOwn');
-
-/**
- * This method is like `_.findIndex` except that it returns the key of the
- * first element that passes the callback check, instead of the element itself.
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {Object} object The object to search.
- * @param {Function|Object|string} [callback=identity] The function called per
- *  iteration. If a property name or object is provided it will be used to
- *  create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {string|undefined} Returns the key of the found element, else `undefined`.
- * @example
- *
- * var characters = {
- *   'barney': {  'age': 36, 'blocked': false },
- *   'fred': {    'age': 40, 'blocked': true },
- *   'pebbles': { 'age': 1,  'blocked': false }
- * };
- *
- * _.findKey(characters, function(chr) {
- *   return chr.age < 40;
- * });
- * // => 'barney' (property order is not guaranteed across environments)
- *
- * // using "_.where" callback shorthand
- * _.findKey(characters, { 'age': 1 });
- * // => 'pebbles'
- *
- * // using "_.pluck" callback shorthand
- * _.findKey(characters, 'blocked');
- * // => 'fred'
- */
-function findKey(object, callback, thisArg) {
-  var result;
-  callback = createCallback(callback, thisArg, 3);
-  forOwn(object, function(value, key, object) {
-    if (callback(value, key, object)) {
-      result = key;
-      return false;
-    }
-  });
-  return result;
-}
-
-module.exports = findKey;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/findLastKey.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/findLastKey.js
deleted file mode 100644
index 236c726..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/findLastKey.js
+++ /dev/null
@@ -1,65 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback'),
-    forOwnRight = require('./forOwnRight');
-
-/**
- * This method is like `_.findKey` except that it iterates over elements
- * of a `collection` in the opposite order.
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {Object} object The object to search.
- * @param {Function|Object|string} [callback=identity] The function called per
- *  iteration. If a property name or object is provided it will be used to
- *  create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {string|undefined} Returns the key of the found element, else `undefined`.
- * @example
- *
- * var characters = {
- *   'barney': {  'age': 36, 'blocked': true },
- *   'fred': {    'age': 40, 'blocked': false },
- *   'pebbles': { 'age': 1,  'blocked': true }
- * };
- *
- * _.findLastKey(characters, function(chr) {
- *   return chr.age < 40;
- * });
- * // => returns `pebbles`, assuming `_.findKey` returns `barney`
- *
- * // using "_.where" callback shorthand
- * _.findLastKey(characters, { 'age': 40 });
- * // => 'fred'
- *
- * // using "_.pluck" callback shorthand
- * _.findLastKey(characters, 'blocked');
- * // => 'pebbles'
- */
-function findLastKey(object, callback, thisArg) {
-  var result;
-  callback = createCallback(callback, thisArg, 3);
-  forOwnRight(object, function(value, key, object) {
-    if (callback(value, key, object)) {
-      result = key;
-      return false;
-    }
-  });
-  return result;
-}
-
-module.exports = findLastKey;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/forIn.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/forIn.js
deleted file mode 100644
index 2d827c3..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/forIn.js
+++ /dev/null
@@ -1,54 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseCreateCallback = require('../internals/baseCreateCallback'),
-    objectTypes = require('../internals/objectTypes');
-
-/**
- * Iterates over own and inherited enumerable properties of an object,
- * executing the callback for each property. The callback is bound to `thisArg`
- * and invoked with three arguments; (value, key, object). Callbacks may exit
- * iteration early by explicitly returning `false`.
- *
- * @static
- * @memberOf _
- * @type Function
- * @category Objects
- * @param {Object} object The object to iterate over.
- * @param {Function} [callback=identity] The function called per iteration.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Object} Returns `object`.
- * @example
- *
- * function Shape() {
- *   this.x = 0;
- *   this.y = 0;
- * }
- *
- * Shape.prototype.move = function(x, y) {
- *   this.x += x;
- *   this.y += y;
- * };
- *
- * _.forIn(new Shape, function(value, key) {
- *   console.log(key);
- * });
- * // => logs 'x', 'y', and 'move' (property order is not guaranteed across environments)
- */
-var forIn = function(collection, callback, thisArg) {
-  var index, iterable = collection, result = iterable;
-  if (!iterable) return result;
-  if (!objectTypes[typeof iterable]) return result;
-  callback = callback && typeof thisArg == 'undefined' ? callback : baseCreateCallback(callback, thisArg, 3);
-    for (index in iterable) {
-      if (callback(iterable[index], index, collection) === false) return result;
-    }
-  return result
-};
-
-module.exports = forIn;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/forInRight.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/forInRight.js
deleted file mode 100644
index e9f077a..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/forInRight.js
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseCreateCallback = require('../internals/baseCreateCallback'),
-    forIn = require('./forIn');
-
-/**
- * This method is like `_.forIn` except that it iterates over elements
- * of a `collection` in the opposite order.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {Object} object The object to iterate over.
- * @param {Function} [callback=identity] The function called per iteration.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Object} Returns `object`.
- * @example
- *
- * function Shape() {
- *   this.x = 0;
- *   this.y = 0;
- * }
- *
- * Shape.prototype.move = function(x, y) {
- *   this.x += x;
- *   this.y += y;
- * };
- *
- * _.forInRight(new Shape, function(value, key) {
- *   console.log(key);
- * });
- * // => logs 'move', 'y', and 'x' assuming `_.forIn ` logs 'x', 'y', and 'move'
- */
-function forInRight(object, callback, thisArg) {
-  var pairs = [];
-
-  forIn(object, function(value, key) {
-    pairs.push(key, value);
-  });
-
-  var length = pairs.length;
-  callback = baseCreateCallback(callback, thisArg, 3);
-  while (length--) {
-    if (callback(pairs[length--], pairs[length], object) === false) {
-      break;
-    }
-  }
-  return object;
-}
-
-module.exports = forInRight;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/forOwn.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/forOwn.js
deleted file mode 100644
index 33d2297..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/forOwn.js
+++ /dev/null
@@ -1,50 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseCreateCallback = require('../internals/baseCreateCallback'),
-    keys = require('./keys'),
-    objectTypes = require('../internals/objectTypes');
-
-/**
- * Iterates over own enumerable properties of an object, executing the callback
- * for each property. The callback is bound to `thisArg` and invoked with three
- * arguments; (value, key, object). Callbacks may exit iteration early by
- * explicitly returning `false`.
- *
- * @static
- * @memberOf _
- * @type Function
- * @category Objects
- * @param {Object} object The object to iterate over.
- * @param {Function} [callback=identity] The function called per iteration.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Object} Returns `object`.
- * @example
- *
- * _.forOwn({ '0': 'zero', '1': 'one', 'length': 2 }, function(num, key) {
- *   console.log(key);
- * });
- * // => logs '0', '1', and 'length' (property order is not guaranteed across environments)
- */
-var forOwn = function(collection, callback, thisArg) {
-  var index, iterable = collection, result = iterable;
-  if (!iterable) return result;
-  if (!objectTypes[typeof iterable]) return result;
-  callback = callback && typeof thisArg == 'undefined' ? callback : baseCreateCallback(callback, thisArg, 3);
-    var ownIndex = -1,
-        ownProps = objectTypes[typeof iterable] && keys(iterable),
-        length = ownProps ? ownProps.length : 0;
-
-    while (++ownIndex < length) {
-      index = ownProps[ownIndex];
-      if (callback(iterable[index], index, collection) === false) return result;
-    }
-  return result
-};
-
-module.exports = forOwn;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/forOwnRight.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/forOwnRight.js
deleted file mode 100644
index 86e53e8..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/forOwnRight.js
+++ /dev/null
@@ -1,44 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseCreateCallback = require('../internals/baseCreateCallback'),
-    keys = require('./keys');
-
-/**
- * This method is like `_.forOwn` except that it iterates over elements
- * of a `collection` in the opposite order.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {Object} object The object to iterate over.
- * @param {Function} [callback=identity] The function called per iteration.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Object} Returns `object`.
- * @example
- *
- * _.forOwnRight({ '0': 'zero', '1': 'one', 'length': 2 }, function(num, key) {
- *   console.log(key);
- * });
- * // => logs 'length', '1', and '0' assuming `_.forOwn` logs '0', '1', and 'length'
- */
-function forOwnRight(object, callback, thisArg) {
-  var props = keys(object),
-      length = props.length;
-
-  callback = baseCreateCallback(callback, thisArg, 3);
-  while (length--) {
-    var key = props[length];
-    if (callback(object[key], key, object) === false) {
-      break;
-    }
-  }
-  return object;
-}
-
-module.exports = forOwnRight;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/functions.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/functions.js
deleted file mode 100644
index 4cfd478..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/functions.js
+++ /dev/null
@@ -1,37 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var forIn = require('./forIn'),
-    isFunction = require('./isFunction');
-
-/**
- * Creates a sorted array of property names of all enumerable properties,
- * own and inherited, of `object` that have function values.
- *
- * @static
- * @memberOf _
- * @alias methods
- * @category Objects
- * @param {Object} object The object to inspect.
- * @returns {Array} Returns an array of property names that have function values.
- * @example
- *
- * _.functions(_);
- * // => ['all', 'any', 'bind', 'bindAll', 'clone', 'compact', 'compose', ...]
- */
-function functions(object) {
-  var result = [];
-  forIn(object, function(value, key) {
-    if (isFunction(value)) {
-      result.push(key);
-    }
-  });
-  return result.sort();
-}
-
-module.exports = functions;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/has.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/has.js
deleted file mode 100644
index e7f610c..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/has.js
+++ /dev/null
@@ -1,35 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Native method shortcuts */
-var hasOwnProperty = objectProto.hasOwnProperty;
-
-/**
- * Checks if the specified property name exists as a direct property of `object`,
- * instead of an inherited property.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {Object} object The object to inspect.
- * @param {string} key The name of the property to check.
- * @returns {boolean} Returns `true` if key is a direct property, else `false`.
- * @example
- *
- * _.has({ 'a': 1, 'b': 2, 'c': 3 }, 'b');
- * // => true
- */
-function has(object, key) {
-  return object ? hasOwnProperty.call(object, key) : false;
-}
-
-module.exports = has;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/invert.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/invert.js
deleted file mode 100644
index 66d5949..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/invert.js
+++ /dev/null
@@ -1,37 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var keys = require('./keys');
-
-/**
- * Creates an object composed of the inverted keys and values of the given object.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {Object} object The object to invert.
- * @returns {Object} Returns the created inverted object.
- * @example
- *
- * _.invert({ 'first': 'fred', 'second': 'barney' });
- * // => { 'fred': 'first', 'barney': 'second' }
- */
-function invert(object) {
-  var index = -1,
-      props = keys(object),
-      length = props.length,
-      result = {};
-
-  while (++index < length) {
-    var key = props[index];
-    result[object[key]] = key;
-  }
-  return result;
-}
-
-module.exports = invert;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/isArguments.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/isArguments.js
deleted file mode 100644
index eb87b80..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/isArguments.js
+++ /dev/null
@@ -1,40 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** `Object#toString` result shortcuts */
-var argsClass = '[object Arguments]';
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Used to resolve the internal [[Class]] of values */
-var toString = objectProto.toString;
-
-/**
- * Checks if `value` is an `arguments` object.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if the `value` is an `arguments` object, else `false`.
- * @example
- *
- * (function() { return _.isArguments(arguments); })(1, 2, 3);
- * // => true
- *
- * _.isArguments([1, 2, 3]);
- * // => false
- */
-function isArguments(value) {
-  return value && typeof value == 'object' && typeof value.length == 'number' &&
-    toString.call(value) == argsClass || false;
-}
-
-module.exports = isArguments;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/isArray.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/isArray.js
deleted file mode 100644
index c50e72c..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/isArray.js
+++ /dev/null
@@ -1,45 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isNative = require('../internals/isNative');
-
-/** `Object#toString` result shortcuts */
-var arrayClass = '[object Array]';
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Used to resolve the internal [[Class]] of values */
-var toString = objectProto.toString;
-
-/* Native method shortcuts for methods with the same name as other `lodash` methods */
-var nativeIsArray = isNative(nativeIsArray = Array.isArray) && nativeIsArray;
-
-/**
- * Checks if `value` is an array.
- *
- * @static
- * @memberOf _
- * @type Function
- * @category Objects
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if the `value` is an array, else `false`.
- * @example
- *
- * (function() { return _.isArray(arguments); })();
- * // => false
- *
- * _.isArray([1, 2, 3]);
- * // => true
- */
-var isArray = nativeIsArray || function(value) {
-  return value && typeof value == 'object' && typeof value.length == 'number' &&
-    toString.call(value) == arrayClass || false;
-};
-
-module.exports = isArray;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/isBoolean.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/isBoolean.js
deleted file mode 100644
index 614b298..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/isBoolean.js
+++ /dev/null
@@ -1,37 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** `Object#toString` result shortcuts */
-var boolClass = '[object Boolean]';
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Used to resolve the internal [[Class]] of values */
-var toString = objectProto.toString;
-
-/**
- * Checks if `value` is a boolean value.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if the `value` is a boolean value, else `false`.
- * @example
- *
- * _.isBoolean(null);
- * // => false
- */
-function isBoolean(value) {
-  return value === true || value === false ||
-    value && typeof value == 'object' && toString.call(value) == boolClass || false;
-}
-
-module.exports = isBoolean;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/isDate.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/isDate.js
deleted file mode 100644
index 36ed1cf..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/isDate.js
+++ /dev/null
@@ -1,36 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** `Object#toString` result shortcuts */
-var dateClass = '[object Date]';
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Used to resolve the internal [[Class]] of values */
-var toString = objectProto.toString;
-
-/**
- * Checks if `value` is a date.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if the `value` is a date, else `false`.
- * @example
- *
- * _.isDate(new Date);
- * // => true
- */
-function isDate(value) {
-  return value && typeof value == 'object' && toString.call(value) == dateClass || false;
-}
-
-module.exports = isDate;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/isElement.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/isElement.js
deleted file mode 100644
index 243b618..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/isElement.js
+++ /dev/null
@@ -1,27 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * Checks if `value` is a DOM element.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if the `value` is a DOM element, else `false`.
- * @example
- *
- * _.isElement(document.body);
- * // => true
- */
-function isElement(value) {
-  return value && value.nodeType === 1 || false;
-}
-
-module.exports = isElement;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/isEmpty.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/isEmpty.js
deleted file mode 100644
index 35fe0f7..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/isEmpty.js
+++ /dev/null
@@ -1,63 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var forOwn = require('./forOwn'),
-    isFunction = require('./isFunction');
-
-/** `Object#toString` result shortcuts */
-var argsClass = '[object Arguments]',
-    arrayClass = '[object Array]',
-    objectClass = '[object Object]',
-    stringClass = '[object String]';
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Used to resolve the internal [[Class]] of values */
-var toString = objectProto.toString;
-
-/**
- * Checks if `value` is empty. Arrays, strings, or `arguments` objects with a
- * length of `0` and objects with no own enumerable properties are considered
- * "empty".
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {Array|Object|string} value The value to inspect.
- * @returns {boolean} Returns `true` if the `value` is empty, else `false`.
- * @example
- *
- * _.isEmpty([1, 2, 3]);
- * // => false
- *
- * _.isEmpty({});
- * // => true
- *
- * _.isEmpty('');
- * // => true
- */
-function isEmpty(value) {
-  var result = true;
-  if (!value) {
-    return result;
-  }
-  var className = toString.call(value),
-      length = value.length;
-
-  if ((className == arrayClass || className == stringClass || className == argsClass ) ||
-      (className == objectClass && typeof length == 'number' && isFunction(value.splice))) {
-    return !length;
-  }
-  forOwn(value, function() {
-    return (result = false);
-  });
-  return result;
-}
-
-module.exports = isEmpty;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/isEqual.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/isEqual.js
deleted file mode 100644
index 54c83fe..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/isEqual.js
+++ /dev/null
@@ -1,54 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseCreateCallback = require('../internals/baseCreateCallback'),
-    baseIsEqual = require('../internals/baseIsEqual');
-
-/**
- * Performs a deep comparison between two values to determine if they are
- * equivalent to each other. If a callback is provided it will be executed
- * to compare values. If the callback returns `undefined` comparisons will
- * be handled by the method instead. The callback is bound to `thisArg` and
- * invoked with two arguments; (a, b).
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {*} a The value to compare.
- * @param {*} b The other value to compare.
- * @param {Function} [callback] The function to customize comparing values.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
- * @example
- *
- * var object = { 'name': 'fred' };
- * var copy = { 'name': 'fred' };
- *
- * object == copy;
- * // => false
- *
- * _.isEqual(object, copy);
- * // => true
- *
- * var words = ['hello', 'goodbye'];
- * var otherWords = ['hi', 'goodbye'];
- *
- * _.isEqual(words, otherWords, function(a, b) {
- *   var reGreet = /^(?:hello|hi)$/i,
- *       aGreet = _.isString(a) && reGreet.test(a),
- *       bGreet = _.isString(b) && reGreet.test(b);
- *
- *   return (aGreet || bGreet) ? (aGreet == bGreet) : undefined;
- * });
- * // => true
- */
-function isEqual(a, b, callback, thisArg) {
-  return baseIsEqual(a, b, typeof callback == 'function' && baseCreateCallback(callback, thisArg, 2));
-}
-
-module.exports = isEqual;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/isFinite.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/isFinite.js
deleted file mode 100644
index 8142a8b..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/isFinite.js
+++ /dev/null
@@ -1,46 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/* Native method shortcuts for methods with the same name as other `lodash` methods */
-var nativeIsFinite = global.isFinite,
-    nativeIsNaN = global.isNaN;
-
-/**
- * Checks if `value` is, or can be coerced to, a finite number.
- *
- * Note: This is not the same as native `isFinite` which will return true for
- * booleans and empty strings. See http://es5.github.io/#x15.1.2.5.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if the `value` is finite, else `false`.
- * @example
- *
- * _.isFinite(-101);
- * // => true
- *
- * _.isFinite('10');
- * // => true
- *
- * _.isFinite(true);
- * // => false
- *
- * _.isFinite('');
- * // => false
- *
- * _.isFinite(Infinity);
- * // => false
- */
-function isFinite(value) {
-  return nativeIsFinite(value) && !nativeIsNaN(parseFloat(value));
-}
-
-module.exports = isFinite;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/isFunction.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/isFunction.js
deleted file mode 100644
index 30a49f1..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/isFunction.js
+++ /dev/null
@@ -1,27 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * Checks if `value` is a function.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if the `value` is a function, else `false`.
- * @example
- *
- * _.isFunction(_);
- * // => true
- */
-function isFunction(value) {
-  return typeof value == 'function';
-}
-
-module.exports = isFunction;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/isNaN.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/isNaN.js
deleted file mode 100644
index 1fff994..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/isNaN.js
+++ /dev/null
@@ -1,42 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isNumber = require('./isNumber');
-
-/**
- * Checks if `value` is `NaN`.
- *
- * Note: This is not the same as native `isNaN` which will return `true` for
- * `undefined` and other non-numeric values. See http://es5.github.io/#x15.1.2.4.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if the `value` is `NaN`, else `false`.
- * @example
- *
- * _.isNaN(NaN);
- * // => true
- *
- * _.isNaN(new Number(NaN));
- * // => true
- *
- * isNaN(undefined);
- * // => true
- *
- * _.isNaN(undefined);
- * // => false
- */
-function isNaN(value) {
-  // `NaN` as a primitive is the only value that is not equal to itself
-  // (perform the [[Class]] check first to avoid errors with some host objects in IE)
-  return isNumber(value) && value != +value;
-}
-
-module.exports = isNaN;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/isNull.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/isNull.js
deleted file mode 100644
index 423296d..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/isNull.js
+++ /dev/null
@@ -1,30 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * Checks if `value` is `null`.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if the `value` is `null`, else `false`.
- * @example
- *
- * _.isNull(null);
- * // => true
- *
- * _.isNull(undefined);
- * // => false
- */
-function isNull(value) {
-  return value === null;
-}
-
-module.exports = isNull;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/isNumber.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/isNumber.js
deleted file mode 100644
index 7188d0d..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/isNumber.js
+++ /dev/null
@@ -1,39 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** `Object#toString` result shortcuts */
-var numberClass = '[object Number]';
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Used to resolve the internal [[Class]] of values */
-var toString = objectProto.toString;
-
-/**
- * Checks if `value` is a number.
- *
- * Note: `NaN` is considered a number. See http://es5.github.io/#x8.5.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if the `value` is a number, else `false`.
- * @example
- *
- * _.isNumber(8.4 * 5);
- * // => true
- */
-function isNumber(value) {
-  return typeof value == 'number' ||
-    value && typeof value == 'object' && toString.call(value) == numberClass || false;
-}
-
-module.exports = isNumber;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/isObject.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/isObject.js
deleted file mode 100644
index 4a140a6..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/isObject.js
+++ /dev/null
@@ -1,39 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var objectTypes = require('../internals/objectTypes');
-
-/**
- * Checks if `value` is the language type of Object.
- * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if the `value` is an object, else `false`.
- * @example
- *
- * _.isObject({});
- * // => true
- *
- * _.isObject([1, 2, 3]);
- * // => true
- *
- * _.isObject(1);
- * // => false
- */
-function isObject(value) {
-  // check if the value is the ECMAScript language type of Object
-  // http://es5.github.io/#x8
-  // and avoid a V8 bug
-  // http://code.google.com/p/v8/issues/detail?id=2291
-  return !!(value && objectTypes[typeof value]);
-}
-
-module.exports = isObject;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/isPlainObject.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/isPlainObject.js
deleted file mode 100644
index 629a958..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/isPlainObject.js
+++ /dev/null
@@ -1,60 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isNative = require('../internals/isNative'),
-    shimIsPlainObject = require('../internals/shimIsPlainObject');
-
-/** `Object#toString` result shortcuts */
-var objectClass = '[object Object]';
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Used to resolve the internal [[Class]] of values */
-var toString = objectProto.toString;
-
-/** Native method shortcuts */
-var getPrototypeOf = isNative(getPrototypeOf = Object.getPrototypeOf) && getPrototypeOf;
-
-/**
- * Checks if `value` is an object created by the `Object` constructor.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.
- * @example
- *
- * function Shape() {
- *   this.x = 0;
- *   this.y = 0;
- * }
- *
- * _.isPlainObject(new Shape);
- * // => false
- *
- * _.isPlainObject([1, 2, 3]);
- * // => false
- *
- * _.isPlainObject({ 'x': 0, 'y': 0 });
- * // => true
- */
-var isPlainObject = !getPrototypeOf ? shimIsPlainObject : function(value) {
-  if (!(value && toString.call(value) == objectClass)) {
-    return false;
-  }
-  var valueOf = value.valueOf,
-      objProto = isNative(valueOf) && (objProto = getPrototypeOf(valueOf)) && getPrototypeOf(objProto);
-
-  return objProto
-    ? (value == objProto || getPrototypeOf(value) == objProto)
-    : shimIsPlainObject(value);
-};
-
-module.exports = isPlainObject;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/isRegExp.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/isRegExp.js
deleted file mode 100644
index 6e50c7a..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/isRegExp.js
+++ /dev/null
@@ -1,36 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** `Object#toString` result shortcuts */
-var regexpClass = '[object RegExp]';
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Used to resolve the internal [[Class]] of values */
-var toString = objectProto.toString;
-
-/**
- * Checks if `value` is a regular expression.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if the `value` is a regular expression, else `false`.
- * @example
- *
- * _.isRegExp(/fred/);
- * // => true
- */
-function isRegExp(value) {
-  return value && typeof value == 'object' && toString.call(value) == regexpClass || false;
-}
-
-module.exports = isRegExp;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/isString.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/isString.js
deleted file mode 100644
index 2c1527a..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/isString.js
+++ /dev/null
@@ -1,37 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** `Object#toString` result shortcuts */
-var stringClass = '[object String]';
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Used to resolve the internal [[Class]] of values */
-var toString = objectProto.toString;
-
-/**
- * Checks if `value` is a string.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if the `value` is a string, else `false`.
- * @example
- *
- * _.isString('fred');
- * // => true
- */
-function isString(value) {
-  return typeof value == 'string' ||
-    value && typeof value == 'object' && toString.call(value) == stringClass || false;
-}
-
-module.exports = isString;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/isUndefined.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/isUndefined.js
deleted file mode 100644
index 4e75280..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/isUndefined.js
+++ /dev/null
@@ -1,27 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * Checks if `value` is `undefined`.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if the `value` is `undefined`, else `false`.
- * @example
- *
- * _.isUndefined(void 0);
- * // => true
- */
-function isUndefined(value) {
-  return typeof value == 'undefined';
-}
-
-module.exports = isUndefined;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/keys.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/keys.js
deleted file mode 100644
index 163e03d..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/keys.js
+++ /dev/null
@@ -1,36 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isNative = require('../internals/isNative'),
-    isObject = require('./isObject'),
-    shimKeys = require('../internals/shimKeys');
-
-/* Native method shortcuts for methods with the same name as other `lodash` methods */
-var nativeKeys = isNative(nativeKeys = Object.keys) && nativeKeys;
-
-/**
- * Creates an array composed of the own enumerable property names of an object.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {Object} object The object to inspect.
- * @returns {Array} Returns an array of property names.
- * @example
- *
- * _.keys({ 'one': 1, 'two': 2, 'three': 3 });
- * // => ['one', 'two', 'three'] (property order is not guaranteed across environments)
- */
-var keys = !nativeKeys ? shimKeys : function(object) {
-  if (!isObject(object)) {
-    return [];
-  }
-  return nativeKeys(object);
-};
-
-module.exports = keys;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/mapValues.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/mapValues.js
deleted file mode 100644
index 9e797da..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/mapValues.js
+++ /dev/null
@@ -1,58 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback'),
-    forOwn = require('./forOwn');
-
-/**
- * Creates an object with the same keys as `object` and values generated by
- * running each own enumerable property of `object` through the callback.
- * The callback is bound to `thisArg` and invoked with three arguments;
- * (value, key, object).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {Object} object The object to iterate over.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Array} Returns a new object with values of the results of each `callback` execution.
- * @example
- *
- * _.mapValues({ 'a': 1, 'b': 2, 'c': 3} , function(num) { return num * 3; });
- * // => { 'a': 3, 'b': 6, 'c': 9 }
- *
- * var characters = {
- *   'fred': { 'name': 'fred', 'age': 40 },
- *   'pebbles': { 'name': 'pebbles', 'age': 1 }
- * };
- *
- * // using "_.pluck" callback shorthand
- * _.mapValues(characters, 'age');
- * // => { 'fred': 40, 'pebbles': 1 }
- */
-function mapValues(object, callback, thisArg) {
-  var result = {};
-  callback = createCallback(callback, thisArg, 3);
-
-  forOwn(object, function(value, key, object) {
-    result[key] = callback(value, key, object);
-  });
-  return result;
-}
-
-module.exports = mapValues;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/merge.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/merge.js
deleted file mode 100644
index d4bddc3..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/merge.js
+++ /dev/null
@@ -1,97 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseCreateCallback = require('../internals/baseCreateCallback'),
-    baseMerge = require('../internals/baseMerge'),
-    getArray = require('../internals/getArray'),
-    isObject = require('./isObject'),
-    releaseArray = require('../internals/releaseArray'),
-    slice = require('../internals/slice');
-
-/**
- * Recursively merges own enumerable properties of the source object(s), that
- * don't resolve to `undefined` into the destination object. Subsequent sources
- * will overwrite property assignments of previous sources. If a callback is
- * provided it will be executed to produce the merged values of the destination
- * and source properties. If the callback returns `undefined` merging will
- * be handled by the method instead. The callback is bound to `thisArg` and
- * invoked with two arguments; (objectValue, sourceValue).
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {Object} object The destination object.
- * @param {...Object} [source] The source objects.
- * @param {Function} [callback] The function to customize merging properties.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Object} Returns the destination object.
- * @example
- *
- * var names = {
- *   'characters': [
- *     { 'name': 'barney' },
- *     { 'name': 'fred' }
- *   ]
- * };
- *
- * var ages = {
- *   'characters': [
- *     { 'age': 36 },
- *     { 'age': 40 }
- *   ]
- * };
- *
- * _.merge(names, ages);
- * // => { 'characters': [{ 'name': 'barney', 'age': 36 }, { 'name': 'fred', 'age': 40 }] }
- *
- * var food = {
- *   'fruits': ['apple'],
- *   'vegetables': ['beet']
- * };
- *
- * var otherFood = {
- *   'fruits': ['banana'],
- *   'vegetables': ['carrot']
- * };
- *
- * _.merge(food, otherFood, function(a, b) {
- *   return _.isArray(a) ? a.concat(b) : undefined;
- * });
- * // => { 'fruits': ['apple', 'banana'], 'vegetables': ['beet', 'carrot] }
- */
-function merge(object) {
-  var args = arguments,
-      length = 2;
-
-  if (!isObject(object)) {
-    return object;
-  }
-  // allows working with `_.reduce` and `_.reduceRight` without using
-  // their `index` and `collection` arguments
-  if (typeof args[2] != 'number') {
-    length = args.length;
-  }
-  if (length > 3 && typeof args[length - 2] == 'function') {
-    var callback = baseCreateCallback(args[--length - 1], args[length--], 2);
-  } else if (length > 2 && typeof args[length - 1] == 'function') {
-    callback = args[--length];
-  }
-  var sources = slice(arguments, 1, length),
-      index = -1,
-      stackA = getArray(),
-      stackB = getArray();
-
-  while (++index < length) {
-    baseMerge(object, sources[index], callback, stackA, stackB);
-  }
-  releaseArray(stackA);
-  releaseArray(stackB);
-  return object;
-}
-
-module.exports = merge;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/omit.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/omit.js
deleted file mode 100644
index 759798d..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/omit.js
+++ /dev/null
@@ -1,67 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseDifference = require('../internals/baseDifference'),
-    baseFlatten = require('../internals/baseFlatten'),
-    createCallback = require('../functions/createCallback'),
-    forIn = require('./forIn');
-
-/**
- * Creates a shallow clone of `object` excluding the specified properties.
- * Property names may be specified as individual arguments or as arrays of
- * property names. If a callback is provided it will be executed for each
- * property of `object` omitting the properties the callback returns truey
- * for. The callback is bound to `thisArg` and invoked with three arguments;
- * (value, key, object).
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {Object} object The source object.
- * @param {Function|...string|string[]} [callback] The properties to omit or the
- *  function called per iteration.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Object} Returns an object without the omitted properties.
- * @example
- *
- * _.omit({ 'name': 'fred', 'age': 40 }, 'age');
- * // => { 'name': 'fred' }
- *
- * _.omit({ 'name': 'fred', 'age': 40 }, function(value) {
- *   return typeof value == 'number';
- * });
- * // => { 'name': 'fred' }
- */
-function omit(object, callback, thisArg) {
-  var result = {};
-  if (typeof callback != 'function') {
-    var props = [];
-    forIn(object, function(value, key) {
-      props.push(key);
-    });
-    props = baseDifference(props, baseFlatten(arguments, true, false, 1));
-
-    var index = -1,
-        length = props.length;
-
-    while (++index < length) {
-      var key = props[index];
-      result[key] = object[key];
-    }
-  } else {
-    callback = createCallback(callback, thisArg, 3);
-    forIn(object, function(value, key, object) {
-      if (!callback(value, key, object)) {
-        result[key] = value;
-      }
-    });
-  }
-  return result;
-}
-
-module.exports = omit;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/pairs.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/pairs.js
deleted file mode 100644
index e9e06a6..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/pairs.js
+++ /dev/null
@@ -1,38 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var keys = require('./keys');
-
-/**
- * Creates a two dimensional array of an object's key-value pairs,
- * i.e. `[[key1, value1], [key2, value2]]`.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {Object} object The object to inspect.
- * @returns {Array} Returns new array of key-value pairs.
- * @example
- *
- * _.pairs({ 'barney': 36, 'fred': 40 });
- * // => [['barney', 36], ['fred', 40]] (property order is not guaranteed across environments)
- */
-function pairs(object) {
-  var index = -1,
-      props = keys(object),
-      length = props.length,
-      result = Array(length);
-
-  while (++index < length) {
-    var key = props[index];
-    result[index] = [key, object[key]];
-  }
-  return result;
-}
-
-module.exports = pairs;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/pick.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/pick.js
deleted file mode 100644
index 718a4b5..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/pick.js
+++ /dev/null
@@ -1,65 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseFlatten = require('../internals/baseFlatten'),
-    createCallback = require('../functions/createCallback'),
-    forIn = require('./forIn'),
-    isObject = require('./isObject');
-
-/**
- * Creates a shallow clone of `object` composed of the specified properties.
- * Property names may be specified as individual arguments or as arrays of
- * property names. If a callback is provided it will be executed for each
- * property of `object` picking the properties the callback returns truey
- * for. The callback is bound to `thisArg` and invoked with three arguments;
- * (value, key, object).
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {Object} object The source object.
- * @param {Function|...string|string[]} [callback] The function called per
- *  iteration or property names to pick, specified as individual property
- *  names or arrays of property names.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Object} Returns an object composed of the picked properties.
- * @example
- *
- * _.pick({ 'name': 'fred', '_userid': 'fred1' }, 'name');
- * // => { 'name': 'fred' }
- *
- * _.pick({ 'name': 'fred', '_userid': 'fred1' }, function(value, key) {
- *   return key.charAt(0) != '_';
- * });
- * // => { 'name': 'fred' }
- */
-function pick(object, callback, thisArg) {
-  var result = {};
-  if (typeof callback != 'function') {
-    var index = -1,
-        props = baseFlatten(arguments, true, false, 1),
-        length = isObject(object) ? props.length : 0;
-
-    while (++index < length) {
-      var key = props[index];
-      if (key in object) {
-        result[key] = object[key];
-      }
-    }
-  } else {
-    callback = createCallback(callback, thisArg, 3);
-    forIn(object, function(value, key, object) {
-      if (callback(value, key, object)) {
-        result[key] = value;
-      }
-    });
-  }
-  return result;
-}
-
-module.exports = pick;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/transform.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/transform.js
deleted file mode 100644
index 7c59ded..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/transform.js
+++ /dev/null
@@ -1,67 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseCreate = require('../internals/baseCreate'),
-    createCallback = require('../functions/createCallback'),
-    forEach = require('../collections/forEach'),
-    forOwn = require('./forOwn'),
-    isArray = require('./isArray');
-
-/**
- * An alternative to `_.reduce` this method transforms `object` to a new
- * `accumulator` object which is the result of running each of its own
- * enumerable properties through a callback, with each callback execution
- * potentially mutating the `accumulator` object. The callback is bound to
- * `thisArg` and invoked with four arguments; (accumulator, value, key, object).
- * Callbacks may exit iteration early by explicitly returning `false`.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {Array|Object} object The object to iterate over.
- * @param {Function} [callback=identity] The function called per iteration.
- * @param {*} [accumulator] The custom accumulator value.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {*} Returns the accumulated value.
- * @example
- *
- * var squares = _.transform([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], function(result, num) {
- *   num *= num;
- *   if (num % 2) {
- *     return result.push(num) < 3;
- *   }
- * });
- * // => [1, 9, 25]
- *
- * var mapped = _.transform({ 'a': 1, 'b': 2, 'c': 3 }, function(result, num, key) {
- *   result[key] = num * 3;
- * });
- * // => { 'a': 3, 'b': 6, 'c': 9 }
- */
-function transform(object, callback, accumulator, thisArg) {
-  var isArr = isArray(object);
-  if (accumulator == null) {
-    if (isArr) {
-      accumulator = [];
-    } else {
-      var ctor = object && object.constructor,
-          proto = ctor && ctor.prototype;
-
-      accumulator = baseCreate(proto);
-    }
-  }
-  if (callback) {
-    callback = createCallback(callback, thisArg, 4);
-    (isArr ? forEach : forOwn)(object, function(value, index, object) {
-      return callback(accumulator, value, index, object);
-    });
-  }
-  return accumulator;
-}
-
-module.exports = transform;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/values.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/values.js
deleted file mode 100644
index ac9c3c1..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/objects/values.js
+++ /dev/null
@@ -1,36 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var keys = require('./keys');
-
-/**
- * Creates an array composed of the own enumerable property values of `object`.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {Object} object The object to inspect.
- * @returns {Array} Returns an array of property values.
- * @example
- *
- * _.values({ 'one': 1, 'two': 2, 'three': 3 });
- * // => [1, 2, 3] (property order is not guaranteed across environments)
- */
-function values(object) {
-  var index = -1,
-      props = keys(object),
-      length = props.length,
-      result = Array(length);
-
-  while (++index < length) {
-    result[index] = object[props[index]];
-  }
-  return result;
-}
-
-module.exports = values;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/support.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/support.js
deleted file mode 100644
index 646a9ab..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/support.js
+++ /dev/null
@@ -1,40 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isNative = require('./internals/isNative');
-
-/** Used to detect functions containing a `this` reference */
-var reThis = /\bthis\b/;
-
-/**
- * An object used to flag environments features.
- *
- * @static
- * @memberOf _
- * @type Object
- */
-var support = {};
-
-/**
- * Detect if functions can be decompiled by `Function#toString`
- * (all but PS3 and older Opera mobile browsers & avoided in Windows 8 apps).
- *
- * @memberOf _.support
- * @type boolean
- */
-support.funcDecomp = !isNative(global.WinRTError) && reThis.test(function() { return this; });
-
-/**
- * Detect if `Function#name` is supported (all but IE).
- *
- * @memberOf _.support
- * @type boolean
- */
-support.funcNames = typeof Function.name == 'string';
-
-module.exports = support;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/utilities.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/utilities.js
deleted file mode 100644
index b686eee..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/utilities.js
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-module.exports = {
-  'constant': require('./utilities/constant'),
-  'createCallback': require('./functions/createCallback'),
-  'escape': require('./utilities/escape'),
-  'identity': require('./utilities/identity'),
-  'mixin': require('./utilities/mixin'),
-  'noConflict': require('./utilities/noConflict'),
-  'noop': require('./utilities/noop'),
-  'now': require('./utilities/now'),
-  'parseInt': require('./utilities/parseInt'),
-  'property': require('./utilities/property'),
-  'random': require('./utilities/random'),
-  'result': require('./utilities/result'),
-  'template': require('./utilities/template'),
-  'templateSettings': require('./utilities/templateSettings'),
-  'times': require('./utilities/times'),
-  'unescape': require('./utilities/unescape'),
-  'uniqueId': require('./utilities/uniqueId')
-};
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/utilities/constant.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/utilities/constant.js
deleted file mode 100644
index 8e45e85..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/utilities/constant.js
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * Creates a function that returns `value`.
- *
- * @static
- * @memberOf _
- * @category Utilities
- * @param {*} value The value to return from the new function.
- * @returns {Function} Returns the new function.
- * @example
- *
- * var object = { 'name': 'fred' };
- * var getter = _.constant(object);
- * getter() === object;
- * // => true
- */
-function constant(value) {
-  return function() {
-    return value;
-  };
-}
-
-module.exports = constant;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/utilities/escape.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/utilities/escape.js
deleted file mode 100644
index 7f76531..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/utilities/escape.js
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var escapeHtmlChar = require('../internals/escapeHtmlChar'),
-    keys = require('../objects/keys'),
-    reUnescapedHtml = require('../internals/reUnescapedHtml');
-
-/**
- * Converts the characters `&`, `<`, `>`, `"`, and `'` in `string` to their
- * corresponding HTML entities.
- *
- * @static
- * @memberOf _
- * @category Utilities
- * @param {string} string The string to escape.
- * @returns {string} Returns the escaped string.
- * @example
- *
- * _.escape('Fred, Wilma, & Pebbles');
- * // => 'Fred, Wilma, &amp; Pebbles'
- */
-function escape(string) {
-  return string == null ? '' : String(string).replace(reUnescapedHtml, escapeHtmlChar);
-}
-
-module.exports = escape;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/utilities/identity.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/utilities/identity.js
deleted file mode 100644
index 0af8ec0..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/utilities/identity.js
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * This method returns the first argument provided to it.
- *
- * @static
- * @memberOf _
- * @category Utilities
- * @param {*} value Any value.
- * @returns {*} Returns `value`.
- * @example
- *
- * var object = { 'name': 'fred' };
- * _.identity(object) === object;
- * // => true
- */
-function identity(value) {
-  return value;
-}
-
-module.exports = identity;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/utilities/mixin.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/utilities/mixin.js
deleted file mode 100644
index dd08b7d..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/utilities/mixin.js
+++ /dev/null
@@ -1,88 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var forEach = require('../collections/forEach'),
-    functions = require('../objects/functions'),
-    isFunction = require('../objects/isFunction'),
-    isObject = require('../objects/isObject');
-
-/**
- * Used for `Array` method references.
- *
- * Normally `Array.prototype` would suffice, however, using an array literal
- * avoids issues in Narwhal.
- */
-var arrayRef = [];
-
-/** Native method shortcuts */
-var push = arrayRef.push;
-
-/**
- * Adds function properties of a source object to the destination object.
- * If `object` is a function methods will be added to its prototype as well.
- *
- * @static
- * @memberOf _
- * @category Utilities
- * @param {Function|Object} [object=lodash] object The destination object.
- * @param {Object} source The object of functions to add.
- * @param {Object} [options] The options object.
- * @param {boolean} [options.chain=true] Specify whether the functions added are chainable.
- * @example
- *
- * function capitalize(string) {
- *   return string.charAt(0).toUpperCase() + string.slice(1).toLowerCase();
- * }
- *
- * _.mixin({ 'capitalize': capitalize });
- * _.capitalize('fred');
- * // => 'Fred'
- *
- * _('fred').capitalize().value();
- * // => 'Fred'
- *
- * _.mixin({ 'capitalize': capitalize }, { 'chain': false });
- * _('fred').capitalize();
- * // => 'Fred'
- */
-function mixin(object, source, options) {
-  var chain = true,
-      methodNames = source && functions(source);
-
-  if (options === false) {
-    chain = false;
-  } else if (isObject(options) && 'chain' in options) {
-    chain = options.chain;
-  }
-  var ctor = object,
-      isFunc = isFunction(ctor);
-
-  forEach(methodNames, function(methodName) {
-    var func = object[methodName] = source[methodName];
-    if (isFunc) {
-      ctor.prototype[methodName] = function() {
-        var chainAll = this.__chain__,
-            value = this.__wrapped__,
-            args = [value];
-
-        push.apply(args, arguments);
-        var result = func.apply(object, args);
-        if (chain || chainAll) {
-          if (value === result && isObject(result)) {
-            return this;
-          }
-          result = new ctor(result);
-          result.__chain__ = chainAll;
-        }
-        return result;
-      };
-    }
-  });
-}
-
-module.exports = mixin;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/utilities/noConflict.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/utilities/noConflict.js
deleted file mode 100644
index 306ee81..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/utilities/noConflict.js
+++ /dev/null
@@ -1,30 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** Used to restore the original `_` reference in `noConflict` */
-var oldDash = global._;
-
-/**
- * Reverts the '_' variable to its previous value and returns a reference to
- * the `lodash` function.
- *
- * @static
- * @memberOf _
- * @category Utilities
- * @returns {Function} Returns the `lodash` function.
- * @example
- *
- * var lodash = _.noConflict();
- */
-function noConflict() {
-  global._ = oldDash;
-  return this;
-}
-
-module.exports = noConflict;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/utilities/noop.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/utilities/noop.js
deleted file mode 100644
index f6a7a7a..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/utilities/noop.js
+++ /dev/null
@@ -1,26 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * A no-operation function.
- *
- * @static
- * @memberOf _
- * @category Utilities
- * @example
- *
- * var object = { 'name': 'fred' };
- * _.noop(object) === undefined;
- * // => true
- */
-function noop() {
-  // no operation performed
-}
-
-module.exports = noop;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/utilities/now.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/utilities/now.js
deleted file mode 100644
index 09a9928..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/utilities/now.js
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isNative = require('../internals/isNative');
-
-/**
- * Gets the number of milliseconds that have elapsed since the Unix epoch
- * (1 January 1970 00:00:00 UTC).
- *
- * @static
- * @memberOf _
- * @category Utilities
- * @example
- *
- * var stamp = _.now();
- * _.defer(function() { console.log(_.now() - stamp); });
- * // => logs the number of milliseconds it took for the deferred function to be called
- */
-var now = isNative(now = Date.now) && now || function() {
-  return new Date().getTime();
-};
-
-module.exports = now;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/utilities/parseInt.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/utilities/parseInt.js
deleted file mode 100644
index 6462865..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/utilities/parseInt.js
+++ /dev/null
@@ -1,53 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isString = require('../objects/isString');
-
-/** Used to detect and test whitespace */
-var whitespace = (
-  // whitespace
-  ' \t\x0B\f\xA0\ufeff' +
-
-  // line terminators
-  '\n\r\u2028\u2029' +
-
-  // unicode category "Zs" space separators
-  '\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000'
-);
-
-/** Used to match leading whitespace and zeros to be removed */
-var reLeadingSpacesAndZeros = RegExp('^[' + whitespace + ']*0+(?=.$)');
-
-/* Native method shortcuts for methods with the same name as other `lodash` methods */
-var nativeParseInt = global.parseInt;
-
-/**
- * Converts the given value into an integer of the specified radix.
- * If `radix` is `undefined` or `0` a `radix` of `10` is used unless the
- * `value` is a hexadecimal, in which case a `radix` of `16` is used.
- *
- * Note: This method avoids differences in native ES3 and ES5 `parseInt`
- * implementations. See http://es5.github.io/#E.
- *
- * @static
- * @memberOf _
- * @category Utilities
- * @param {string} value The value to parse.
- * @param {number} [radix] The radix used to interpret the value to parse.
- * @returns {number} Returns the new integer value.
- * @example
- *
- * _.parseInt('08');
- * // => 8
- */
-var parseInt = nativeParseInt(whitespace + '08') == 8 ? nativeParseInt : function(value, radix) {
-  // Firefox < 21 and Opera < 15 follow the ES3 specified implementation of `parseInt`
-  return nativeParseInt(isString(value) ? value.replace(reLeadingSpacesAndZeros, '') : value, radix || 0);
-};
-
-module.exports = parseInt;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/utilities/property.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/utilities/property.js
deleted file mode 100644
index c9a735c..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/utilities/property.js
+++ /dev/null
@@ -1,40 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * Creates a "_.pluck" style function, which returns the `key` value of a
- * given object.
- *
- * @static
- * @memberOf _
- * @category Utilities
- * @param {string} key The name of the property to retrieve.
- * @returns {Function} Returns the new function.
- * @example
- *
- * var characters = [
- *   { 'name': 'fred',   'age': 40 },
- *   { 'name': 'barney', 'age': 36 }
- * ];
- *
- * var getName = _.property('name');
- *
- * _.map(characters, getName);
- * // => ['barney', 'fred']
- *
- * _.sortBy(characters, getName);
- * // => [{ 'name': 'barney', 'age': 36 }, { 'name': 'fred',   'age': 40 }]
- */
-function property(key) {
-  return function(object) {
-    return object[key];
-  };
-}
-
-module.exports = property;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/utilities/random.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/utilities/random.js
deleted file mode 100644
index cbf8ef2..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/utilities/random.js
+++ /dev/null
@@ -1,73 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseRandom = require('../internals/baseRandom');
-
-/* Native method shortcuts for methods with the same name as other `lodash` methods */
-var nativeMin = Math.min,
-    nativeRandom = Math.random;
-
-/**
- * Produces a random number between `min` and `max` (inclusive). If only one
- * argument is provided a number between `0` and the given number will be
- * returned. If `floating` is truey or either `min` or `max` are floats a
- * floating-point number will be returned instead of an integer.
- *
- * @static
- * @memberOf _
- * @category Utilities
- * @param {number} [min=0] The minimum possible value.
- * @param {number} [max=1] The maximum possible value.
- * @param {boolean} [floating=false] Specify returning a floating-point number.
- * @returns {number} Returns a random number.
- * @example
- *
- * _.random(0, 5);
- * // => an integer between 0 and 5
- *
- * _.random(5);
- * // => also an integer between 0 and 5
- *
- * _.random(5, true);
- * // => a floating-point number between 0 and 5
- *
- * _.random(1.2, 5.2);
- * // => a floating-point number between 1.2 and 5.2
- */
-function random(min, max, floating) {
-  var noMin = min == null,
-      noMax = max == null;
-
-  if (floating == null) {
-    if (typeof min == 'boolean' && noMax) {
-      floating = min;
-      min = 1;
-    }
-    else if (!noMax && typeof max == 'boolean') {
-      floating = max;
-      noMax = true;
-    }
-  }
-  if (noMin && noMax) {
-    max = 1;
-  }
-  min = +min || 0;
-  if (noMax) {
-    max = min;
-    min = 0;
-  } else {
-    max = +max || 0;
-  }
-  if (floating || min % 1 || max % 1) {
-    var rand = nativeRandom();
-    return nativeMin(min + (rand * (max - min + parseFloat('1e-' + ((rand +'').length - 1)))), max);
-  }
-  return baseRandom(min, max);
-}
-
-module.exports = random;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/utilities/result.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/utilities/result.js
deleted file mode 100644
index cffcb50..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/utilities/result.js
+++ /dev/null
@@ -1,45 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isFunction = require('../objects/isFunction');
-
-/**
- * Resolves the value of property `key` on `object`. If `key` is a function
- * it will be invoked with the `this` binding of `object` and its result returned,
- * else the property value is returned. If `object` is falsey then `undefined`
- * is returned.
- *
- * @static
- * @memberOf _
- * @category Utilities
- * @param {Object} object The object to inspect.
- * @param {string} key The name of the property to resolve.
- * @returns {*} Returns the resolved value.
- * @example
- *
- * var object = {
- *   'cheese': 'crumpets',
- *   'stuff': function() {
- *     return 'nonsense';
- *   }
- * };
- *
- * _.result(object, 'cheese');
- * // => 'crumpets'
- *
- * _.result(object, 'stuff');
- * // => 'nonsense'
- */
-function result(object, key) {
-  if (object) {
-    var value = object[key];
-    return isFunction(value) ? object[key]() : value;
-  }
-}
-
-module.exports = result;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/utilities/template.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/utilities/template.js
deleted file mode 100644
index 85ab79d..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/utilities/template.js
+++ /dev/null
@@ -1,216 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var defaults = require('../objects/defaults'),
-    escape = require('./escape'),
-    escapeStringChar = require('../internals/escapeStringChar'),
-    keys = require('../objects/keys'),
-    reInterpolate = require('../internals/reInterpolate'),
-    templateSettings = require('./templateSettings'),
-    values = require('../objects/values');
-
-/** Used to match empty string literals in compiled template source */
-var reEmptyStringLeading = /\b__p \+= '';/g,
-    reEmptyStringMiddle = /\b(__p \+=) '' \+/g,
-    reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g;
-
-/**
- * Used to match ES6 template delimiters
- * http://people.mozilla.org/~jorendorff/es6-draft.html#sec-literals-string-literals
- */
-var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g;
-
-/** Used to ensure capturing order of template delimiters */
-var reNoMatch = /($^)/;
-
-/** Used to match unescaped characters in compiled string literals */
-var reUnescapedString = /['\n\r\t\u2028\u2029\\]/g;
-
-/**
- * A micro-templating method that handles arbitrary delimiters, preserves
- * whitespace, and correctly escapes quotes within interpolated code.
- *
- * Note: In the development build, `_.template` utilizes sourceURLs for easier
- * debugging. See http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl
- *
- * For more information on precompiling templates see:
- * http://lodash.com/custom-builds
- *
- * For more information on Chrome extension sandboxes see:
- * http://developer.chrome.com/stable/extensions/sandboxingEval.html
- *
- * @static
- * @memberOf _
- * @category Utilities
- * @param {string} text The template text.
- * @param {Object} data The data object used to populate the text.
- * @param {Object} [options] The options object.
- * @param {RegExp} [options.escape] The "escape" delimiter.
- * @param {RegExp} [options.evaluate] The "evaluate" delimiter.
- * @param {Object} [options.imports] An object to import into the template as local variables.
- * @param {RegExp} [options.interpolate] The "interpolate" delimiter.
- * @param {string} [sourceURL] The sourceURL of the template's compiled source.
- * @param {string} [variable] The data object variable name.
- * @returns {Function|string} Returns a compiled function when no `data` object
- *  is given, else it returns the interpolated text.
- * @example
- *
- * // using the "interpolate" delimiter to create a compiled template
- * var compiled = _.template('hello <%= name %>');
- * compiled({ 'name': 'fred' });
- * // => 'hello fred'
- *
- * // using the "escape" delimiter to escape HTML in data property values
- * _.template('<b><%- value %></b>', { 'value': '<script>' });
- * // => '<b>&lt;script&gt;</b>'
- *
- * // using the "evaluate" delimiter to generate HTML
- * var list = '<% _.forEach(people, function(name) { %><li><%- name %></li><% }); %>';
- * _.template(list, { 'people': ['fred', 'barney'] });
- * // => '<li>fred</li><li>barney</li>'
- *
- * // using the ES6 delimiter as an alternative to the default "interpolate" delimiter
- * _.template('hello ${ name }', { 'name': 'pebbles' });
- * // => 'hello pebbles'
- *
- * // using the internal `print` function in "evaluate" delimiters
- * _.template('<% print("hello " + name); %>!', { 'name': 'barney' });
- * // => 'hello barney!'
- *
- * // using a custom template delimiters
- * _.templateSettings = {
- *   'interpolate': /{{([\s\S]+?)}}/g
- * };
- *
- * _.template('hello {{ name }}!', { 'name': 'mustache' });
- * // => 'hello mustache!'
- *
- * // using the `imports` option to import jQuery
- * var list = '<% jq.each(people, function(name) { %><li><%- name %></li><% }); %>';
- * _.template(list, { 'people': ['fred', 'barney'] }, { 'imports': { 'jq': jQuery } });
- * // => '<li>fred</li><li>barney</li>'
- *
- * // using the `sourceURL` option to specify a custom sourceURL for the template
- * var compiled = _.template('hello <%= name %>', null, { 'sourceURL': '/basic/greeting.jst' });
- * compiled(data);
- * // => find the source of "greeting.jst" under the Sources tab or Resources panel of the web inspector
- *
- * // using the `variable` option to ensure a with-statement isn't used in the compiled template
- * var compiled = _.template('hi <%= data.name %>!', null, { 'variable': 'data' });
- * compiled.source;
- * // => function(data) {
- *   var __t, __p = '', __e = _.escape;
- *   __p += 'hi ' + ((__t = ( data.name )) == null ? '' : __t) + '!';
- *   return __p;
- * }
- *
- * // using the `source` property to inline compiled templates for meaningful
- * // line numbers in error messages and a stack trace
- * fs.writeFileSync(path.join(cwd, 'jst.js'), '\
- *   var JST = {\
- *     "main": ' + _.template(mainText).source + '\
- *   };\
- * ');
- */
-function template(text, data, options) {
-  // based on John Resig's `tmpl` implementation
-  // http://ejohn.org/blog/javascript-micro-templating/
-  // and Laura Doktorova's doT.js
-  // https://github.com/olado/doT
-  var settings = templateSettings.imports._.templateSettings || templateSettings;
-  text = String(text || '');
-
-  // avoid missing dependencies when `iteratorTemplate` is not defined
-  options = defaults({}, options, settings);
-
-  var imports = defaults({}, options.imports, settings.imports),
-      importsKeys = keys(imports),
-      importsValues = values(imports);
-
-  var isEvaluating,
-      index = 0,
-      interpolate = options.interpolate || reNoMatch,
-      source = "__p += '";
-
-  // compile the regexp to match each delimiter
-  var reDelimiters = RegExp(
-    (options.escape || reNoMatch).source + '|' +
-    interpolate.source + '|' +
-    (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +
-    (options.evaluate || reNoMatch).source + '|$'
-  , 'g');
-
-  text.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {
-    interpolateValue || (interpolateValue = esTemplateValue);
-
-    // escape characters that cannot be included in string literals
-    source += text.slice(index, offset).replace(reUnescapedString, escapeStringChar);
-
-    // replace delimiters with snippets
-    if (escapeValue) {
-      source += "' +\n__e(" + escapeValue + ") +\n'";
-    }
-    if (evaluateValue) {
-      isEvaluating = true;
-      source += "';\n" + evaluateValue + ";\n__p += '";
-    }
-    if (interpolateValue) {
-      source += "' +\n((__t = (" + interpolateValue + ")) == null ? '' : __t) +\n'";
-    }
-    index = offset + match.length;
-
-    // the JS engine embedded in Adobe products requires returning the `match`
-    // string in order to produce the correct `offset` value
-    return match;
-  });
-
-  source += "';\n";
-
-  // if `variable` is not specified, wrap a with-statement around the generated
-  // code to add the data object to the top of the scope chain
-  var variable = options.variable,
-      hasVariable = variable;
-
-  if (!hasVariable) {
-    variable = 'obj';
-    source = 'with (' + variable + ') {\n' + source + '\n}\n';
-  }
-  // cleanup code by stripping empty strings
-  source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)
-    .replace(reEmptyStringMiddle, '$1')
-    .replace(reEmptyStringTrailing, '$1;');
-
-  // frame code as the function body
-  source = 'function(' + variable + ') {\n' +
-    (hasVariable ? '' : variable + ' || (' + variable + ' = {});\n') +
-    "var __t, __p = '', __e = _.escape" +
-    (isEvaluating
-      ? ', __j = Array.prototype.join;\n' +
-        "function print() { __p += __j.call(arguments, '') }\n"
-      : ';\n'
-    ) +
-    source +
-    'return __p\n}';
-
-  try {
-    var result = Function(importsKeys, 'return ' + source ).apply(undefined, importsValues);
-  } catch(e) {
-    e.source = source;
-    throw e;
-  }
-  if (data) {
-    return result(data);
-  }
-  // provide the compiled function's source by its `toString` method, in
-  // supported environments, or the `source` property as a convenience for
-  // inlining compiled templates during the build process
-  result.source = source;
-  return result;
-}
-
-module.exports = template;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/utilities/templateSettings.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/utilities/templateSettings.js
deleted file mode 100644
index c4bbb05..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/utilities/templateSettings.js
+++ /dev/null
@@ -1,73 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var escape = require('./escape'),
-    reInterpolate = require('../internals/reInterpolate');
-
-/**
- * By default, the template delimiters used by Lo-Dash are similar to those in
- * embedded Ruby (ERB). Change the following template settings to use alternative
- * delimiters.
- *
- * @static
- * @memberOf _
- * @type Object
- */
-var templateSettings = {
-
-  /**
-   * Used to detect `data` property values to be HTML-escaped.
-   *
-   * @memberOf _.templateSettings
-   * @type RegExp
-   */
-  'escape': /<%-([\s\S]+?)%>/g,
-
-  /**
-   * Used to detect code to be evaluated.
-   *
-   * @memberOf _.templateSettings
-   * @type RegExp
-   */
-  'evaluate': /<%([\s\S]+?)%>/g,
-
-  /**
-   * Used to detect `data` property values to inject.
-   *
-   * @memberOf _.templateSettings
-   * @type RegExp
-   */
-  'interpolate': reInterpolate,
-
-  /**
-   * Used to reference the data object in the template text.
-   *
-   * @memberOf _.templateSettings
-   * @type string
-   */
-  'variable': '',
-
-  /**
-   * Used to import variables into the compiled template.
-   *
-   * @memberOf _.templateSettings
-   * @type Object
-   */
-  'imports': {
-
-    /**
-     * A reference to the `lodash` function.
-     *
-     * @memberOf _.templateSettings.imports
-     * @type Function
-     */
-    '_': { 'escape': escape }
-  }
-};
-
-module.exports = templateSettings;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/utilities/times.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/utilities/times.js
deleted file mode 100644
index 8ac64ff..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/utilities/times.js
+++ /dev/null
@@ -1,46 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseCreateCallback = require('../internals/baseCreateCallback');
-
-/**
- * Executes the callback `n` times, returning an array of the results
- * of each callback execution. The callback is bound to `thisArg` and invoked
- * with one argument; (index).
- *
- * @static
- * @memberOf _
- * @category Utilities
- * @param {number} n The number of times to execute the callback.
- * @param {Function} callback The function called per iteration.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Array} Returns an array of the results of each `callback` execution.
- * @example
- *
- * var diceRolls = _.times(3, _.partial(_.random, 1, 6));
- * // => [3, 6, 4]
- *
- * _.times(3, function(n) { mage.castSpell(n); });
- * // => calls `mage.castSpell(n)` three times, passing `n` of `0`, `1`, and `2` respectively
- *
- * _.times(3, function(n) { this.cast(n); }, mage);
- * // => also calls `mage.castSpell(n)` three times
- */
-function times(n, callback, thisArg) {
-  n = (n = +n) > -1 ? n : 0;
-  var index = -1,
-      result = Array(n);
-
-  callback = baseCreateCallback(callback, thisArg, 1);
-  while (++index < n) {
-    result[index] = callback(index);
-  }
-  return result;
-}
-
-module.exports = times;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/utilities/unescape.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/utilities/unescape.js
deleted file mode 100644
index 57403f4..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/utilities/unescape.js
+++ /dev/null
@@ -1,32 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var keys = require('../objects/keys'),
-    reEscapedHtml = require('../internals/reEscapedHtml'),
-    unescapeHtmlChar = require('../internals/unescapeHtmlChar');
-
-/**
- * The inverse of `_.escape` this method converts the HTML entities
- * `&amp;`, `&lt;`, `&gt;`, `&quot;`, and `&#39;` in `string` to their
- * corresponding characters.
- *
- * @static
- * @memberOf _
- * @category Utilities
- * @param {string} string The string to unescape.
- * @returns {string} Returns the unescaped string.
- * @example
- *
- * _.unescape('Fred, Barney &amp; Pebbles');
- * // => 'Fred, Barney & Pebbles'
- */
-function unescape(string) {
-  return string == null ? '' : String(string).replace(reEscapedHtml, unescapeHtmlChar);
-}
-
-module.exports = unescape;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/utilities/uniqueId.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/utilities/uniqueId.js
deleted file mode 100644
index cb4fd02..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/modern/utilities/uniqueId.js
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize modern exports="node" -o ./modern/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** Used to generate unique IDs */
-var idCounter = 0;
-
-/**
- * Generates a unique ID. If `prefix` is provided the ID will be appended to it.
- *
- * @static
- * @memberOf _
- * @category Utilities
- * @param {string} [prefix] The value to prefix the ID with.
- * @returns {string} Returns the unique ID.
- * @example
- *
- * _.uniqueId('contact_');
- * // => 'contact_104'
- *
- * _.uniqueId();
- * // => '105'
- */
-function uniqueId(prefix) {
-  var id = ++idCounter;
-  return String(prefix == null ? '' : prefix) + id;
-}
-
-module.exports = uniqueId;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/package.json b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/package.json
deleted file mode 100644
index bd7e51b..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/package.json
+++ /dev/null
@@ -1,83 +0,0 @@
-{
-  "name": "lodash-node",
-  "version": "2.4.1",
-  "description": "A collection of Lo-Dash methods as Node.js modules generated by lodash-cli.",
-  "homepage": "http://lodash.com/custom-builds",
-  "license": "MIT",
-  "main": "modern/index.js",
-  "keywords": [
-    "customize",
-    "functional",
-    "lodash",
-    "modules",
-    "server",
-    "util"
-  ],
-  "author": {
-    "name": "John-David Dalton",
-    "email": "john.david.dalton@gmail.com",
-    "url": "http://allyoucanleet.com/"
-  },
-  "contributors": [
-    {
-      "name": "John-David Dalton",
-      "email": "john.david.dalton@gmail.com",
-      "url": "http://allyoucanleet.com/"
-    },
-    {
-      "name": "Blaine Bublitz",
-      "email": "blaine@iceddev.com",
-      "url": "http://www.iceddev.com/"
-    },
-    {
-      "name": "Kit Cambridge",
-      "email": "github@kitcambridge.be",
-      "url": "http://kitcambridge.be/"
-    },
-    {
-      "name": "Mathias Bynens",
-      "email": "mathias@qiwi.be",
-      "url": "http://mathiasbynens.be/"
-    }
-  ],
-  "bugs": {
-    "url": "https://github.com/lodash/lodash-cli/issues"
-  },
-  "repository": {
-    "type": "git",
-    "url": "https://github.com/lodash/lodash-node.git"
-  },
-  "_id": "lodash-node@2.4.1",
-  "dist": {
-    "shasum": "ea82f7b100c733d1a42af76801e506105e2a80ec",
-    "tarball": "http://registry.npmjs.org/lodash-node/-/lodash-node-2.4.1.tgz"
-  },
-  "_from": "lodash-node@~2.4.1",
-  "_npmVersion": "1.3.14",
-  "_npmUser": {
-    "name": "jdalton",
-    "email": "john.david.dalton@gmail.com"
-  },
-  "maintainers": [
-    {
-      "name": "jdalton",
-      "email": "john.david.dalton@gmail.com"
-    },
-    {
-      "name": "kitcambridge",
-      "email": "github@kitcambridge.be"
-    },
-    {
-      "name": "mathias",
-      "email": "mathias@qiwi.be"
-    },
-    {
-      "name": "phated",
-      "email": "blaine@iceddev.com"
-    }
-  ],
-  "directories": {},
-  "_shasum": "ea82f7b100c733d1a42af76801e506105e2a80ec",
-  "_resolved": "https://registry.npmjs.org/lodash-node/-/lodash-node-2.4.1.tgz",
-  "readme": "ERROR: No README data found!"
-}
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/arrays.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/arrays.js
deleted file mode 100644
index 4290b26..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/arrays.js
+++ /dev/null
@@ -1,35 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-module.exports = {
-  'compact': require('./arrays/compact'),
-  'difference': require('./arrays/difference'),
-  'drop': require('./arrays/rest'),
-  'first': require('./arrays/first'),
-  'flatten': require('./arrays/flatten'),
-  'head': require('./arrays/first'),
-  'indexOf': require('./arrays/indexOf'),
-  'initial': require('./arrays/initial'),
-  'intersection': require('./arrays/intersection'),
-  'last': require('./arrays/last'),
-  'lastIndexOf': require('./arrays/lastIndexOf'),
-  'object': require('./arrays/zipObject'),
-  'range': require('./arrays/range'),
-  'rest': require('./arrays/rest'),
-  'sortedIndex': require('./arrays/sortedIndex'),
-  'tail': require('./arrays/rest'),
-  'take': require('./arrays/first'),
-  'union': require('./arrays/union'),
-  'uniq': require('./arrays/uniq'),
-  'unique': require('./arrays/uniq'),
-  'unzip': require('./arrays/zip'),
-  'without': require('./arrays/without'),
-  'zip': require('./arrays/zip'),
-  'zipObject': require('./arrays/zipObject')
-};
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/arrays/compact.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/arrays/compact.js
deleted file mode 100644
index f82622b..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/arrays/compact.js
+++ /dev/null
@@ -1,38 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * Creates an array with all falsey values removed. The values `false`, `null`,
- * `0`, `""`, `undefined`, and `NaN` are all falsey.
- *
- * @static
- * @memberOf _
- * @category Arrays
- * @param {Array} array The array to compact.
- * @returns {Array} Returns a new array of filtered values.
- * @example
- *
- * _.compact([0, 1, false, 2, '', 3]);
- * // => [1, 2, 3]
- */
-function compact(array) {
-  var index = -1,
-      length = array ? array.length : 0,
-      result = [];
-
-  while (++index < length) {
-    var value = array[index];
-    if (value) {
-      result.push(value);
-    }
-  }
-  return result;
-}
-
-module.exports = compact;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/arrays/difference.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/arrays/difference.js
deleted file mode 100644
index c5d16e4..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/arrays/difference.js
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseDifference = require('../internals/baseDifference'),
-    baseFlatten = require('../internals/baseFlatten');
-
-/**
- * Creates an array excluding all values of the provided arrays using strict
- * equality for comparisons, i.e. `===`.
- *
- * @static
- * @memberOf _
- * @category Arrays
- * @param {Array} array The array to process.
- * @param {...Array} [values] The arrays of values to exclude.
- * @returns {Array} Returns a new array of filtered values.
- * @example
- *
- * _.difference([1, 2, 3, 4, 5], [5, 2, 10]);
- * // => [1, 3, 4]
- */
-function difference(array) {
-  return baseDifference(array, baseFlatten(arguments, true, true, 1));
-}
-
-module.exports = difference;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/arrays/first.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/arrays/first.js
deleted file mode 100644
index 1afd4fd..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/arrays/first.js
+++ /dev/null
@@ -1,86 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback'),
-    slice = require('../internals/slice');
-
-/* Native method shortcuts for methods with the same name as other `lodash` methods */
-var nativeMax = Math.max,
-    nativeMin = Math.min;
-
-/**
- * Gets the first element or first `n` elements of an array. If a callback
- * is provided elements at the beginning of the array are returned as long
- * as the callback returns truey. The callback is bound to `thisArg` and
- * invoked with three arguments; (value, index, array).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @alias head, take
- * @category Arrays
- * @param {Array} array The array to query.
- * @param {Function|Object|number|string} [callback] The function called
- *  per element or the number of elements to return. If a property name or
- *  object is provided it will be used to create a "_.pluck" or "_.where"
- *  style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {*} Returns the first element(s) of `array`.
- * @example
- *
- * _.first([1, 2, 3]);
- * // => 1
- *
- * _.first([1, 2, 3], 2);
- * // => [1, 2]
- *
- * _.first([1, 2, 3], function(num) {
- *   return num < 3;
- * });
- * // => [1, 2]
- *
- * var characters = [
- *   { 'name': 'barney',  'blocked': true,  'employer': 'slate' },
- *   { 'name': 'fred',    'blocked': false, 'employer': 'slate' },
- *   { 'name': 'pebbles', 'blocked': true,  'employer': 'na' }
- * ];
- *
- * // using "_.pluck" callback shorthand
- * _.first(characters, 'blocked');
- * // => [{ 'name': 'barney', 'blocked': true, 'employer': 'slate' }]
- *
- * // using "_.where" callback shorthand
- * _.pluck(_.first(characters, { 'employer': 'slate' }), 'name');
- * // => ['barney', 'fred']
- */
-function first(array, callback, thisArg) {
-  var n = 0,
-      length = array ? array.length : 0;
-
-  if (typeof callback != 'number' && callback != null) {
-    var index = -1;
-    callback = createCallback(callback, thisArg, 3);
-    while (++index < length && callback(array[index], index, array)) {
-      n++;
-    }
-  } else {
-    n = callback;
-    if (n == null || thisArg) {
-      return array ? array[0] : undefined;
-    }
-  }
-  return slice(array, 0, nativeMin(nativeMax(0, n), length));
-}
-
-module.exports = first;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/arrays/flatten.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/arrays/flatten.js
deleted file mode 100644
index 03108f0..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/arrays/flatten.js
+++ /dev/null
@@ -1,56 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseFlatten = require('../internals/baseFlatten');
-
-/**
- * Flattens a nested array (the nesting can be to any depth). If `isShallow`
- * is truey, the array will only be flattened a single level. If a callback
- * is provided each element of the array is passed through the callback before
- * flattening. The callback is bound to `thisArg` and invoked with three
- * arguments; (value, index, array).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @category Arrays
- * @param {Array} array The array to flatten.
- * @param {boolean} [isShallow=false] A flag to restrict flattening to a single level.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Array} Returns a new flattened array.
- * @example
- *
- * _.flatten([1, [2], [3, [[4]]]]);
- * // => [1, 2, 3, 4];
- *
- * _.flatten([1, [2], [3, [[4]]]], true);
- * // => [1, 2, 3, [[4]]];
- *
- * var characters = [
- *   { 'name': 'barney', 'age': 30, 'pets': ['hoppy'] },
- *   { 'name': 'fred',   'age': 40, 'pets': ['baby puss', 'dino'] }
- * ];
- *
- * // using "_.pluck" callback shorthand
- * _.flatten(characters, 'pets');
- * // => ['hoppy', 'baby puss', 'dino']
- */
-function flatten(array, isShallow) {
-  return baseFlatten(array, isShallow);
-}
-
-module.exports = flatten;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/arrays/indexOf.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/arrays/indexOf.js
deleted file mode 100644
index 8a8948d..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/arrays/indexOf.js
+++ /dev/null
@@ -1,50 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseIndexOf = require('../internals/baseIndexOf'),
-    sortedIndex = require('./sortedIndex');
-
-/* Native method shortcuts for methods with the same name as other `lodash` methods */
-var nativeMax = Math.max;
-
-/**
- * Gets the index at which the first occurrence of `value` is found using
- * strict equality for comparisons, i.e. `===`. If the array is already sorted
- * providing `true` for `fromIndex` will run a faster binary search.
- *
- * @static
- * @memberOf _
- * @category Arrays
- * @param {Array} array The array to search.
- * @param {*} value The value to search for.
- * @param {boolean|number} [fromIndex=0] The index to search from or `true`
- *  to perform a binary search on a sorted array.
- * @returns {number} Returns the index of the matched value or `-1`.
- * @example
- *
- * _.indexOf([1, 2, 3, 1, 2, 3], 2);
- * // => 1
- *
- * _.indexOf([1, 2, 3, 1, 2, 3], 2, 3);
- * // => 4
- *
- * _.indexOf([1, 1, 2, 2, 3, 3], 2, true);
- * // => 2
- */
-function indexOf(array, value, fromIndex) {
-  if (typeof fromIndex == 'number') {
-    var length = array ? array.length : 0;
-    fromIndex = (fromIndex < 0 ? nativeMax(0, length + fromIndex) : fromIndex || 0);
-  } else if (fromIndex) {
-    var index = sortedIndex(array, value);
-    return array[index] === value ? index : -1;
-  }
-  return baseIndexOf(array, value, fromIndex);
-}
-
-module.exports = indexOf;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/arrays/initial.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/arrays/initial.js
deleted file mode 100644
index f36f4c1..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/arrays/initial.js
+++ /dev/null
@@ -1,82 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback'),
-    slice = require('../internals/slice');
-
-/* Native method shortcuts for methods with the same name as other `lodash` methods */
-var nativeMax = Math.max,
-    nativeMin = Math.min;
-
-/**
- * Gets all but the last element or last `n` elements of an array. If a
- * callback is provided elements at the end of the array are excluded from
- * the result as long as the callback returns truey. The callback is bound
- * to `thisArg` and invoked with three arguments; (value, index, array).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @category Arrays
- * @param {Array} array The array to query.
- * @param {Function|Object|number|string} [callback=1] The function called
- *  per element or the number of elements to exclude. If a property name or
- *  object is provided it will be used to create a "_.pluck" or "_.where"
- *  style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Array} Returns a slice of `array`.
- * @example
- *
- * _.initial([1, 2, 3]);
- * // => [1, 2]
- *
- * _.initial([1, 2, 3], 2);
- * // => [1]
- *
- * _.initial([1, 2, 3], function(num) {
- *   return num > 1;
- * });
- * // => [1]
- *
- * var characters = [
- *   { 'name': 'barney',  'blocked': false, 'employer': 'slate' },
- *   { 'name': 'fred',    'blocked': true,  'employer': 'slate' },
- *   { 'name': 'pebbles', 'blocked': true,  'employer': 'na' }
- * ];
- *
- * // using "_.pluck" callback shorthand
- * _.initial(characters, 'blocked');
- * // => [{ 'name': 'barney',  'blocked': false, 'employer': 'slate' }]
- *
- * // using "_.where" callback shorthand
- * _.pluck(_.initial(characters, { 'employer': 'na' }), 'name');
- * // => ['barney', 'fred']
- */
-function initial(array, callback, thisArg) {
-  var n = 0,
-      length = array ? array.length : 0;
-
-  if (typeof callback != 'number' && callback != null) {
-    var index = length;
-    callback = createCallback(callback, thisArg, 3);
-    while (index-- && callback(array[index], index, array)) {
-      n++;
-    }
-  } else {
-    n = (callback == null || thisArg) ? 1 : callback || n;
-  }
-  return slice(array, 0, nativeMin(nativeMax(0, length - n), length));
-}
-
-module.exports = initial;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/arrays/intersection.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/arrays/intersection.js
deleted file mode 100644
index 71a01d1..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/arrays/intersection.js
+++ /dev/null
@@ -1,60 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseIndexOf = require('../internals/baseIndexOf'),
-    isArguments = require('../objects/isArguments'),
-    isArray = require('../objects/isArray');
-
-/**
- * Creates an array of unique values present in all provided arrays using
- * strict equality for comparisons, i.e. `===`.
- *
- * @static
- * @memberOf _
- * @category Arrays
- * @param {...Array} [array] The arrays to inspect.
- * @returns {Array} Returns an array of shared values.
- * @example
- *
- * _.intersection([1, 2, 3], [5, 2, 1, 4], [2, 1]);
- * // => [1, 2]
- */
-function intersection() {
-  var args = [],
-      argsIndex = -1,
-      argsLength = arguments.length;
-
-  while (++argsIndex < argsLength) {
-    var value = arguments[argsIndex];
-     if (isArray(value) || isArguments(value)) {
-       args.push(value);
-     }
-  }
-  var array = args[0],
-      index = -1,
-      indexOf = baseIndexOf,
-      length = array ? array.length : 0,
-      result = [];
-
-  outer:
-  while (++index < length) {
-    value = array[index];
-    if (indexOf(result, value) < 0) {
-      var argsIndex = argsLength;
-      while (--argsIndex) {
-        if (indexOf(args[argsIndex], value) < 0) {
-          continue outer;
-        }
-      }
-      result.push(value);
-    }
-  }
-  return result;
-}
-
-module.exports = intersection;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/arrays/last.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/arrays/last.js
deleted file mode 100644
index ba418b7..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/arrays/last.js
+++ /dev/null
@@ -1,84 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback'),
-    slice = require('../internals/slice');
-
-/* Native method shortcuts for methods with the same name as other `lodash` methods */
-var nativeMax = Math.max;
-
-/**
- * Gets the last element or last `n` elements of an array. If a callback is
- * provided elements at the end of the array are returned as long as the
- * callback returns truey. The callback is bound to `thisArg` and invoked
- * with three arguments; (value, index, array).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @category Arrays
- * @param {Array} array The array to query.
- * @param {Function|Object|number|string} [callback] The function called
- *  per element or the number of elements to return. If a property name or
- *  object is provided it will be used to create a "_.pluck" or "_.where"
- *  style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {*} Returns the last element(s) of `array`.
- * @example
- *
- * _.last([1, 2, 3]);
- * // => 3
- *
- * _.last([1, 2, 3], 2);
- * // => [2, 3]
- *
- * _.last([1, 2, 3], function(num) {
- *   return num > 1;
- * });
- * // => [2, 3]
- *
- * var characters = [
- *   { 'name': 'barney',  'blocked': false, 'employer': 'slate' },
- *   { 'name': 'fred',    'blocked': true,  'employer': 'slate' },
- *   { 'name': 'pebbles', 'blocked': true,  'employer': 'na' }
- * ];
- *
- * // using "_.pluck" callback shorthand
- * _.pluck(_.last(characters, 'blocked'), 'name');
- * // => ['fred', 'pebbles']
- *
- * // using "_.where" callback shorthand
- * _.last(characters, { 'employer': 'na' });
- * // => [{ 'name': 'pebbles', 'blocked': true, 'employer': 'na' }]
- */
-function last(array, callback, thisArg) {
-  var n = 0,
-      length = array ? array.length : 0;
-
-  if (typeof callback != 'number' && callback != null) {
-    var index = length;
-    callback = createCallback(callback, thisArg, 3);
-    while (index-- && callback(array[index], index, array)) {
-      n++;
-    }
-  } else {
-    n = callback;
-    if (n == null || thisArg) {
-      return array ? array[length - 1] : undefined;
-    }
-  }
-  return slice(array, nativeMax(0, length - n));
-}
-
-module.exports = last;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/arrays/lastIndexOf.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/arrays/lastIndexOf.js
deleted file mode 100644
index e791147..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/arrays/lastIndexOf.js
+++ /dev/null
@@ -1,54 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/* Native method shortcuts for methods with the same name as other `lodash` methods */
-var nativeMax = Math.max,
-    nativeMin = Math.min;
-
-/**
- * Gets the index at which the last occurrence of `value` is found using strict
- * equality for comparisons, i.e. `===`. If `fromIndex` is negative, it is used
- * as the offset from the end of the collection.
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @category Arrays
- * @param {Array} array The array to search.
- * @param {*} value The value to search for.
- * @param {number} [fromIndex=array.length-1] The index to search from.
- * @returns {number} Returns the index of the matched value or `-1`.
- * @example
- *
- * _.lastIndexOf([1, 2, 3, 1, 2, 3], 2);
- * // => 4
- *
- * _.lastIndexOf([1, 2, 3, 1, 2, 3], 2, 3);
- * // => 1
- */
-function lastIndexOf(array, value, fromIndex) {
-  var index = array ? array.length : 0;
-  if (typeof fromIndex == 'number') {
-    index = (fromIndex < 0 ? nativeMax(0, index + fromIndex) : nativeMin(fromIndex, index - 1)) + 1;
-  }
-  while (index--) {
-    if (array[index] === value) {
-      return index;
-    }
-  }
-  return -1;
-}
-
-module.exports = lastIndexOf;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/arrays/range.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/arrays/range.js
deleted file mode 100644
index 0075159..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/arrays/range.js
+++ /dev/null
@@ -1,69 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** Native method shortcuts */
-var ceil = Math.ceil;
-
-/* Native method shortcuts for methods with the same name as other `lodash` methods */
-var nativeMax = Math.max;
-
-/**
- * Creates an array of numbers (positive and/or negative) progressing from
- * `start` up to but not including `end`. If `start` is less than `stop` a
- * zero-length range is created unless a negative `step` is specified.
- *
- * @static
- * @memberOf _
- * @category Arrays
- * @param {number} [start=0] The start of the range.
- * @param {number} end The end of the range.
- * @param {number} [step=1] The value to increment or decrement by.
- * @returns {Array} Returns a new range array.
- * @example
- *
- * _.range(4);
- * // => [0, 1, 2, 3]
- *
- * _.range(1, 5);
- * // => [1, 2, 3, 4]
- *
- * _.range(0, 20, 5);
- * // => [0, 5, 10, 15]
- *
- * _.range(0, -4, -1);
- * // => [0, -1, -2, -3]
- *
- * _.range(1, 4, 0);
- * // => [1, 1, 1]
- *
- * _.range(0);
- * // => []
- */
-function range(start, end, step) {
-  start = +start || 0;
-  step =  (+step || 1);
-
-  if (end == null) {
-    end = start;
-    start = 0;
-  }
-  // use `Array(length)` so engines like Chakra and V8 avoid slower modes
-  // http://youtu.be/XAqIpGU8ZZk#t=17m25s
-  var index = -1,
-      length = nativeMax(0, ceil((end - start) / step)),
-      result = Array(length);
-
-  while (++index < length) {
-    result[index] = start;
-    start += step;
-  }
-  return result;
-}
-
-module.exports = range;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/arrays/rest.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/arrays/rest.js
deleted file mode 100644
index 284608c..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/arrays/rest.js
+++ /dev/null
@@ -1,83 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback'),
-    slice = require('../internals/slice');
-
-/* Native method shortcuts for methods with the same name as other `lodash` methods */
-var nativeMax = Math.max;
-
-/**
- * The opposite of `_.initial` this method gets all but the first element or
- * first `n` elements of an array. If a callback function is provided elements
- * at the beginning of the array are excluded from the result as long as the
- * callback returns truey. The callback is bound to `thisArg` and invoked
- * with three arguments; (value, index, array).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @alias drop, tail
- * @category Arrays
- * @param {Array} array The array to query.
- * @param {Function|Object|number|string} [callback=1] The function called
- *  per element or the number of elements to exclude. If a property name or
- *  object is provided it will be used to create a "_.pluck" or "_.where"
- *  style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Array} Returns a slice of `array`.
- * @example
- *
- * _.rest([1, 2, 3]);
- * // => [2, 3]
- *
- * _.rest([1, 2, 3], 2);
- * // => [3]
- *
- * _.rest([1, 2, 3], function(num) {
- *   return num < 3;
- * });
- * // => [3]
- *
- * var characters = [
- *   { 'name': 'barney',  'blocked': true,  'employer': 'slate' },
- *   { 'name': 'fred',    'blocked': false,  'employer': 'slate' },
- *   { 'name': 'pebbles', 'blocked': true, 'employer': 'na' }
- * ];
- *
- * // using "_.pluck" callback shorthand
- * _.pluck(_.rest(characters, 'blocked'), 'name');
- * // => ['fred', 'pebbles']
- *
- * // using "_.where" callback shorthand
- * _.rest(characters, { 'employer': 'slate' });
- * // => [{ 'name': 'pebbles', 'blocked': true, 'employer': 'na' }]
- */
-function rest(array, callback, thisArg) {
-  if (typeof callback != 'number' && callback != null) {
-    var n = 0,
-        index = -1,
-        length = array ? array.length : 0;
-
-    callback = createCallback(callback, thisArg, 3);
-    while (++index < length && callback(array[index], index, array)) {
-      n++;
-    }
-  } else {
-    n = (callback == null || thisArg) ? 1 : nativeMax(0, callback);
-  }
-  return slice(array, n);
-}
-
-module.exports = rest;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/arrays/sortedIndex.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/arrays/sortedIndex.js
deleted file mode 100644
index 2358d08..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/arrays/sortedIndex.js
+++ /dev/null
@@ -1,77 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback'),
-    identity = require('../utilities/identity');
-
-/**
- * Uses a binary search to determine the smallest index at which a value
- * should be inserted into a given sorted array in order to maintain the sort
- * order of the array. If a callback is provided it will be executed for
- * `value` and each element of `array` to compute their sort ranking. The
- * callback is bound to `thisArg` and invoked with one argument; (value).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @category Arrays
- * @param {Array} array The array to inspect.
- * @param {*} value The value to evaluate.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {number} Returns the index at which `value` should be inserted
- *  into `array`.
- * @example
- *
- * _.sortedIndex([20, 30, 50], 40);
- * // => 2
- *
- * // using "_.pluck" callback shorthand
- * _.sortedIndex([{ 'x': 20 }, { 'x': 30 }, { 'x': 50 }], { 'x': 40 }, 'x');
- * // => 2
- *
- * var dict = {
- *   'wordToNumber': { 'twenty': 20, 'thirty': 30, 'fourty': 40, 'fifty': 50 }
- * };
- *
- * _.sortedIndex(['twenty', 'thirty', 'fifty'], 'fourty', function(word) {
- *   return dict.wordToNumber[word];
- * });
- * // => 2
- *
- * _.sortedIndex(['twenty', 'thirty', 'fifty'], 'fourty', function(word) {
- *   return this.wordToNumber[word];
- * }, dict);
- * // => 2
- */
-function sortedIndex(array, value, callback, thisArg) {
-  var low = 0,
-      high = array ? array.length : low;
-
-  // explicitly reference `identity` for better inlining in Firefox
-  callback = callback ? createCallback(callback, thisArg, 1) : identity;
-  value = callback(value);
-
-  while (low < high) {
-    var mid = (low + high) >>> 1;
-    (callback(array[mid]) < value)
-      ? low = mid + 1
-      : high = mid;
-  }
-  return low;
-}
-
-module.exports = sortedIndex;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/arrays/union.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/arrays/union.js
deleted file mode 100644
index 5fe15c6..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/arrays/union.js
+++ /dev/null
@@ -1,30 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseFlatten = require('../internals/baseFlatten'),
-    baseUniq = require('../internals/baseUniq');
-
-/**
- * Creates an array of unique values, in order, of the provided arrays using
- * strict equality for comparisons, i.e. `===`.
- *
- * @static
- * @memberOf _
- * @category Arrays
- * @param {...Array} [array] The arrays to inspect.
- * @returns {Array} Returns an array of combined values.
- * @example
- *
- * _.union([1, 2, 3], [5, 2, 1, 4], [2, 1]);
- * // => [1, 2, 3, 5, 4]
- */
-function union() {
-  return baseUniq(baseFlatten(arguments, true, true));
-}
-
-module.exports = union;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/arrays/uniq.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/arrays/uniq.js
deleted file mode 100644
index e403ea1..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/arrays/uniq.js
+++ /dev/null
@@ -1,69 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseUniq = require('../internals/baseUniq'),
-    createCallback = require('../functions/createCallback');
-
-/**
- * Creates a duplicate-value-free version of an array using strict equality
- * for comparisons, i.e. `===`. If the array is sorted, providing
- * `true` for `isSorted` will use a faster algorithm. If a callback is provided
- * each element of `array` is passed through the callback before uniqueness
- * is computed. The callback is bound to `thisArg` and invoked with three
- * arguments; (value, index, array).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @alias unique
- * @category Arrays
- * @param {Array} array The array to process.
- * @param {boolean} [isSorted=false] A flag to indicate that `array` is sorted.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Array} Returns a duplicate-value-free array.
- * @example
- *
- * _.uniq([1, 2, 1, 3, 1]);
- * // => [1, 2, 3]
- *
- * _.uniq([1, 1, 2, 2, 3], true);
- * // => [1, 2, 3]
- *
- * _.uniq(['A', 'b', 'C', 'a', 'B', 'c'], function(letter) { return letter.toLowerCase(); });
- * // => ['A', 'b', 'C']
- *
- * _.uniq([1, 2.5, 3, 1.5, 2, 3.5], function(num) { return this.floor(num); }, Math);
- * // => [1, 2.5, 3]
- *
- * // using "_.pluck" callback shorthand
- * _.uniq([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');
- * // => [{ 'x': 1 }, { 'x': 2 }]
- */
-function uniq(array, isSorted, callback, thisArg) {
-  // juggle arguments
-  if (typeof isSorted != 'boolean' && isSorted != null) {
-    thisArg = callback;
-    callback = (typeof isSorted != 'function' && thisArg && thisArg[isSorted] === array) ? null : isSorted;
-    isSorted = false;
-  }
-  if (callback != null) {
-    callback = createCallback(callback, thisArg, 3);
-  }
-  return baseUniq(array, isSorted, callback);
-}
-
-module.exports = uniq;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/arrays/without.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/arrays/without.js
deleted file mode 100644
index b42b19d..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/arrays/without.js
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseDifference = require('../internals/baseDifference'),
-    slice = require('../internals/slice');
-
-/**
- * Creates an array excluding all provided values using strict equality for
- * comparisons, i.e. `===`.
- *
- * @static
- * @memberOf _
- * @category Arrays
- * @param {Array} array The array to filter.
- * @param {...*} [value] The values to exclude.
- * @returns {Array} Returns a new array of filtered values.
- * @example
- *
- * _.without([1, 2, 1, 0, 3, 1, 4], 0, 1);
- * // => [2, 3, 4]
- */
-function without(array) {
-  return baseDifference(array, slice(arguments, 1));
-}
-
-module.exports = without;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/arrays/zip.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/arrays/zip.js
deleted file mode 100644
index 080e7b6..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/arrays/zip.js
+++ /dev/null
@@ -1,39 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var max = require('../collections/max'),
-    pluck = require('../collections/pluck');
-
-/**
- * Creates an array of grouped elements, the first of which contains the first
- * elements of the given arrays, the second of which contains the second
- * elements of the given arrays, and so on.
- *
- * @static
- * @memberOf _
- * @alias unzip
- * @category Arrays
- * @param {...Array} [array] Arrays to process.
- * @returns {Array} Returns a new array of grouped elements.
- * @example
- *
- * _.zip(['fred', 'barney'], [30, 40], [true, false]);
- * // => [['fred', 30, true], ['barney', 40, false]]
- */
-function zip() {
-  var index = -1,
-      length = max(pluck(arguments, 'length')),
-      result = Array(length < 0 ? 0 : length);
-
-  while (++index < length) {
-    result[index] = pluck(arguments, index);
-  }
-  return result;
-}
-
-module.exports = zip;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/arrays/zipObject.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/arrays/zipObject.js
deleted file mode 100644
index 6fbcdef..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/arrays/zipObject.js
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isArray = require('../objects/isArray');
-
-/**
- * Creates an object composed from arrays of `keys` and `values`. Provide
- * either a single two dimensional array, i.e. `[[key1, value1], [key2, value2]]`
- * or two arrays, one of `keys` and one of corresponding `values`.
- *
- * @static
- * @memberOf _
- * @alias object
- * @category Arrays
- * @param {Array} keys The array of keys.
- * @param {Array} [values=[]] The array of values.
- * @returns {Object} Returns an object composed of the given keys and
- *  corresponding values.
- * @example
- *
- * _.zipObject(['fred', 'barney'], [30, 40]);
- * // => { 'fred': 30, 'barney': 40 }
- */
-function zipObject(keys, values) {
-  var index = -1,
-      length = keys ? keys.length : 0,
-      result = {};
-
-  if (!values && length && !isArray(keys[0])) {
-    values = [];
-  }
-  while (++index < length) {
-    var key = keys[index];
-    if (values) {
-      result[key] = values[index];
-    } else if (key) {
-      result[key[0]] = key[1];
-    }
-  }
-  return result;
-}
-
-module.exports = zipObject;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/chaining.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/chaining.js
deleted file mode 100644
index 00bb0d7..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/chaining.js
+++ /dev/null
@@ -1,16 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-module.exports = {
-  'chain': require('./chaining/chain'),
-  'tap': require('./chaining/tap'),
-  'value': require('./chaining/wrapperValueOf'),
-  'wrapperChain': require('./chaining/wrapperChain'),
-  'wrapperValueOf': require('./chaining/wrapperValueOf')
-};
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/chaining/chain.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/chaining/chain.js
deleted file mode 100644
index bce59d9..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/chaining/chain.js
+++ /dev/null
@@ -1,41 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var lodashWrapper = require('../internals/lodashWrapper');
-
-/**
- * Creates a `lodash` object that wraps the given value with explicit
- * method chaining enabled.
- *
- * @static
- * @memberOf _
- * @category Chaining
- * @param {*} value The value to wrap.
- * @returns {Object} Returns the wrapper object.
- * @example
- *
- * var characters = [
- *   { 'name': 'barney',  'age': 36 },
- *   { 'name': 'fred',    'age': 40 },
- *   { 'name': 'pebbles', 'age': 1 }
- * ];
- *
- * var youngest = _.chain(characters)
- *     .sortBy('age')
- *     .map(function(chr) { return chr.name + ' is ' + chr.age; })
- *     .first()
- *     .value();
- * // => 'pebbles is 1'
- */
-function chain(value) {
-  value = new lodashWrapper(value);
-  value.__chain__ = true;
-  return value;
-}
-
-module.exports = chain;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/chaining/tap.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/chaining/tap.js
deleted file mode 100644
index 4f46c86..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/chaining/tap.js
+++ /dev/null
@@ -1,35 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * Invokes `interceptor` with the `value` as the first argument and then
- * returns `value`. The purpose of this method is to "tap into" a method
- * chain in order to perform operations on intermediate results within
- * the chain.
- *
- * @static
- * @memberOf _
- * @category Chaining
- * @param {*} value The value to provide to `interceptor`.
- * @param {Function} interceptor The function to invoke.
- * @returns {*} Returns `value`.
- * @example
- *
- * _([1, 2, 3, 4])
- *  .tap(function(array) { array.pop(); })
- *  .reverse()
- *  .value();
- * // => [3, 2, 1]
- */
-function tap(value, interceptor) {
-  interceptor(value);
-  return value;
-}
-
-module.exports = tap;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/chaining/wrapperChain.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/chaining/wrapperChain.js
deleted file mode 100644
index 7a88080..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/chaining/wrapperChain.js
+++ /dev/null
@@ -1,40 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * Enables explicit method chaining on the wrapper object.
- *
- * @name chain
- * @memberOf _
- * @category Chaining
- * @returns {*} Returns the wrapper object.
- * @example
- *
- * var characters = [
- *   { 'name': 'barney', 'age': 36 },
- *   { 'name': 'fred',   'age': 40 }
- * ];
- *
- * // without explicit chaining
- * _(characters).first();
- * // => { 'name': 'barney', 'age': 36 }
- *
- * // with explicit chaining
- * _(characters).chain()
- *   .first()
- *   .pick('age')
- *   .value();
- * // => { 'age': 36 }
- */
-function wrapperChain() {
-  this.__chain__ = true;
-  return this;
-}
-
-module.exports = wrapperChain;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/chaining/wrapperValueOf.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/chaining/wrapperValueOf.js
deleted file mode 100644
index 541a489..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/chaining/wrapperValueOf.js
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var forEach = require('../collections/forEach'),
-    support = require('../support');
-
-/**
- * Extracts the wrapped value.
- *
- * @name valueOf
- * @memberOf _
- * @alias value
- * @category Chaining
- * @returns {*} Returns the wrapped value.
- * @example
- *
- * _([1, 2, 3]).valueOf();
- * // => [1, 2, 3]
- */
-function wrapperValueOf() {
-  return this.__wrapped__;
-}
-
-module.exports = wrapperValueOf;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/collections.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/collections.js
deleted file mode 100644
index 83220bc..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/collections.js
+++ /dev/null
@@ -1,47 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-module.exports = {
-  'all': require('./collections/every'),
-  'any': require('./collections/some'),
-  'collect': require('./collections/map'),
-  'contains': require('./collections/contains'),
-  'countBy': require('./collections/countBy'),
-  'detect': require('./collections/find'),
-  'each': require('./collections/forEach'),
-  'eachRight': require('./collections/forEachRight'),
-  'every': require('./collections/every'),
-  'filter': require('./collections/filter'),
-  'find': require('./collections/find'),
-  'findWhere': require('./collections/findWhere'),
-  'foldl': require('./collections/reduce'),
-  'foldr': require('./collections/reduceRight'),
-  'forEach': require('./collections/forEach'),
-  'forEachRight': require('./collections/forEachRight'),
-  'groupBy': require('./collections/groupBy'),
-  'include': require('./collections/contains'),
-  'indexBy': require('./collections/indexBy'),
-  'inject': require('./collections/reduce'),
-  'invoke': require('./collections/invoke'),
-  'map': require('./collections/map'),
-  'max': require('./collections/max'),
-  'min': require('./collections/min'),
-  'pluck': require('./collections/pluck'),
-  'reduce': require('./collections/reduce'),
-  'reduceRight': require('./collections/reduceRight'),
-  'reject': require('./collections/reject'),
-  'sample': require('./collections/sample'),
-  'select': require('./collections/filter'),
-  'shuffle': require('./collections/shuffle'),
-  'size': require('./collections/size'),
-  'some': require('./collections/some'),
-  'sortBy': require('./collections/sortBy'),
-  'toArray': require('./collections/toArray'),
-  'where': require('./collections/where')
-};
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/collections/contains.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/collections/contains.js
deleted file mode 100644
index 72a78b6..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/collections/contains.js
+++ /dev/null
@@ -1,54 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseIndexOf = require('../internals/baseIndexOf'),
-    forOwn = require('../objects/forOwn'),
-    indicatorObject = require('../internals/indicatorObject');
-
-/**
- * Checks if a given value is present in a collection using strict equality
- * for comparisons, i.e. `===`. If `fromIndex` is negative, it is used as the
- * offset from the end of the collection.
- *
- * @static
- * @memberOf _
- * @alias include
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {*} target The value to check for.
- * @param {number} [fromIndex=0] The index to search from.
- * @returns {boolean} Returns `true` if the `target` element is found, else `false`.
- * @example
- *
- * _.contains([1, 2, 3], 1);
- * // => true
- *
- * _.contains([1, 2, 3], 1, 2);
- * // => false
- *
- * _.contains({ 'name': 'fred', 'age': 40 }, 'fred');
- * // => true
- *
- * _.contains('pebbles', 'eb');
- * // => true
- */
-function contains(collection, target) {
-  var indexOf = baseIndexOf,
-      length = collection ? collection.length : 0,
-      result = false;
-  if (length && typeof length == 'number') {
-    result = indexOf(collection, target) > -1;
-  } else {
-    forOwn(collection, function(value) {
-      return (result = value === target) && indicatorObject;
-    });
-  }
-  return result;
-}
-
-module.exports = contains;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/collections/countBy.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/collections/countBy.js
deleted file mode 100644
index 6791bd2..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/collections/countBy.js
+++ /dev/null
@@ -1,55 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createAggregator = require('../internals/createAggregator');
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Native method shortcuts */
-var hasOwnProperty = objectProto.hasOwnProperty;
-
-/**
- * Creates an object composed of keys generated from the results of running
- * each element of `collection` through the callback. The corresponding value
- * of each key is the number of times the key was returned by the callback.
- * The callback is bound to `thisArg` and invoked with three arguments;
- * (value, index|key, collection).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Object} Returns the composed aggregate object.
- * @example
- *
- * _.countBy([4.3, 6.1, 6.4], function(num) { return Math.floor(num); });
- * // => { '4': 1, '6': 2 }
- *
- * _.countBy([4.3, 6.1, 6.4], function(num) { return this.floor(num); }, Math);
- * // => { '4': 1, '6': 2 }
- *
- * _.countBy(['one', 'two', 'three'], 'length');
- * // => { '3': 2, '5': 1 }
- */
-var countBy = createAggregator(function(result, value, key) {
-  (hasOwnProperty.call(result, key) ? result[key]++ : result[key] = 1);
-});
-
-module.exports = countBy;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/collections/every.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/collections/every.js
deleted file mode 100644
index aa09512..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/collections/every.js
+++ /dev/null
@@ -1,75 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback'),
-    forOwn = require('../objects/forOwn'),
-    indicatorObject = require('../internals/indicatorObject');
-
-/**
- * Checks if the given callback returns truey value for **all** elements of
- * a collection. The callback is bound to `thisArg` and invoked with three
- * arguments; (value, index|key, collection).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @alias all
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {boolean} Returns `true` if all elements passed the callback check,
- *  else `false`.
- * @example
- *
- * _.every([true, 1, null, 'yes']);
- * // => false
- *
- * var characters = [
- *   { 'name': 'barney', 'age': 36 },
- *   { 'name': 'fred',   'age': 40 }
- * ];
- *
- * // using "_.pluck" callback shorthand
- * _.every(characters, 'age');
- * // => true
- *
- * // using "_.where" callback shorthand
- * _.every(characters, { 'age': 36 });
- * // => false
- */
-function every(collection, callback, thisArg) {
-  var result = true;
-  callback = createCallback(callback, thisArg, 3);
-
-  var index = -1,
-      length = collection ? collection.length : 0;
-
-  if (typeof length == 'number') {
-    while (++index < length) {
-      if (!(result = !!callback(collection[index], index, collection))) {
-        break;
-      }
-    }
-  } else {
-    forOwn(collection, function(value, index, collection) {
-      return !(result = !!callback(value, index, collection)) && indicatorObject;
-    });
-  }
-  return result;
-}
-
-module.exports = every;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/collections/filter.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/collections/filter.js
deleted file mode 100644
index 5b96f19..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/collections/filter.js
+++ /dev/null
@@ -1,76 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback'),
-    forOwn = require('../objects/forOwn');
-
-/**
- * Iterates over elements of a collection, returning an array of all elements
- * the callback returns truey for. The callback is bound to `thisArg` and
- * invoked with three arguments; (value, index|key, collection).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @alias select
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Array} Returns a new array of elements that passed the callback check.
- * @example
- *
- * var evens = _.filter([1, 2, 3, 4, 5, 6], function(num) { return num % 2 == 0; });
- * // => [2, 4, 6]
- *
- * var characters = [
- *   { 'name': 'barney', 'age': 36, 'blocked': false },
- *   { 'name': 'fred',   'age': 40, 'blocked': true }
- * ];
- *
- * // using "_.pluck" callback shorthand
- * _.filter(characters, 'blocked');
- * // => [{ 'name': 'fred', 'age': 40, 'blocked': true }]
- *
- * // using "_.where" callback shorthand
- * _.filter(characters, { 'age': 36 });
- * // => [{ 'name': 'barney', 'age': 36, 'blocked': false }]
- */
-function filter(collection, callback, thisArg) {
-  var result = [];
-  callback = createCallback(callback, thisArg, 3);
-
-  var index = -1,
-      length = collection ? collection.length : 0;
-
-  if (typeof length == 'number') {
-    while (++index < length) {
-      var value = collection[index];
-      if (callback(value, index, collection)) {
-        result.push(value);
-      }
-    }
-  } else {
-    forOwn(collection, function(value, index, collection) {
-      if (callback(value, index, collection)) {
-        result.push(value);
-      }
-    });
-  }
-  return result;
-}
-
-module.exports = filter;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/collections/find.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/collections/find.js
deleted file mode 100644
index beae5be..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/collections/find.js
+++ /dev/null
@@ -1,81 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback'),
-    forOwn = require('../objects/forOwn'),
-    indicatorObject = require('../internals/indicatorObject');
-
-/**
- * Iterates over elements of a collection, returning the first element that
- * the callback returns truey for. The callback is bound to `thisArg` and
- * invoked with three arguments; (value, index|key, collection).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @alias detect, findWhere
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {*} Returns the found element, else `undefined`.
- * @example
- *
- * var characters = [
- *   { 'name': 'barney',  'age': 36, 'blocked': false },
- *   { 'name': 'fred',    'age': 40, 'blocked': true },
- *   { 'name': 'pebbles', 'age': 1,  'blocked': false }
- * ];
- *
- * _.find(characters, function(chr) {
- *   return chr.age < 40;
- * });
- * // => { 'name': 'barney', 'age': 36, 'blocked': false }
- *
- * // using "_.where" callback shorthand
- * _.find(characters, { 'age': 1 });
- * // =>  { 'name': 'pebbles', 'age': 1, 'blocked': false }
- *
- * // using "_.pluck" callback shorthand
- * _.find(characters, 'blocked');
- * // => { 'name': 'fred', 'age': 40, 'blocked': true }
- */
-function find(collection, callback, thisArg) {
-  callback = createCallback(callback, thisArg, 3);
-
-  var index = -1,
-      length = collection ? collection.length : 0;
-
-  if (typeof length == 'number') {
-    while (++index < length) {
-      var value = collection[index];
-      if (callback(value, index, collection)) {
-        return value;
-      }
-    }
-  } else {
-    var result;
-    forOwn(collection, function(value, index, collection) {
-      if (callback(value, index, collection)) {
-        result = value;
-        return indicatorObject;
-      }
-    });
-    return result;
-  }
-}
-
-module.exports = find;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/collections/findWhere.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/collections/findWhere.js
deleted file mode 100644
index 5ef75f6..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/collections/findWhere.js
+++ /dev/null
@@ -1,38 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var where = require('./where');
-
-/**
- * Examines each element in a `collection`, returning the first that
- * has the given properties. When checking `properties`, this method
- * performs a deep comparison between values to determine if they are
- * equivalent to each other.
- *
- * @static
- * @memberOf _
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Object} properties The object of property values to filter by.
- * @returns {*} Returns the found element, else `undefined`.
- * @example
- *
- * var food = [
- *   { 'name': 'apple',  'organic': false, 'type': 'fruit' },
- *   { 'name': 'banana', 'organic': true,  'type': 'fruit' },
- *   { 'name': 'beet',   'organic': false, 'type': 'vegetable' }
- * ];
- *
- * _.findWhere(food, { 'type': 'vegetable' });
- * // => { 'name': 'beet', 'organic': false, 'type': 'vegetable' }
- */
-function findWhere(object, properties) {
-  return where(object, properties, true);
-}
-
-module.exports = findWhere;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/collections/forEach.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/collections/forEach.js
deleted file mode 100644
index 8e1e2be..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/collections/forEach.js
+++ /dev/null
@@ -1,55 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseCreateCallback = require('../internals/baseCreateCallback'),
-    forOwn = require('../objects/forOwn'),
-    indicatorObject = require('../internals/indicatorObject');
-
-/**
- * Iterates over elements of a collection, executing the callback for each
- * element. The callback is bound to `thisArg` and invoked with three arguments;
- * (value, index|key, collection). Callbacks may exit iteration early by
- * explicitly returning `false`.
- *
- * Note: As with other "Collections" methods, objects with a `length` property
- * are iterated like arrays. To avoid this behavior `_.forIn` or `_.forOwn`
- * may be used for object iteration.
- *
- * @static
- * @memberOf _
- * @alias each
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function} [callback=identity] The function called per iteration.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Array|Object|string} Returns `collection`.
- * @example
- *
- * _([1, 2, 3]).forEach(function(num) { console.log(num); }).join(',');
- * // => logs each number and returns '1,2,3'
- *
- * _.forEach({ 'one': 1, 'two': 2, 'three': 3 }, function(num) { console.log(num); });
- * // => logs each number and returns the object (property order is not guaranteed across environments)
- */
-function forEach(collection, callback, thisArg) {
-  var index = -1,
-      length = collection ? collection.length : 0;
-
-  callback = callback && typeof thisArg == 'undefined' ? callback : baseCreateCallback(callback, thisArg, 3);
-  if (typeof length == 'number') {
-    while (++index < length) {
-      if (callback(collection[index], index, collection) === indicatorObject) {
-        break;
-      }
-    }
-  } else {
-    forOwn(collection, callback);
-  }
-}
-
-module.exports = forEach;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/collections/forEachRight.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/collections/forEachRight.js
deleted file mode 100644
index 1cf6173..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/collections/forEachRight.js
+++ /dev/null
@@ -1,51 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseCreateCallback = require('../internals/baseCreateCallback'),
-    forOwn = require('../objects/forOwn'),
-    indicatorObject = require('../internals/indicatorObject'),
-    isArray = require('../objects/isArray'),
-    isString = require('../objects/isString'),
-    keys = require('../objects/keys');
-
-/**
- * This method is like `_.forEach` except that it iterates over elements
- * of a `collection` from right to left.
- *
- * @static
- * @memberOf _
- * @alias eachRight
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function} [callback=identity] The function called per iteration.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Array|Object|string} Returns `collection`.
- * @example
- *
- * _([1, 2, 3]).forEachRight(function(num) { console.log(num); }).join(',');
- * // => logs each number from right to left and returns '3,2,1'
- */
-function forEachRight(collection, callback) {
-  var length = collection ? collection.length : 0;
-  if (typeof length == 'number') {
-    while (length--) {
-      if (callback(collection[length], length, collection) === false) {
-        break;
-      }
-    }
-  } else {
-    var props = keys(collection);
-    length = props.length;
-    forOwn(collection, function(value, key, collection) {
-      key = props ? props[--length] : --length;
-      return callback(collection[key], key, collection) === false && indicatorObject;
-    });
-  }
-}
-
-module.exports = forEachRight;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/collections/groupBy.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/collections/groupBy.js
deleted file mode 100644
index 739312c..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/collections/groupBy.js
+++ /dev/null
@@ -1,56 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createAggregator = require('../internals/createAggregator');
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Native method shortcuts */
-var hasOwnProperty = objectProto.hasOwnProperty;
-
-/**
- * Creates an object composed of keys generated from the results of running
- * each element of a collection through the callback. The corresponding value
- * of each key is an array of the elements responsible for generating the key.
- * The callback is bound to `thisArg` and invoked with three arguments;
- * (value, index|key, collection).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`
- *
- * @static
- * @memberOf _
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Object} Returns the composed aggregate object.
- * @example
- *
- * _.groupBy([4.2, 6.1, 6.4], function(num) { return Math.floor(num); });
- * // => { '4': [4.2], '6': [6.1, 6.4] }
- *
- * _.groupBy([4.2, 6.1, 6.4], function(num) { return this.floor(num); }, Math);
- * // => { '4': [4.2], '6': [6.1, 6.4] }
- *
- * // using "_.pluck" callback shorthand
- * _.groupBy(['one', 'two', 'three'], 'length');
- * // => { '3': ['one', 'two'], '5': ['three'] }
- */
-var groupBy = createAggregator(function(result, value, key) {
-  (hasOwnProperty.call(result, key) ? result[key] : result[key] = []).push(value);
-});
-
-module.exports = groupBy;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/collections/indexBy.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/collections/indexBy.js
deleted file mode 100644
index 795256f..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/collections/indexBy.js
+++ /dev/null
@@ -1,54 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createAggregator = require('../internals/createAggregator');
-
-/**
- * Creates an object composed of keys generated from the results of running
- * each element of the collection through the given callback. The corresponding
- * value of each key is the last element responsible for generating the key.
- * The callback is bound to `thisArg` and invoked with three arguments;
- * (value, index|key, collection).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Object} Returns the composed aggregate object.
- * @example
- *
- * var keys = [
- *   { 'dir': 'left', 'code': 97 },
- *   { 'dir': 'right', 'code': 100 }
- * ];
- *
- * _.indexBy(keys, 'dir');
- * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }
- *
- * _.indexBy(keys, function(key) { return String.fromCharCode(key.code); });
- * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }
- *
- * _.indexBy(characters, function(key) { this.fromCharCode(key.code); }, String);
- * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }
- */
-var indexBy = createAggregator(function(result, value, key) {
-  result[key] = value;
-});
-
-module.exports = indexBy;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/collections/invoke.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/collections/invoke.js
deleted file mode 100644
index 3f36076..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/collections/invoke.js
+++ /dev/null
@@ -1,47 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var forEach = require('./forEach'),
-    slice = require('../internals/slice');
-
-/**
- * Invokes the method named by `methodName` on each element in the `collection`
- * returning an array of the results of each invoked method. Additional arguments
- * will be provided to each invoked method. If `methodName` is a function it
- * will be invoked for, and `this` bound to, each element in the `collection`.
- *
- * @static
- * @memberOf _
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function|string} methodName The name of the method to invoke or
- *  the function invoked per iteration.
- * @param {...*} [arg] Arguments to invoke the method with.
- * @returns {Array} Returns a new array of the results of each invoked method.
- * @example
- *
- * _.invoke([[5, 1, 7], [3, 2, 1]], 'sort');
- * // => [[1, 5, 7], [1, 2, 3]]
- *
- * _.invoke([123, 456], String.prototype.split, '');
- * // => [['1', '2', '3'], ['4', '5', '6']]
- */
-function invoke(collection, methodName) {
-  var args = slice(arguments, 2),
-      index = -1,
-      isFunc = typeof methodName == 'function',
-      length = collection ? collection.length : 0,
-      result = Array(typeof length == 'number' ? length : 0);
-
-  forEach(collection, function(value) {
-    result[++index] = (isFunc ? methodName : value[methodName]).apply(value, args);
-  });
-  return result;
-}
-
-module.exports = invoke;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/collections/map.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/collections/map.js
deleted file mode 100644
index 85b4469..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/collections/map.js
+++ /dev/null
@@ -1,70 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback'),
-    forOwn = require('../objects/forOwn');
-
-/**
- * Creates an array of values by running each element in the collection
- * through the callback. The callback is bound to `thisArg` and invoked with
- * three arguments; (value, index|key, collection).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @alias collect
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Array} Returns a new array of the results of each `callback` execution.
- * @example
- *
- * _.map([1, 2, 3], function(num) { return num * 3; });
- * // => [3, 6, 9]
- *
- * _.map({ 'one': 1, 'two': 2, 'three': 3 }, function(num) { return num * 3; });
- * // => [3, 6, 9] (property order is not guaranteed across environments)
- *
- * var characters = [
- *   { 'name': 'barney', 'age': 36 },
- *   { 'name': 'fred',   'age': 40 }
- * ];
- *
- * // using "_.pluck" callback shorthand
- * _.map(characters, 'name');
- * // => ['barney', 'fred']
- */
-function map(collection, callback, thisArg) {
-  var index = -1,
-      length = collection ? collection.length : 0;
-
-  callback = createCallback(callback, thisArg, 3);
-  if (typeof length == 'number') {
-    var result = Array(length);
-    while (++index < length) {
-      result[index] = callback(collection[index], index, collection);
-    }
-  } else {
-    result = [];
-    forOwn(collection, function(value, key, collection) {
-      result[++index] = callback(value, key, collection);
-    });
-  }
-  return result;
-}
-
-module.exports = map;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/collections/max.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/collections/max.js
deleted file mode 100644
index 576e634..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/collections/max.js
+++ /dev/null
@@ -1,86 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback'),
-    forEach = require('./forEach'),
-    forOwn = require('../objects/forOwn');
-
-/**
- * Retrieves the maximum value of a collection. If the collection is empty or
- * falsey `-Infinity` is returned. If a callback is provided it will be executed
- * for each value in the collection to generate the criterion by which the value
- * is ranked. The callback is bound to `thisArg` and invoked with three
- * arguments; (value, index, collection).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {*} Returns the maximum value.
- * @example
- *
- * _.max([4, 2, 8, 6]);
- * // => 8
- *
- * var characters = [
- *   { 'name': 'barney', 'age': 36 },
- *   { 'name': 'fred',   'age': 40 }
- * ];
- *
- * _.max(characters, function(chr) { return chr.age; });
- * // => { 'name': 'fred', 'age': 40 };
- *
- * // using "_.pluck" callback shorthand
- * _.max(characters, 'age');
- * // => { 'name': 'fred', 'age': 40 };
- */
-function max(collection, callback, thisArg) {
-  var computed = -Infinity,
-      result = computed;
-
-  // allows working with functions like `_.map` without using
-  // their `index` argument as a callback
-  if (typeof callback != 'function' && thisArg && thisArg[callback] === collection) {
-    callback = null;
-  }
-  var index = -1,
-      length = collection ? collection.length : 0;
-
-  if (callback == null && typeof length == 'number') {
-    while (++index < length) {
-      var value = collection[index];
-      if (value > result) {
-        result = value;
-      }
-    }
-  } else {
-    callback = createCallback(callback, thisArg, 3);
-
-    forEach(collection, function(value, index, collection) {
-      var current = callback(value, index, collection);
-      if (current > computed) {
-        computed = current;
-        result = value;
-      }
-    });
-  }
-  return result;
-}
-
-module.exports = max;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/collections/min.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/collections/min.js
deleted file mode 100644
index 21ef973..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/collections/min.js
+++ /dev/null
@@ -1,86 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback'),
-    forEach = require('./forEach'),
-    forOwn = require('../objects/forOwn');
-
-/**
- * Retrieves the minimum value of a collection. If the collection is empty or
- * falsey `Infinity` is returned. If a callback is provided it will be executed
- * for each value in the collection to generate the criterion by which the value
- * is ranked. The callback is bound to `thisArg` and invoked with three
- * arguments; (value, index, collection).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {*} Returns the minimum value.
- * @example
- *
- * _.min([4, 2, 8, 6]);
- * // => 2
- *
- * var characters = [
- *   { 'name': 'barney', 'age': 36 },
- *   { 'name': 'fred',   'age': 40 }
- * ];
- *
- * _.min(characters, function(chr) { return chr.age; });
- * // => { 'name': 'barney', 'age': 36 };
- *
- * // using "_.pluck" callback shorthand
- * _.min(characters, 'age');
- * // => { 'name': 'barney', 'age': 36 };
- */
-function min(collection, callback, thisArg) {
-  var computed = Infinity,
-      result = computed;
-
-  // allows working with functions like `_.map` without using
-  // their `index` argument as a callback
-  if (typeof callback != 'function' && thisArg && thisArg[callback] === collection) {
-    callback = null;
-  }
-  var index = -1,
-      length = collection ? collection.length : 0;
-
-  if (callback == null && typeof length == 'number') {
-    while (++index < length) {
-      var value = collection[index];
-      if (value < result) {
-        result = value;
-      }
-    }
-  } else {
-    callback = createCallback(callback, thisArg, 3);
-
-    forEach(collection, function(value, index, collection) {
-      var current = callback(value, index, collection);
-      if (current < computed) {
-        computed = current;
-        result = value;
-      }
-    });
-  }
-  return result;
-}
-
-module.exports = min;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/collections/pluck.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/collections/pluck.js
deleted file mode 100644
index 66855c9..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/collections/pluck.js
+++ /dev/null
@@ -1,33 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var map = require('./map');
-
-/**
- * Retrieves the value of a specified property from all elements in the collection.
- *
- * @static
- * @memberOf _
- * @type Function
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {string} property The name of the property to pluck.
- * @returns {Array} Returns a new array of property values.
- * @example
- *
- * var characters = [
- *   { 'name': 'barney', 'age': 36 },
- *   { 'name': 'fred',   'age': 40 }
- * ];
- *
- * _.pluck(characters, 'name');
- * // => ['barney', 'fred']
- */
-var pluck = map;
-
-module.exports = pluck;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/collections/reduce.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/collections/reduce.js
deleted file mode 100644
index 5f0a15f..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/collections/reduce.js
+++ /dev/null
@@ -1,67 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback'),
-    forOwn = require('../objects/forOwn');
-
-/**
- * Reduces a collection to a value which is the accumulated result of running
- * each element in the collection through the callback, where each successive
- * callback execution consumes the return value of the previous execution. If
- * `accumulator` is not provided the first element of the collection will be
- * used as the initial `accumulator` value. The callback is bound to `thisArg`
- * and invoked with four arguments; (accumulator, value, index|key, collection).
- *
- * @static
- * @memberOf _
- * @alias foldl, inject
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function} [callback=identity] The function called per iteration.
- * @param {*} [accumulator] Initial value of the accumulator.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {*} Returns the accumulated value.
- * @example
- *
- * var sum = _.reduce([1, 2, 3], function(sum, num) {
- *   return sum + num;
- * });
- * // => 6
- *
- * var mapped = _.reduce({ 'a': 1, 'b': 2, 'c': 3 }, function(result, num, key) {
- *   result[key] = num * 3;
- *   return result;
- * }, {});
- * // => { 'a': 3, 'b': 6, 'c': 9 }
- */
-function reduce(collection, callback, accumulator, thisArg) {
-  if (!collection) return accumulator;
-  var noaccum = arguments.length < 3;
-  callback = createCallback(callback, thisArg, 4);
-
-  var index = -1,
-      length = collection.length;
-
-  if (typeof length == 'number') {
-    if (noaccum) {
-      accumulator = collection[++index];
-    }
-    while (++index < length) {
-      accumulator = callback(accumulator, collection[index], index, collection);
-    }
-  } else {
-    forOwn(collection, function(value, index, collection) {
-      accumulator = noaccum
-        ? (noaccum = false, value)
-        : callback(accumulator, value, index, collection)
-    });
-  }
-  return accumulator;
-}
-
-module.exports = reduce;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/collections/reduceRight.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/collections/reduceRight.js
deleted file mode 100644
index 6ebae93..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/collections/reduceRight.js
+++ /dev/null
@@ -1,42 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback'),
-    forEachRight = require('./forEachRight');
-
-/**
- * This method is like `_.reduce` except that it iterates over elements
- * of a `collection` from right to left.
- *
- * @static
- * @memberOf _
- * @alias foldr
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function} [callback=identity] The function called per iteration.
- * @param {*} [accumulator] Initial value of the accumulator.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {*} Returns the accumulated value.
- * @example
- *
- * var list = [[0, 1], [2, 3], [4, 5]];
- * var flat = _.reduceRight(list, function(a, b) { return a.concat(b); }, []);
- * // => [4, 5, 2, 3, 0, 1]
- */
-function reduceRight(collection, callback, accumulator, thisArg) {
-  var noaccum = arguments.length < 3;
-  callback = createCallback(callback, thisArg, 4);
-  forEachRight(collection, function(value, index, collection) {
-    accumulator = noaccum
-      ? (noaccum = false, value)
-      : callback(accumulator, value, index, collection);
-  });
-  return accumulator;
-}
-
-module.exports = reduceRight;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/collections/reject.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/collections/reject.js
deleted file mode 100644
index 31b32e7..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/collections/reject.js
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback'),
-    filter = require('./filter');
-
-/**
- * The opposite of `_.filter` this method returns the elements of a
- * collection that the callback does **not** return truey for.
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Array} Returns a new array of elements that failed the callback check.
- * @example
- *
- * var odds = _.reject([1, 2, 3, 4, 5, 6], function(num) { return num % 2 == 0; });
- * // => [1, 3, 5]
- *
- * var characters = [
- *   { 'name': 'barney', 'age': 36, 'blocked': false },
- *   { 'name': 'fred',   'age': 40, 'blocked': true }
- * ];
- *
- * // using "_.pluck" callback shorthand
- * _.reject(characters, 'blocked');
- * // => [{ 'name': 'barney', 'age': 36, 'blocked': false }]
- *
- * // using "_.where" callback shorthand
- * _.reject(characters, { 'age': 36 });
- * // => [{ 'name': 'fred', 'age': 40, 'blocked': true }]
- */
-function reject(collection, callback, thisArg) {
-  callback = createCallback(callback, thisArg, 3);
-  return filter(collection, function(value, index, collection) {
-    return !callback(value, index, collection);
-  });
-}
-
-module.exports = reject;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/collections/sample.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/collections/sample.js
deleted file mode 100644
index b851923..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/collections/sample.js
+++ /dev/null
@@ -1,49 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseRandom = require('../internals/baseRandom'),
-    isString = require('../objects/isString'),
-    shuffle = require('./shuffle'),
-    values = require('../objects/values');
-
-/* Native method shortcuts for methods with the same name as other `lodash` methods */
-var nativeMax = Math.max,
-    nativeMin = Math.min;
-
-/**
- * Retrieves a random element or `n` random elements from a collection.
- *
- * @static
- * @memberOf _
- * @category Collections
- * @param {Array|Object|string} collection The collection to sample.
- * @param {number} [n] The number of elements to sample.
- * @param- {Object} [guard] Allows working with functions like `_.map`
- *  without using their `index` arguments as `n`.
- * @returns {Array} Returns the random sample(s) of `collection`.
- * @example
- *
- * _.sample([1, 2, 3, 4]);
- * // => 2
- *
- * _.sample([1, 2, 3, 4], 2);
- * // => [3, 1]
- */
-function sample(collection, n, guard) {
-  if (collection && typeof collection.length != 'number') {
-    collection = values(collection);
-  }
-  if (n == null || guard) {
-    return collection ? collection[baseRandom(0, collection.length - 1)] : undefined;
-  }
-  var result = shuffle(collection);
-  result.length = nativeMin(nativeMax(0, n), result.length);
-  return result;
-}
-
-module.exports = sample;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/collections/shuffle.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/collections/shuffle.js
deleted file mode 100644
index 526f1ce..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/collections/shuffle.js
+++ /dev/null
@@ -1,39 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseRandom = require('../internals/baseRandom'),
-    forEach = require('./forEach');
-
-/**
- * Creates an array of shuffled values, using a version of the Fisher-Yates
- * shuffle. See http://en.wikipedia.org/wiki/Fisher-Yates_shuffle.
- *
- * @static
- * @memberOf _
- * @category Collections
- * @param {Array|Object|string} collection The collection to shuffle.
- * @returns {Array} Returns a new shuffled collection.
- * @example
- *
- * _.shuffle([1, 2, 3, 4, 5, 6]);
- * // => [4, 1, 6, 3, 5, 2]
- */
-function shuffle(collection) {
-  var index = -1,
-      length = collection ? collection.length : 0,
-      result = Array(typeof length == 'number' ? length : 0);
-
-  forEach(collection, function(value) {
-    var rand = baseRandom(0, ++index);
-    result[index] = result[rand];
-    result[rand] = value;
-  });
-  return result;
-}
-
-module.exports = shuffle;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/collections/size.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/collections/size.js
deleted file mode 100644
index 6ab8211..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/collections/size.js
+++ /dev/null
@@ -1,36 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var keys = require('../objects/keys');
-
-/**
- * Gets the size of the `collection` by returning `collection.length` for arrays
- * and array-like objects or the number of own enumerable properties for objects.
- *
- * @static
- * @memberOf _
- * @category Collections
- * @param {Array|Object|string} collection The collection to inspect.
- * @returns {number} Returns `collection.length` or number of own enumerable properties.
- * @example
- *
- * _.size([1, 2]);
- * // => 2
- *
- * _.size({ 'one': 1, 'two': 2, 'three': 3 });
- * // => 3
- *
- * _.size('pebbles');
- * // => 7
- */
-function size(collection) {
-  var length = collection ? collection.length : 0;
-  return typeof length == 'number' ? length : keys(collection).length;
-}
-
-module.exports = size;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/collections/some.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/collections/some.js
deleted file mode 100644
index a10d1ba..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/collections/some.js
+++ /dev/null
@@ -1,77 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback'),
-    forOwn = require('../objects/forOwn'),
-    indicatorObject = require('../internals/indicatorObject'),
-    isArray = require('../objects/isArray');
-
-/**
- * Checks if the callback returns a truey value for **any** element of a
- * collection. The function returns as soon as it finds a passing value and
- * does not iterate over the entire collection. The callback is bound to
- * `thisArg` and invoked with three arguments; (value, index|key, collection).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @alias any
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {boolean} Returns `true` if any element passed the callback check,
- *  else `false`.
- * @example
- *
- * _.some([null, 0, 'yes', false], Boolean);
- * // => true
- *
- * var characters = [
- *   { 'name': 'barney', 'age': 36, 'blocked': false },
- *   { 'name': 'fred',   'age': 40, 'blocked': true }
- * ];
- *
- * // using "_.pluck" callback shorthand
- * _.some(characters, 'blocked');
- * // => true
- *
- * // using "_.where" callback shorthand
- * _.some(characters, { 'age': 1 });
- * // => false
- */
-function some(collection, callback, thisArg) {
-  var result;
-  callback = createCallback(callback, thisArg, 3);
-
-  var index = -1,
-      length = collection ? collection.length : 0;
-
-  if (typeof length == 'number') {
-    while (++index < length) {
-      if ((result = callback(collection[index], index, collection))) {
-        break;
-      }
-    }
-  } else {
-    forOwn(collection, function(value, index, collection) {
-      return (result = callback(value, index, collection)) && indicatorObject;
-    });
-  }
-  return !!result;
-}
-
-module.exports = some;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/collections/sortBy.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/collections/sortBy.js
deleted file mode 100644
index 2576da8..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/collections/sortBy.js
+++ /dev/null
@@ -1,86 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var compareAscending = require('../internals/compareAscending'),
-    createCallback = require('../functions/createCallback'),
-    forEach = require('./forEach'),
-    isArray = require('../objects/isArray'),
-    map = require('./map');
-
-/**
- * Creates an array of elements, sorted in ascending order by the results of
- * running each element in a collection through the callback. This method
- * performs a stable sort, that is, it will preserve the original sort order
- * of equal elements. The callback is bound to `thisArg` and invoked with
- * three arguments; (value, index|key, collection).
- *
- * If a property name is provided for `callback` the created "_.pluck" style
- * callback will return the property value of the given element.
- *
- * If an array of property names is provided for `callback` the collection
- * will be sorted by each property value.
- *
- * If an object is provided for `callback` the created "_.where" style callback
- * will return `true` for elements that have the properties of the given object,
- * else `false`.
- *
- * @static
- * @memberOf _
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Array|Function|Object|string} [callback=identity] The function called
- *  per iteration. If a property name or object is provided it will be used
- *  to create a "_.pluck" or "_.where" style callback, respectively.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Array} Returns a new array of sorted elements.
- * @example
- *
- * _.sortBy([1, 2, 3], function(num) { return Math.sin(num); });
- * // => [3, 1, 2]
- *
- * _.sortBy([1, 2, 3], function(num) { return this.sin(num); }, Math);
- * // => [3, 1, 2]
- *
- * var characters = [
- *   { 'name': 'barney',  'age': 36 },
- *   { 'name': 'fred',    'age': 40 },
- *   { 'name': 'barney',  'age': 26 },
- *   { 'name': 'fred',    'age': 30 }
- * ];
- *
- * // using "_.pluck" callback shorthand
- * _.map(_.sortBy(characters, 'age'), _.values);
- * // => [['barney', 26], ['fred', 30], ['barney', 36], ['fred', 40]]
- *
- * // sorting by multiple properties
- * _.map(_.sortBy(characters, ['name', 'age']), _.values);
- * // = > [['barney', 26], ['barney', 36], ['fred', 30], ['fred', 40]]
- */
-function sortBy(collection, callback, thisArg) {
-  var index = -1,
-      length = collection ? collection.length : 0,
-      result = Array(typeof length == 'number' ? length : 0);
-
-  callback = createCallback(callback, thisArg, 3);
-  forEach(collection, function(value, key, collection) {
-    result[++index] = {
-      'criteria': [callback(value, key, collection)],
-      'index': index,
-      'value': value
-    };
-  });
-
-  length = result.length;
-  result.sort(compareAscending);
-  while (length--) {
-    result[length] = result[length].value;
-  }
-  return result;
-}
-
-module.exports = sortBy;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/collections/toArray.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/collections/toArray.js
deleted file mode 100644
index 825585d..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/collections/toArray.js
+++ /dev/null
@@ -1,37 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isArray = require('../objects/isArray'),
-    map = require('./map'),
-    slice = require('../internals/slice'),
-    values = require('../objects/values');
-
-/**
- * Converts the `collection` to an array.
- *
- * @static
- * @memberOf _
- * @category Collections
- * @param {Array|Object|string} collection The collection to convert.
- * @returns {Array} Returns the new converted array.
- * @example
- *
- * (function() { return _.toArray(arguments).slice(1); })(1, 2, 3, 4);
- * // => [2, 3, 4]
- */
-function toArray(collection) {
-  if (isArray(collection)) {
-    return slice(collection);
-  }
-  if (collection && typeof collection.length == 'number') {
-    return map(collection);
-  }
-  return values(collection);
-}
-
-module.exports = toArray;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/collections/where.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/collections/where.js
deleted file mode 100644
index 20f7931..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/collections/where.js
+++ /dev/null
@@ -1,44 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var filter = require('./filter'),
-    find = require('./find'),
-    isEmpty = require('../objects/isEmpty');
-
-/**
- * Performs a deep comparison of each element in a `collection` to the given
- * `properties` object, returning an array of all elements that have equivalent
- * property values.
- *
- * @static
- * @memberOf _
- * @type Function
- * @category Collections
- * @param {Array|Object|string} collection The collection to iterate over.
- * @param {Object} props The object of property values to filter by.
- * @returns {Array} Returns a new array of elements that have the given properties.
- * @example
- *
- * var characters = [
- *   { 'name': 'barney', 'age': 36, 'pets': ['hoppy'] },
- *   { 'name': 'fred',   'age': 40, 'pets': ['baby puss', 'dino'] }
- * ];
- *
- * _.where(characters, { 'age': 36 });
- * // => [{ 'name': 'barney', 'age': 36, 'pets': ['hoppy'] }]
- *
- * _.where(characters, { 'pets': ['dino'] });
- * // => [{ 'name': 'fred', 'age': 40, 'pets': ['baby puss', 'dino'] }]
- */
-function where(collection, properties, first) {
-  return (first && isEmpty(properties))
-    ? undefined
-    : (first ? find : filter)(collection, properties);
-}
-
-module.exports = where;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/functions.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/functions.js
deleted file mode 100644
index 08a3320..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/functions.js
+++ /dev/null
@@ -1,24 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-module.exports = {
-  'after': require('./functions/after'),
-  'bind': require('./functions/bind'),
-  'bindAll': require('./functions/bindAll'),
-  'compose': require('./functions/compose'),
-  'createCallback': require('./functions/createCallback'),
-  'debounce': require('./functions/debounce'),
-  'defer': require('./functions/defer'),
-  'delay': require('./functions/delay'),
-  'memoize': require('./functions/memoize'),
-  'once': require('./functions/once'),
-  'partial': require('./functions/partial'),
-  'throttle': require('./functions/throttle'),
-  'wrap': require('./functions/wrap')
-};
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/functions/after.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/functions/after.js
deleted file mode 100644
index c9ba6e5..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/functions/after.js
+++ /dev/null
@@ -1,46 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isFunction = require('../objects/isFunction');
-
-/**
- * Creates a function that executes `func`, with  the `this` binding and
- * arguments of the created function, only after being called `n` times.
- *
- * @static
- * @memberOf _
- * @category Functions
- * @param {number} n The number of times the function must be called before
- *  `func` is executed.
- * @param {Function} func The function to restrict.
- * @returns {Function} Returns the new restricted function.
- * @example
- *
- * var saves = ['profile', 'settings'];
- *
- * var done = _.after(saves.length, function() {
- *   console.log('Done saving!');
- * });
- *
- * _.forEach(saves, function(type) {
- *   asyncSave({ 'type': type, 'complete': done });
- * });
- * // => logs 'Done saving!', after all saves have completed
- */
-function after(n, func) {
-  if (!isFunction(func)) {
-    throw new TypeError;
-  }
-  return function() {
-    if (--n < 1) {
-      return func.apply(this, arguments);
-    }
-  };
-}
-
-module.exports = after;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/functions/bind.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/functions/bind.js
deleted file mode 100644
index 96e6005..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/functions/bind.js
+++ /dev/null
@@ -1,40 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createWrapper = require('../internals/createWrapper'),
-    slice = require('../internals/slice');
-
-/**
- * Creates a function that, when called, invokes `func` with the `this`
- * binding of `thisArg` and prepends any additional `bind` arguments to those
- * provided to the bound function.
- *
- * @static
- * @memberOf _
- * @category Functions
- * @param {Function} func The function to bind.
- * @param {*} [thisArg] The `this` binding of `func`.
- * @param {...*} [arg] Arguments to be partially applied.
- * @returns {Function} Returns the new bound function.
- * @example
- *
- * var func = function(greeting) {
- *   return greeting + ' ' + this.name;
- * };
- *
- * func = _.bind(func, { 'name': 'fred' }, 'hi');
- * func();
- * // => 'hi fred'
- */
-function bind(func, thisArg) {
-  return arguments.length > 2
-    ? createWrapper(func, 17, slice(arguments, 2), null, thisArg)
-    : createWrapper(func, 1, null, null, thisArg);
-}
-
-module.exports = bind;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/functions/bindAll.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/functions/bindAll.js
deleted file mode 100644
index c06e606..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/functions/bindAll.js
+++ /dev/null
@@ -1,49 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseFlatten = require('../internals/baseFlatten'),
-    createWrapper = require('../internals/createWrapper'),
-    functions = require('../objects/functions');
-
-/**
- * Binds methods of an object to the object itself, overwriting the existing
- * method. Method names may be specified as individual arguments or as arrays
- * of method names. If no method names are provided all the function properties
- * of `object` will be bound.
- *
- * @static
- * @memberOf _
- * @category Functions
- * @param {Object} object The object to bind and assign the bound methods to.
- * @param {...string} [methodName] The object method names to
- *  bind, specified as individual method names or arrays of method names.
- * @returns {Object} Returns `object`.
- * @example
- *
- * var view = {
- *   'label': 'docs',
- *   'onClick': function() { console.log('clicked ' + this.label); }
- * };
- *
- * _.bindAll(view);
- * jQuery('#docs').on('click', view.onClick);
- * // => logs 'clicked docs', when the button is clicked
- */
-function bindAll(object) {
-  var funcs = arguments.length > 1 ? baseFlatten(arguments, true, false, 1) : functions(object),
-      index = -1,
-      length = funcs.length;
-
-  while (++index < length) {
-    var key = funcs[index];
-    object[key] = createWrapper(object[key], 1, null, null, object);
-  }
-  return object;
-}
-
-module.exports = bindAll;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/functions/compose.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/functions/compose.js
deleted file mode 100644
index 65efb6a..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/functions/compose.js
+++ /dev/null
@@ -1,61 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isFunction = require('../objects/isFunction');
-
-/**
- * Creates a function that is the composition of the provided functions,
- * where each function consumes the return value of the function that follows.
- * For example, composing the functions `f()`, `g()`, and `h()` produces `f(g(h()))`.
- * Each function is executed with the `this` binding of the composed function.
- *
- * @static
- * @memberOf _
- * @category Functions
- * @param {...Function} [func] Functions to compose.
- * @returns {Function} Returns the new composed function.
- * @example
- *
- * var realNameMap = {
- *   'pebbles': 'penelope'
- * };
- *
- * var format = function(name) {
- *   name = realNameMap[name.toLowerCase()] || name;
- *   return name.charAt(0).toUpperCase() + name.slice(1).toLowerCase();
- * };
- *
- * var greet = function(formatted) {
- *   return 'Hiya ' + formatted + '!';
- * };
- *
- * var welcome = _.compose(greet, format);
- * welcome('pebbles');
- * // => 'Hiya Penelope!'
- */
-function compose() {
-  var funcs = arguments,
-      length = funcs.length;
-
-  while (length--) {
-    if (!isFunction(funcs[length])) {
-      throw new TypeError;
-    }
-  }
-  return function() {
-    var args = arguments,
-        length = funcs.length;
-
-    while (length--) {
-      args = [funcs[length].apply(this, args)];
-    }
-    return args[0];
-  };
-}
-
-module.exports = compose;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/functions/createCallback.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/functions/createCallback.js
deleted file mode 100644
index 7fb386c..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/functions/createCallback.js
+++ /dev/null
@@ -1,67 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseCreateCallback = require('../internals/baseCreateCallback'),
-    keys = require('../objects/keys'),
-    property = require('../utilities/property');
-
-/**
- * Produces a callback bound to an optional `thisArg`. If `func` is a property
- * name the created callback will return the property value for a given element.
- * If `func` is an object the created callback will return `true` for elements
- * that contain the equivalent object properties, otherwise it will return `false`.
- *
- * @static
- * @memberOf _
- * @category Utilities
- * @param {*} [func=identity] The value to convert to a callback.
- * @param {*} [thisArg] The `this` binding of the created callback.
- * @param {number} [argCount] The number of arguments the callback accepts.
- * @returns {Function} Returns a callback function.
- * @example
- *
- * var characters = [
- *   { 'name': 'barney', 'age': 36 },
- *   { 'name': 'fred',   'age': 40 }
- * ];
- *
- * // wrap to create custom callback shorthands
- * _.createCallback = _.wrap(_.createCallback, function(func, callback, thisArg) {
- *   var match = /^(.+?)__([gl]t)(.+)$/.exec(callback);
- *   return !match ? func(callback, thisArg) : function(object) {
- *     return match[2] == 'gt' ? object[match[1]] > match[3] : object[match[1]] < match[3];
- *   };
- * });
- *
- * _.filter(characters, 'age__gt38');
- * // => [{ 'name': 'fred', 'age': 40 }]
- */
-function createCallback(func, thisArg, argCount) {
-  var type = typeof func;
-  if (func == null || type == 'function') {
-    return baseCreateCallback(func, thisArg, argCount);
-  }
-  // handle "_.pluck" style callback shorthands
-  if (type != 'object') {
-    return property(func);
-  }
-  var props = keys(func);
-  return function(object) {
-    var length = props.length,
-        result = false;
-
-    while (length--) {
-      if (!(result = object[props[length]] === func[props[length]])) {
-        break;
-      }
-    }
-    return result;
-  };
-}
-
-module.exports = createCallback;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/functions/debounce.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/functions/debounce.js
deleted file mode 100644
index fb0d645..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/functions/debounce.js
+++ /dev/null
@@ -1,156 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isFunction = require('../objects/isFunction'),
-    isObject = require('../objects/isObject'),
-    now = require('../utilities/now');
-
-/* Native method shortcuts for methods with the same name as other `lodash` methods */
-var nativeMax = Math.max;
-
-/**
- * Creates a function that will delay the execution of `func` until after
- * `wait` milliseconds have elapsed since the last time it was invoked.
- * Provide an options object to indicate that `func` should be invoked on
- * the leading and/or trailing edge of the `wait` timeout. Subsequent calls
- * to the debounced function will return the result of the last `func` call.
- *
- * Note: If `leading` and `trailing` options are `true` `func` will be called
- * on the trailing edge of the timeout only if the the debounced function is
- * invoked more than once during the `wait` timeout.
- *
- * @static
- * @memberOf _
- * @category Functions
- * @param {Function} func The function to debounce.
- * @param {number} wait The number of milliseconds to delay.
- * @param {Object} [options] The options object.
- * @param {boolean} [options.leading=false] Specify execution on the leading edge of the timeout.
- * @param {number} [options.maxWait] The maximum time `func` is allowed to be delayed before it's called.
- * @param {boolean} [options.trailing=true] Specify execution on the trailing edge of the timeout.
- * @returns {Function} Returns the new debounced function.
- * @example
- *
- * // avoid costly calculations while the window size is in flux
- * var lazyLayout = _.debounce(calculateLayout, 150);
- * jQuery(window).on('resize', lazyLayout);
- *
- * // execute `sendMail` when the click event is fired, debouncing subsequent calls
- * jQuery('#postbox').on('click', _.debounce(sendMail, 300, {
- *   'leading': true,
- *   'trailing': false
- * });
- *
- * // ensure `batchLog` is executed once after 1 second of debounced calls
- * var source = new EventSource('/stream');
- * source.addEventListener('message', _.debounce(batchLog, 250, {
- *   'maxWait': 1000
- * }, false);
- */
-function debounce(func, wait, options) {
-  var args,
-      maxTimeoutId,
-      result,
-      stamp,
-      thisArg,
-      timeoutId,
-      trailingCall,
-      lastCalled = 0,
-      maxWait = false,
-      trailing = true;
-
-  if (!isFunction(func)) {
-    throw new TypeError;
-  }
-  wait = nativeMax(0, wait) || 0;
-  if (options === true) {
-    var leading = true;
-    trailing = false;
-  } else if (isObject(options)) {
-    leading = options.leading;
-    maxWait = 'maxWait' in options && (nativeMax(wait, options.maxWait) || 0);
-    trailing = 'trailing' in options ? options.trailing : trailing;
-  }
-  var delayed = function() {
-    var remaining = wait - (now() - stamp);
-    if (remaining <= 0) {
-      if (maxTimeoutId) {
-        clearTimeout(maxTimeoutId);
-      }
-      var isCalled = trailingCall;
-      maxTimeoutId = timeoutId = trailingCall = undefined;
-      if (isCalled) {
-        lastCalled = now();
-        result = func.apply(thisArg, args);
-        if (!timeoutId && !maxTimeoutId) {
-          args = thisArg = null;
-        }
-      }
-    } else {
-      timeoutId = setTimeout(delayed, remaining);
-    }
-  };
-
-  var maxDelayed = function() {
-    if (timeoutId) {
-      clearTimeout(timeoutId);
-    }
-    maxTimeoutId = timeoutId = trailingCall = undefined;
-    if (trailing || (maxWait !== wait)) {
-      lastCalled = now();
-      result = func.apply(thisArg, args);
-      if (!timeoutId && !maxTimeoutId) {
-        args = thisArg = null;
-      }
-    }
-  };
-
-  return function() {
-    args = arguments;
-    stamp = now();
-    thisArg = this;
-    trailingCall = trailing && (timeoutId || !leading);
-
-    if (maxWait === false) {
-      var leadingCall = leading && !timeoutId;
-    } else {
-      if (!maxTimeoutId && !leading) {
-        lastCalled = stamp;
-      }
-      var remaining = maxWait - (stamp - lastCalled),
-          isCalled = remaining <= 0;
-
-      if (isCalled) {
-        if (maxTimeoutId) {
-          maxTimeoutId = clearTimeout(maxTimeoutId);
-        }
-        lastCalled = stamp;
-        result = func.apply(thisArg, args);
-      }
-      else if (!maxTimeoutId) {
-        maxTimeoutId = setTimeout(maxDelayed, remaining);
-      }
-    }
-    if (isCalled && timeoutId) {
-      timeoutId = clearTimeout(timeoutId);
-    }
-    else if (!timeoutId && wait !== maxWait) {
-      timeoutId = setTimeout(delayed, wait);
-    }
-    if (leadingCall) {
-      isCalled = true;
-      result = func.apply(thisArg, args);
-    }
-    if (isCalled && !timeoutId && !maxTimeoutId) {
-      args = thisArg = null;
-    }
-    return result;
-  };
-}
-
-module.exports = debounce;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/functions/defer.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/functions/defer.js
deleted file mode 100644
index 3dc5873..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/functions/defer.js
+++ /dev/null
@@ -1,35 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isFunction = require('../objects/isFunction'),
-    slice = require('../internals/slice');
-
-/**
- * Defers executing the `func` function until the current call stack has cleared.
- * Additional arguments will be provided to `func` when it is invoked.
- *
- * @static
- * @memberOf _
- * @category Functions
- * @param {Function} func The function to defer.
- * @param {...*} [arg] Arguments to invoke the function with.
- * @returns {number} Returns the timer id.
- * @example
- *
- * _.defer(function(text) { console.log(text); }, 'deferred');
- * // logs 'deferred' after one or more milliseconds
- */
-function defer(func) {
-  if (!isFunction(func)) {
-    throw new TypeError;
-  }
-  var args = slice(arguments, 1);
-  return setTimeout(function() { func.apply(undefined, args); }, 1);
-}
-
-module.exports = defer;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/functions/delay.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/functions/delay.js
deleted file mode 100644
index 23e1560..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/functions/delay.js
+++ /dev/null
@@ -1,36 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isFunction = require('../objects/isFunction'),
-    slice = require('../internals/slice');
-
-/**
- * Executes the `func` function after `wait` milliseconds. Additional arguments
- * will be provided to `func` when it is invoked.
- *
- * @static
- * @memberOf _
- * @category Functions
- * @param {Function} func The function to delay.
- * @param {number} wait The number of milliseconds to delay execution.
- * @param {...*} [arg] Arguments to invoke the function with.
- * @returns {number} Returns the timer id.
- * @example
- *
- * _.delay(function(text) { console.log(text); }, 1000, 'later');
- * // => logs 'later' after one second
- */
-function delay(func, wait) {
-  if (!isFunction(func)) {
-    throw new TypeError;
-  }
-  var args = slice(arguments, 2);
-  return setTimeout(function() { func.apply(undefined, args); }, wait);
-}
-
-module.exports = delay;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/functions/memoize.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/functions/memoize.js
deleted file mode 100644
index 3f3a7e4..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/functions/memoize.js
+++ /dev/null
@@ -1,65 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isFunction = require('../objects/isFunction'),
-    keyPrefix = require('../internals/keyPrefix');
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Native method shortcuts */
-var hasOwnProperty = objectProto.hasOwnProperty;
-
-/**
- * Creates a function that memoizes the result of `func`. If `resolver` is
- * provided it will be used to determine the cache key for storing the result
- * based on the arguments provided to the memoized function. By default, the
- * first argument provided to the memoized function is used as the cache key.
- * The `func` is executed with the `this` binding of the memoized function.
- * The result cache is exposed as the `cache` property on the memoized function.
- *
- * @static
- * @memberOf _
- * @category Functions
- * @param {Function} func The function to have its output memoized.
- * @param {Function} [resolver] A function used to resolve the cache key.
- * @returns {Function} Returns the new memoizing function.
- * @example
- *
- * var fibonacci = _.memoize(function(n) {
- *   return n < 2 ? n : fibonacci(n - 1) + fibonacci(n - 2);
- * });
- *
- * fibonacci(9)
- * // => 34
- *
- * var data = {
- *   'fred': { 'name': 'fred', 'age': 40 },
- *   'pebbles': { 'name': 'pebbles', 'age': 1 }
- * };
- *
- * // modifying the result cache
- * var get = _.memoize(function(name) { return data[name]; }, _.identity);
- * get('pebbles');
- * // => { 'name': 'pebbles', 'age': 1 }
- *
- * get.cache.pebbles.name = 'penelope';
- * get('pebbles');
- * // => { 'name': 'penelope', 'age': 1 }
- */
-function memoize(func, resolver) {
-  var cache = {};
-  return function() {
-    var key = resolver ? resolver.apply(this, arguments) : keyPrefix + arguments[0];
-    return hasOwnProperty.call(cache, key)
-      ? cache[key]
-      : (cache[key] = func.apply(this, arguments));
-  };
-}
-
-module.exports = memoize;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/functions/once.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/functions/once.js
deleted file mode 100644
index e5a1a28..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/functions/once.js
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isFunction = require('../objects/isFunction');
-
-/**
- * Creates a function that is restricted to execute `func` once. Repeat calls to
- * the function will return the value of the first call. The `func` is executed
- * with the `this` binding of the created function.
- *
- * @static
- * @memberOf _
- * @category Functions
- * @param {Function} func The function to restrict.
- * @returns {Function} Returns the new restricted function.
- * @example
- *
- * var initialize = _.once(createApplication);
- * initialize();
- * initialize();
- * // `initialize` executes `createApplication` once
- */
-function once(func) {
-  var ran,
-      result;
-
-  if (!isFunction(func)) {
-    throw new TypeError;
-  }
-  return function() {
-    if (ran) {
-      return result;
-    }
-    ran = true;
-    result = func.apply(this, arguments);
-
-    // clear the `func` variable so the function may be garbage collected
-    func = null;
-    return result;
-  };
-}
-
-module.exports = once;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/functions/partial.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/functions/partial.js
deleted file mode 100644
index a138531..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/functions/partial.js
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createWrapper = require('../internals/createWrapper'),
-    slice = require('../internals/slice');
-
-/**
- * Creates a function that, when called, invokes `func` with any additional
- * `partial` arguments prepended to those provided to the new function. This
- * method is similar to `_.bind` except it does **not** alter the `this` binding.
- *
- * @static
- * @memberOf _
- * @category Functions
- * @param {Function} func The function to partially apply arguments to.
- * @param {...*} [arg] Arguments to be partially applied.
- * @returns {Function} Returns the new partially applied function.
- * @example
- *
- * var greet = function(greeting, name) { return greeting + ' ' + name; };
- * var hi = _.partial(greet, 'hi');
- * hi('fred');
- * // => 'hi fred'
- */
-function partial(func) {
-  return createWrapper(func, 16, slice(arguments, 1));
-}
-
-module.exports = partial;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/functions/throttle.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/functions/throttle.js
deleted file mode 100644
index 19bc529..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/functions/throttle.js
+++ /dev/null
@@ -1,65 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var debounce = require('./debounce'),
-    isFunction = require('../objects/isFunction'),
-    isObject = require('../objects/isObject');
-
-/**
- * Creates a function that, when executed, will only call the `func` function
- * at most once per every `wait` milliseconds. Provide an options object to
- * indicate that `func` should be invoked on the leading and/or trailing edge
- * of the `wait` timeout. Subsequent calls to the throttled function will
- * return the result of the last `func` call.
- *
- * Note: If `leading` and `trailing` options are `true` `func` will be called
- * on the trailing edge of the timeout only if the the throttled function is
- * invoked more than once during the `wait` timeout.
- *
- * @static
- * @memberOf _
- * @category Functions
- * @param {Function} func The function to throttle.
- * @param {number} wait The number of milliseconds to throttle executions to.
- * @param {Object} [options] The options object.
- * @param {boolean} [options.leading=true] Specify execution on the leading edge of the timeout.
- * @param {boolean} [options.trailing=true] Specify execution on the trailing edge of the timeout.
- * @returns {Function} Returns the new throttled function.
- * @example
- *
- * // avoid excessively updating the position while scrolling
- * var throttled = _.throttle(updatePosition, 100);
- * jQuery(window).on('scroll', throttled);
- *
- * // execute `renewToken` when the click event is fired, but not more than once every 5 minutes
- * jQuery('.interactive').on('click', _.throttle(renewToken, 300000, {
- *   'trailing': false
- * }));
- */
-function throttle(func, wait, options) {
-  var leading = true,
-      trailing = true;
-
-  if (!isFunction(func)) {
-    throw new TypeError;
-  }
-  if (options === false) {
-    leading = false;
-  } else if (isObject(options)) {
-    leading = 'leading' in options ? options.leading : leading;
-    trailing = 'trailing' in options ? options.trailing : trailing;
-  }
-  options = {};
-  options.leading = leading;
-  options.maxWait = wait;
-  options.trailing = trailing;
-
-  return debounce(func, wait, options);
-}
-
-module.exports = throttle;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/functions/wrap.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/functions/wrap.js
deleted file mode 100644
index 690849f..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/functions/wrap.js
+++ /dev/null
@@ -1,36 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createWrapper = require('../internals/createWrapper');
-
-/**
- * Creates a function that provides `value` to the wrapper function as its
- * first argument. Additional arguments provided to the function are appended
- * to those provided to the wrapper function. The wrapper is executed with
- * the `this` binding of the created function.
- *
- * @static
- * @memberOf _
- * @category Functions
- * @param {*} value The value to wrap.
- * @param {Function} wrapper The wrapper function.
- * @returns {Function} Returns the new function.
- * @example
- *
- * var p = _.wrap(_.escape, function(func, text) {
- *   return '<p>' + func(text) + '</p>';
- * });
- *
- * p('Fred, Wilma, & Pebbles');
- * // => '<p>Fred, Wilma, &amp; Pebbles</p>'
- */
-function wrap(value, wrapper) {
-  return createWrapper(wrapper, 16, [value]);
-}
-
-module.exports = wrap;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/index.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/index.js
deleted file mode 100644
index ccbc67e..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/index.js
+++ /dev/null
@@ -1,284 +0,0 @@
-/**
- * @license
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var arrays = require('./arrays'),
-    chaining = require('./chaining'),
-    collections = require('./collections'),
-    functions = require('./functions'),
-    objects = require('./objects'),
-    utilities = require('./utilities'),
-    forEach = require('./collections/forEach'),
-    forOwn = require('./objects/forOwn'),
-    lodashWrapper = require('./internals/lodashWrapper'),
-    mixin = require('./utilities/mixin'),
-    support = require('./support'),
-    templateSettings = require('./utilities/templateSettings');
-
-/**
- * Used for `Array` method references.
- *
- * Normally `Array.prototype` would suffice, however, using an array literal
- * avoids issues in Narwhal.
- */
-var arrayRef = [];
-
-/**
- * Creates a `lodash` object which wraps the given value to enable intuitive
- * method chaining.
- *
- * In addition to Lo-Dash methods, wrappers also have the following `Array` methods:
- * `concat`, `join`, `pop`, `push`, `reverse`, `shift`, `slice`, `sort`, `splice`,
- * and `unshift`
- *
- * Chaining is supported in custom builds as long as the `value` method is
- * implicitly or explicitly included in the build.
- *
- * The chainable wrapper functions are:
- * `after`, `assign`, `bind`, `bindAll`, `bindKey`, `chain`, `compact`,
- * `compose`, `concat`, `countBy`, `create`, `createCallback`, `curry`,
- * `debounce`, `defaults`, `defer`, `delay`, `difference`, `filter`, `flatten`,
- * `forEach`, `forEachRight`, `forIn`, `forInRight`, `forOwn`, `forOwnRight`,
- * `functions`, `groupBy`, `indexBy`, `initial`, `intersection`, `invert`,
- * `invoke`, `keys`, `map`, `max`, `memoize`, `merge`, `min`, `object`, `omit`,
- * `once`, `pairs`, `partial`, `partialRight`, `pick`, `pluck`, `pull`, `push`,
- * `range`, `reject`, `remove`, `rest`, `reverse`, `shuffle`, `slice`, `sort`,
- * `sortBy`, `splice`, `tap`, `throttle`, `times`, `toArray`, `transform`,
- * `union`, `uniq`, `unshift`, `unzip`, `values`, `where`, `without`, `wrap`,
- * and `zip`
- *
- * The non-chainable wrapper functions are:
- * `clone`, `cloneDeep`, `contains`, `escape`, `every`, `find`, `findIndex`,
- * `findKey`, `findLast`, `findLastIndex`, `findLastKey`, `has`, `identity`,
- * `indexOf`, `isArguments`, `isArray`, `isBoolean`, `isDate`, `isElement`,
- * `isEmpty`, `isEqual`, `isFinite`, `isFunction`, `isNaN`, `isNull`, `isNumber`,
- * `isObject`, `isPlainObject`, `isRegExp`, `isString`, `isUndefined`, `join`,
- * `lastIndexOf`, `mixin`, `noConflict`, `parseInt`, `pop`, `random`, `reduce`,
- * `reduceRight`, `result`, `shift`, `size`, `some`, `sortedIndex`, `runInContext`,
- * `template`, `unescape`, `uniqueId`, and `value`
- *
- * The wrapper functions `first` and `last` return wrapped values when `n` is
- * provided, otherwise they return unwrapped values.
- *
- * Explicit chaining can be enabled by using the `_.chain` method.
- *
- * @name _
- * @constructor
- * @category Chaining
- * @param {*} value The value to wrap in a `lodash` instance.
- * @returns {Object} Returns a `lodash` instance.
- * @example
- *
- * var wrapped = _([1, 2, 3]);
- *
- * // returns an unwrapped value
- * wrapped.reduce(function(sum, num) {
- *   return sum + num;
- * });
- * // => 6
- *
- * // returns a wrapped value
- * var squares = wrapped.map(function(num) {
- *   return num * num;
- * });
- *
- * _.isArray(squares);
- * // => false
- *
- * _.isArray(squares.value());
- * // => true
- */
-function lodash(value) {
-  return (value instanceof lodash)
-    ? value
-    : new lodashWrapper(value);
-}
-// ensure `new lodashWrapper` is an instance of `lodash`
-lodashWrapper.prototype = lodash.prototype;
-
-// wrap `_.mixin` so it works when provided only one argument
-mixin = (function(fn) {
-  return function(object, source) {
-    if (!source) {
-      source = object;
-      object = lodash;
-    }
-    return fn(object, source);
-  };
-}(mixin));
-
-// add functions that return wrapped values when chaining
-lodash.after = functions.after;
-lodash.bind = functions.bind;
-lodash.bindAll = functions.bindAll;
-lodash.chain = chaining.chain;
-lodash.compact = arrays.compact;
-lodash.compose = functions.compose;
-lodash.countBy = collections.countBy;
-lodash.debounce = functions.debounce;
-lodash.defaults = objects.defaults;
-lodash.defer = functions.defer;
-lodash.delay = functions.delay;
-lodash.difference = arrays.difference;
-lodash.filter = collections.filter;
-lodash.flatten = arrays.flatten;
-lodash.forEach = forEach;
-lodash.functions = objects.functions;
-lodash.groupBy = collections.groupBy;
-lodash.indexBy = collections.indexBy;
-lodash.initial = arrays.initial;
-lodash.intersection = arrays.intersection;
-lodash.invert = objects.invert;
-lodash.invoke = collections.invoke;
-lodash.keys = objects.keys;
-lodash.map = collections.map;
-lodash.max = collections.max;
-lodash.memoize = functions.memoize;
-lodash.min = collections.min;
-lodash.omit = objects.omit;
-lodash.once = functions.once;
-lodash.pairs = objects.pairs;
-lodash.partial = functions.partial;
-lodash.pick = objects.pick;
-lodash.pluck = collections.pluck;
-lodash.range = arrays.range;
-lodash.reject = collections.reject;
-lodash.rest = arrays.rest;
-lodash.shuffle = collections.shuffle;
-lodash.sortBy = collections.sortBy;
-lodash.tap = chaining.tap;
-lodash.throttle = functions.throttle;
-lodash.times = utilities.times;
-lodash.toArray = collections.toArray;
-lodash.union = arrays.union;
-lodash.uniq = arrays.uniq;
-lodash.values = objects.values;
-lodash.where = collections.where;
-lodash.without = arrays.without;
-lodash.wrap = functions.wrap;
-lodash.zip = arrays.zip;
-
-// add aliases
-lodash.collect = collections.map;
-lodash.drop = arrays.rest;
-lodash.each = forEach;
-lodash.extend = objects.assign;
-lodash.methods = objects.functions;
-lodash.object = arrays.zipObject;
-lodash.select = collections.filter;
-lodash.tail = arrays.rest;
-lodash.unique = arrays.uniq;
-
-// add functions that return unwrapped values when chaining
-lodash.clone = objects.clone;
-lodash.contains = collections.contains;
-lodash.escape = utilities.escape;
-lodash.every = collections.every;
-lodash.find = collections.find;
-lodash.has = objects.has;
-lodash.identity = utilities.identity;
-lodash.indexOf = arrays.indexOf;
-lodash.isArguments = objects.isArguments;
-lodash.isArray = objects.isArray;
-lodash.isBoolean = objects.isBoolean;
-lodash.isDate = objects.isDate;
-lodash.isElement = objects.isElement;
-lodash.isEmpty = objects.isEmpty;
-lodash.isEqual = objects.isEqual;
-lodash.isFinite = objects.isFinite;
-lodash.isFunction = objects.isFunction;
-lodash.isNaN = objects.isNaN;
-lodash.isNull = objects.isNull;
-lodash.isNumber = objects.isNumber;
-lodash.isObject = objects.isObject;
-lodash.isRegExp = objects.isRegExp;
-lodash.isString = objects.isString;
-lodash.isUndefined = objects.isUndefined;
-lodash.lastIndexOf = arrays.lastIndexOf;
-lodash.mixin = mixin;
-lodash.noConflict = utilities.noConflict;
-lodash.random = utilities.random;
-lodash.reduce = collections.reduce;
-lodash.reduceRight = collections.reduceRight;
-lodash.result = utilities.result;
-lodash.size = collections.size;
-lodash.some = collections.some;
-lodash.sortedIndex = arrays.sortedIndex;
-lodash.template = utilities.template;
-lodash.unescape = utilities.unescape;
-lodash.uniqueId = utilities.uniqueId;
-
-// add aliases
-lodash.all = collections.every;
-lodash.any = collections.some;
-lodash.detect = collections.find;
-lodash.findWhere = collections.findWhere;
-lodash.foldl = collections.reduce;
-lodash.foldr = collections.reduceRight;
-lodash.include = collections.contains;
-lodash.inject = collections.reduce;
-
-// add functions capable of returning wrapped and unwrapped values when chaining
-lodash.first = arrays.first;
-lodash.last = arrays.last;
-lodash.sample = collections.sample;
-
-// add aliases
-lodash.take = arrays.first;
-lodash.head = arrays.first;
-
-// add functions to `lodash.prototype`
-mixin(lodash);
-
-/**
- * The semantic version number.
- *
- * @static
- * @memberOf _
- * @type string
- */
-lodash.VERSION = '2.4.1';
-
-// add "Chaining" functions to the wrapper
-lodash.prototype.chain = chaining.wrapperChain;
-lodash.prototype.value = chaining.wrapperValueOf;
-
-  // add `Array` mutator functions to the wrapper
-  forEach(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(methodName) {
-    var func = arrayRef[methodName];
-    lodash.prototype[methodName] = function() {
-      var value = this.__wrapped__;
-      func.apply(value, arguments);
-
-      // avoid array-like object bugs with `Array#shift` and `Array#splice`
-      // in Firefox < 10 and IE < 9
-      if (!support.spliceObjects && value.length === 0) {
-        delete value[0];
-      }
-      return this;
-    };
-  });
-
-  // add `Array` accessor functions to the wrapper
-  forEach(['concat', 'join', 'slice'], function(methodName) {
-    var func = arrayRef[methodName];
-    lodash.prototype[methodName] = function() {
-      var value = this.__wrapped__,
-          result = func.apply(value, arguments);
-
-      if (this.__chain__) {
-        result = new lodashWrapper(result);
-        result.__chain__ = true;
-      }
-      return result;
-    };
-  });
-
-lodash.support = support;
-(lodash.templateSettings = utilities.templateSettings).imports._ = lodash;
-module.exports = lodash;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/baseBind.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/baseBind.js
deleted file mode 100644
index 4ac6245..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/baseBind.js
+++ /dev/null
@@ -1,60 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseCreate = require('./baseCreate'),
-    isObject = require('../objects/isObject'),
-    slice = require('./slice');
-
-/**
- * Used for `Array` method references.
- *
- * Normally `Array.prototype` would suffice, however, using an array literal
- * avoids issues in Narwhal.
- */
-var arrayRef = [];
-
-/** Native method shortcuts */
-var push = arrayRef.push;
-
-/**
- * The base implementation of `_.bind` that creates the bound function and
- * sets its meta data.
- *
- * @private
- * @param {Array} bindData The bind data array.
- * @returns {Function} Returns the new bound function.
- */
-function baseBind(bindData) {
-  var func = bindData[0],
-      partialArgs = bindData[2],
-      thisArg = bindData[4];
-
-  function bound() {
-    // `Function#bind` spec
-    // http://es5.github.io/#x15.3.4.5
-    if (partialArgs) {
-      // avoid `arguments` object deoptimizations by using `slice` instead
-      // of `Array.prototype.slice.call` and not assigning `arguments` to a
-      // variable as a ternary expression
-      var args = slice(partialArgs);
-      push.apply(args, arguments);
-    }
-    // mimic the constructor's `return` behavior
-    // http://es5.github.io/#x13.2.2
-    if (this instanceof bound) {
-      // ensure `new bound` is an instance of `func`
-      var thisBinding = baseCreate(func.prototype),
-          result = func.apply(thisBinding, args || arguments);
-      return isObject(result) ? result : thisBinding;
-    }
-    return func.apply(thisArg, args || arguments);
-  }
-  return bound;
-}
-
-module.exports = baseBind;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/baseCreate.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/baseCreate.js
deleted file mode 100644
index 2724d0b..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/baseCreate.js
+++ /dev/null
@@ -1,42 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isNative = require('./isNative'),
-    isObject = require('../objects/isObject'),
-    noop = require('../utilities/noop');
-
-/* Native method shortcuts for methods with the same name as other `lodash` methods */
-var nativeCreate = isNative(nativeCreate = Object.create) && nativeCreate;
-
-/**
- * The base implementation of `_.create` without support for assigning
- * properties to the created object.
- *
- * @private
- * @param {Object} prototype The object to inherit from.
- * @returns {Object} Returns the new object.
- */
-function baseCreate(prototype, properties) {
-  return isObject(prototype) ? nativeCreate(prototype) : {};
-}
-// fallback for browsers without `Object.create`
-if (!nativeCreate) {
-  baseCreate = (function() {
-    function Object() {}
-    return function(prototype) {
-      if (isObject(prototype)) {
-        Object.prototype = prototype;
-        var result = new Object;
-        Object.prototype = null;
-      }
-      return result || global.Object();
-    };
-  }());
-}
-
-module.exports = baseCreate;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/baseCreateCallback.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/baseCreateCallback.js
deleted file mode 100644
index be9a4a0..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/baseCreateCallback.js
+++ /dev/null
@@ -1,47 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var bind = require('../functions/bind'),
-    identity = require('../utilities/identity');
-
-/**
- * The base implementation of `_.createCallback` without support for creating
- * "_.pluck" or "_.where" style callbacks.
- *
- * @private
- * @param {*} [func=identity] The value to convert to a callback.
- * @param {*} [thisArg] The `this` binding of the created callback.
- * @param {number} [argCount] The number of arguments the callback accepts.
- * @returns {Function} Returns a callback function.
- */
-function baseCreateCallback(func, thisArg, argCount) {
-  if (typeof func != 'function') {
-    return identity;
-  }
-  // exit early for no `thisArg` or already bound by `Function#bind`
-  if (typeof thisArg == 'undefined' || !('prototype' in func)) {
-    return func;
-  }
-  switch (argCount) {
-    case 1: return function(value) {
-      return func.call(thisArg, value);
-    };
-    case 2: return function(a, b) {
-      return func.call(thisArg, a, b);
-    };
-    case 3: return function(value, index, collection) {
-      return func.call(thisArg, value, index, collection);
-    };
-    case 4: return function(accumulator, value, index, collection) {
-      return func.call(thisArg, accumulator, value, index, collection);
-    };
-  }
-  return bind(func, thisArg);
-}
-
-module.exports = baseCreateCallback;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/baseCreateWrapper.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/baseCreateWrapper.js
deleted file mode 100644
index 61dd235..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/baseCreateWrapper.js
+++ /dev/null
@@ -1,76 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseCreate = require('./baseCreate'),
-    isObject = require('../objects/isObject'),
-    slice = require('./slice');
-
-/**
- * Used for `Array` method references.
- *
- * Normally `Array.prototype` would suffice, however, using an array literal
- * avoids issues in Narwhal.
- */
-var arrayRef = [];
-
-/** Native method shortcuts */
-var push = arrayRef.push;
-
-/**
- * The base implementation of `createWrapper` that creates the wrapper and
- * sets its meta data.
- *
- * @private
- * @param {Array} bindData The bind data array.
- * @returns {Function} Returns the new function.
- */
-function baseCreateWrapper(bindData) {
-  var func = bindData[0],
-      bitmask = bindData[1],
-      partialArgs = bindData[2],
-      partialRightArgs = bindData[3],
-      thisArg = bindData[4],
-      arity = bindData[5];
-
-  var isBind = bitmask & 1,
-      isBindKey = bitmask & 2,
-      isCurry = bitmask & 4,
-      isCurryBound = bitmask & 8,
-      key = func;
-
-  function bound() {
-    var thisBinding = isBind ? thisArg : this;
-    if (partialArgs) {
-      var args = slice(partialArgs);
-      push.apply(args, arguments);
-    }
-    if (partialRightArgs || isCurry) {
-      args || (args = slice(arguments));
-      if (partialRightArgs) {
-        push.apply(args, partialRightArgs);
-      }
-      if (isCurry && args.length < arity) {
-        bitmask |= 16 & ~32;
-        return baseCreateWrapper([func, (isCurryBound ? bitmask : bitmask & ~3), args, null, thisArg, arity]);
-      }
-    }
-    args || (args = arguments);
-    if (isBindKey) {
-      func = thisBinding[key];
-    }
-    if (this instanceof bound) {
-      thisBinding = baseCreate(func.prototype);
-      var result = func.apply(thisBinding, args);
-      return isObject(result) ? result : thisBinding;
-    }
-    return func.apply(thisBinding, args);
-  }
-  return bound;
-}
-
-module.exports = baseCreateWrapper;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/baseDifference.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/baseDifference.js
deleted file mode 100644
index d31a28b..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/baseDifference.js
+++ /dev/null
@@ -1,35 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseIndexOf = require('./baseIndexOf');
-
-/**
- * The base implementation of `_.difference` that accepts a single array
- * of values to exclude.
- *
- * @private
- * @param {Array} array The array to process.
- * @param {Array} [values] The array of values to exclude.
- * @returns {Array} Returns a new array of filtered values.
- */
-function baseDifference(array, values) {
-  var index = -1,
-      indexOf = baseIndexOf,
-      length = array ? array.length : 0,
-      result = [];
-
-  while (++index < length) {
-    var value = array[index];
-    if (indexOf(values, value) < 0) {
-      result.push(value);
-    }
-  }
-  return result;
-}
-
-module.exports = baseDifference;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/baseFlatten.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/baseFlatten.js
deleted file mode 100644
index 1b73a0b..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/baseFlatten.js
+++ /dev/null
@@ -1,52 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isArguments = require('../objects/isArguments'),
-    isArray = require('../objects/isArray');
-
-/**
- * The base implementation of `_.flatten` without support for callback
- * shorthands or `thisArg` binding.
- *
- * @private
- * @param {Array} array The array to flatten.
- * @param {boolean} [isShallow=false] A flag to restrict flattening to a single level.
- * @param {boolean} [isStrict=false] A flag to restrict flattening to arrays and `arguments` objects.
- * @param {number} [fromIndex=0] The index to start from.
- * @returns {Array} Returns a new flattened array.
- */
-function baseFlatten(array, isShallow, isStrict, fromIndex) {
-  var index = (fromIndex || 0) - 1,
-      length = array ? array.length : 0,
-      result = [];
-
-  while (++index < length) {
-    var value = array[index];
-
-    if (value && typeof value == 'object' && typeof value.length == 'number'
-        && (isArray(value) || isArguments(value))) {
-      // recursively flatten arrays (susceptible to call stack limits)
-      if (!isShallow) {
-        value = baseFlatten(value, isShallow, isStrict);
-      }
-      var valIndex = -1,
-          valLength = value.length,
-          resIndex = result.length;
-
-      result.length += valLength;
-      while (++valIndex < valLength) {
-        result[resIndex++] = value[valIndex];
-      }
-    } else if (!isStrict) {
-      result.push(value);
-    }
-  }
-  return result;
-}
-
-module.exports = baseFlatten;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/baseIndexOf.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/baseIndexOf.js
deleted file mode 100644
index 43841ad..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/baseIndexOf.js
+++ /dev/null
@@ -1,32 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * The base implementation of `_.indexOf` without support for binary searches
- * or `fromIndex` constraints.
- *
- * @private
- * @param {Array} array The array to search.
- * @param {*} value The value to search for.
- * @param {number} [fromIndex=0] The index to search from.
- * @returns {number} Returns the index of the matched value or `-1`.
- */
-function baseIndexOf(array, value, fromIndex) {
-  var index = (fromIndex || 0) - 1,
-      length = array ? array.length : 0;
-
-  while (++index < length) {
-    if (array[index] === value) {
-      return index;
-    }
-  }
-  return -1;
-}
-
-module.exports = baseIndexOf;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/baseIsEqual.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/baseIsEqual.js
deleted file mode 100644
index 0944c77..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/baseIsEqual.js
+++ /dev/null
@@ -1,149 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var forIn = require('../objects/forIn'),
-    indicatorObject = require('./indicatorObject'),
-    isFunction = require('../objects/isFunction'),
-    objectTypes = require('./objectTypes');
-
-/** `Object#toString` result shortcuts */
-var arrayClass = '[object Array]',
-    boolClass = '[object Boolean]',
-    dateClass = '[object Date]',
-    numberClass = '[object Number]',
-    objectClass = '[object Object]',
-    regexpClass = '[object RegExp]',
-    stringClass = '[object String]';
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Used to resolve the internal [[Class]] of values */
-var toString = objectProto.toString;
-
-/** Native method shortcuts */
-var hasOwnProperty = objectProto.hasOwnProperty;
-
-/**
- * The base implementation of `_.isEqual`, without support for `thisArg` binding,
- * that allows partial "_.where" style comparisons.
- *
- * @private
- * @param {*} a The value to compare.
- * @param {*} b The other value to compare.
- * @param {Function} [callback] The function to customize comparing values.
- * @param {Function} [isWhere=false] A flag to indicate performing partial comparisons.
- * @param {Array} [stackA=[]] Tracks traversed `a` objects.
- * @param {Array} [stackB=[]] Tracks traversed `b` objects.
- * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
- */
-function baseIsEqual(a, b, stackA, stackB) {
-  if (a === b) {
-    return a !== 0 || (1 / a == 1 / b);
-  }
-  var type = typeof a,
-      otherType = typeof b;
-
-  if (a === a &&
-      !(a && objectTypes[type]) &&
-      !(b && objectTypes[otherType])) {
-    return false;
-  }
-  if (a == null || b == null) {
-    return a === b;
-  }
-  var className = toString.call(a),
-      otherClass = toString.call(b);
-
-  if (className != otherClass) {
-    return false;
-  }
-  switch (className) {
-    case boolClass:
-    case dateClass:
-      return +a == +b;
-
-    case numberClass:
-      return a != +a
-        ? b != +b
-        : (a == 0 ? (1 / a == 1 / b) : a == +b);
-
-    case regexpClass:
-    case stringClass:
-      return a == String(b);
-  }
-  var isArr = className == arrayClass;
-  if (!isArr) {
-    var aWrapped = hasOwnProperty.call(a, '__wrapped__'),
-        bWrapped = hasOwnProperty.call(b, '__wrapped__');
-
-    if (aWrapped || bWrapped) {
-      return baseIsEqual(aWrapped ? a.__wrapped__ : a, bWrapped ? b.__wrapped__ : b, stackA, stackB);
-    }
-    if (className != objectClass) {
-      return false;
-    }
-    var ctorA = a.constructor,
-        ctorB = b.constructor;
-
-    if (ctorA != ctorB &&
-          !(isFunction(ctorA) && ctorA instanceof ctorA && isFunction(ctorB) && ctorB instanceof ctorB) &&
-          ('constructor' in a && 'constructor' in b)
-        ) {
-      return false;
-    }
-  }
-  stackA || (stackA = []);
-  stackB || (stackB = []);
-
-  var length = stackA.length;
-  while (length--) {
-    if (stackA[length] == a) {
-      return stackB[length] == b;
-    }
-  }
-  var result = true,
-      size = 0;
-
-  stackA.push(a);
-  stackB.push(b);
-
-  if (isArr) {
-    size = b.length;
-    result = size == a.length;
-
-    if (result) {
-      while (size--) {
-        if (!(result = baseIsEqual(a[size], b[size], stackA, stackB))) {
-          break;
-        }
-      }
-    }
-  }
-  else {
-    forIn(b, function(value, key, b) {
-      if (hasOwnProperty.call(b, key)) {
-        size++;
-        return !(result = hasOwnProperty.call(a, key) && baseIsEqual(a[key], value, stackA, stackB)) && indicatorObject;
-      }
-    });
-
-    if (result) {
-      forIn(a, function(value, key, a) {
-        if (hasOwnProperty.call(a, key)) {
-          return !(result = --size > -1) && indicatorObject;
-        }
-      });
-    }
-  }
-  stackA.pop();
-  stackB.pop();
-  return result;
-}
-
-module.exports = baseIsEqual;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/baseRandom.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/baseRandom.js
deleted file mode 100644
index 93ed76c..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/baseRandom.js
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** Native method shortcuts */
-var floor = Math.floor;
-
-/* Native method shortcuts for methods with the same name as other `lodash` methods */
-var nativeRandom = Math.random;
-
-/**
- * The base implementation of `_.random` without argument juggling or support
- * for returning floating-point numbers.
- *
- * @private
- * @param {number} min The minimum possible value.
- * @param {number} max The maximum possible value.
- * @returns {number} Returns a random number.
- */
-function baseRandom(min, max) {
-  return min + floor(nativeRandom() * (max - min + 1));
-}
-
-module.exports = baseRandom;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/baseUniq.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/baseUniq.js
deleted file mode 100644
index ed0c678..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/baseUniq.js
+++ /dev/null
@@ -1,45 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseIndexOf = require('./baseIndexOf');
-
-/**
- * The base implementation of `_.uniq` without support for callback shorthands
- * or `thisArg` binding.
- *
- * @private
- * @param {Array} array The array to process.
- * @param {boolean} [isSorted=false] A flag to indicate that `array` is sorted.
- * @param {Function} [callback] The function called per iteration.
- * @returns {Array} Returns a duplicate-value-free array.
- */
-function baseUniq(array, isSorted, callback) {
-  var index = -1,
-      indexOf = baseIndexOf,
-      length = array ? array.length : 0,
-      result = [],
-      seen = callback ? [] : result;
-
-  while (++index < length) {
-    var value = array[index],
-        computed = callback ? callback(value, index, array) : value;
-
-    if (isSorted
-          ? !index || seen[seen.length - 1] !== computed
-          : indexOf(seen, computed) < 0
-        ) {
-      if (callback) {
-        seen.push(computed);
-      }
-      result.push(value);
-    }
-  }
-  return result;
-}
-
-module.exports = baseUniq;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/compareAscending.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/compareAscending.js
deleted file mode 100644
index b2d7af2..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/compareAscending.js
+++ /dev/null
@@ -1,47 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * Used by `sortBy` to compare transformed `collection` elements, stable sorting
- * them in ascending order.
- *
- * @private
- * @param {Object} a The object to compare to `b`.
- * @param {Object} b The object to compare to `a`.
- * @returns {number} Returns the sort order indicator of `1` or `-1`.
- */
-function compareAscending(a, b) {
-  var ac = a.criteria,
-      bc = b.criteria,
-      index = -1,
-      length = ac.length;
-
-  while (++index < length) {
-    var value = ac[index],
-        other = bc[index];
-
-    if (value !== other) {
-      if (value > other || typeof value == 'undefined') {
-        return 1;
-      }
-      if (value < other || typeof other == 'undefined') {
-        return -1;
-      }
-    }
-  }
-  // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications
-  // that causes it, under certain circumstances, to return the same value for
-  // `a` and `b`. See https://github.com/jashkenas/underscore/pull/1247
-  //
-  // This also ensures a stable sort in V8 and other engines.
-  // See http://code.google.com/p/v8/issues/detail?id=90
-  return a.index - b.index;
-}
-
-module.exports = compareAscending;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/createAggregator.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/createAggregator.js
deleted file mode 100644
index 72206c5..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/createAggregator.js
+++ /dev/null
@@ -1,45 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var createCallback = require('../functions/createCallback'),
-    forOwn = require('../objects/forOwn'),
-    isArray = require('../objects/isArray');
-
-/**
- * Creates a function that aggregates a collection, creating an object composed
- * of keys generated from the results of running each element of the collection
- * through a callback. The given `setter` function sets the keys and values
- * of the composed object.
- *
- * @private
- * @param {Function} setter The setter function.
- * @returns {Function} Returns the new aggregator function.
- */
-function createAggregator(setter) {
-  return function(collection, callback, thisArg) {
-    var result = {};
-    callback = createCallback(callback, thisArg, 3);
-
-    var index = -1,
-        length = collection ? collection.length : 0;
-
-    if (typeof length == 'number') {
-      while (++index < length) {
-        var value = collection[index];
-        setter(result, value, callback(value, index, collection), collection);
-      }
-    } else {
-      forOwn(collection, function(value, key, collection) {
-        setter(result, value, callback(value, key, collection), collection);
-      });
-    }
-    return result;
-  };
-}
-
-module.exports = createAggregator;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/createWrapper.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/createWrapper.js
deleted file mode 100644
index 82d8b00..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/createWrapper.js
+++ /dev/null
@@ -1,60 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseBind = require('./baseBind'),
-    baseCreateWrapper = require('./baseCreateWrapper'),
-    isFunction = require('../objects/isFunction'),
-    slice = require('./slice');
-
-/**
- * Creates a function that, when called, either curries or invokes `func`
- * with an optional `this` binding and partially applied arguments.
- *
- * @private
- * @param {Function|string} func The function or method name to reference.
- * @param {number} bitmask The bitmask of method flags to compose.
- *  The bitmask may be composed of the following flags:
- *  1 - `_.bind`
- *  2 - `_.bindKey`
- *  4 - `_.curry`
- *  8 - `_.curry` (bound)
- *  16 - `_.partial`
- *  32 - `_.partialRight`
- * @param {Array} [partialArgs] An array of arguments to prepend to those
- *  provided to the new function.
- * @param {Array} [partialRightArgs] An array of arguments to append to those
- *  provided to the new function.
- * @param {*} [thisArg] The `this` binding of `func`.
- * @param {number} [arity] The arity of `func`.
- * @returns {Function} Returns the new function.
- */
-function createWrapper(func, bitmask, partialArgs, partialRightArgs, thisArg, arity) {
-  var isBind = bitmask & 1,
-      isBindKey = bitmask & 2,
-      isCurry = bitmask & 4,
-      isCurryBound = bitmask & 8,
-      isPartial = bitmask & 16,
-      isPartialRight = bitmask & 32;
-
-  if (!isBindKey && !isFunction(func)) {
-    throw new TypeError;
-  }
-  if (isPartial && !partialArgs.length) {
-    bitmask &= ~16;
-    isPartial = partialArgs = false;
-  }
-  if (isPartialRight && !partialRightArgs.length) {
-    bitmask &= ~32;
-    isPartialRight = partialRightArgs = false;
-  }
-  // fast path for `_.bind`
-  var creater = (bitmask == 1 || bitmask === 17) ? baseBind : baseCreateWrapper;
-  return creater([func, bitmask, partialArgs, partialRightArgs, thisArg, arity]);
-}
-
-module.exports = createWrapper;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/escapeHtmlChar.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/escapeHtmlChar.js
deleted file mode 100644
index f1495bf..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/escapeHtmlChar.js
+++ /dev/null
@@ -1,22 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var htmlEscapes = require('./htmlEscapes');
-
-/**
- * Used by `escape` to convert characters to HTML entities.
- *
- * @private
- * @param {string} match The matched character to escape.
- * @returns {string} Returns the escaped character.
- */
-function escapeHtmlChar(match) {
-  return htmlEscapes[match];
-}
-
-module.exports = escapeHtmlChar;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/escapeStringChar.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/escapeStringChar.js
deleted file mode 100644
index bd88060..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/escapeStringChar.js
+++ /dev/null
@@ -1,33 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** Used to escape characters for inclusion in compiled string literals */
-var stringEscapes = {
-  '\\': '\\',
-  "'": "'",
-  '\n': 'n',
-  '\r': 'r',
-  '\t': 't',
-  '\u2028': 'u2028',
-  '\u2029': 'u2029'
-};
-
-/**
- * Used by `template` to escape characters for inclusion in compiled
- * string literals.
- *
- * @private
- * @param {string} match The matched character to escape.
- * @returns {string} Returns the escaped character.
- */
-function escapeStringChar(match) {
-  return '\\' + stringEscapes[match];
-}
-
-module.exports = escapeStringChar;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/htmlEscapes.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/htmlEscapes.js
deleted file mode 100644
index d221a5c..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/htmlEscapes.js
+++ /dev/null
@@ -1,26 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * Used to convert characters to HTML entities:
- *
- * Though the `>` character is escaped for symmetry, characters like `>` and `/`
- * don't require escaping in HTML and have no special meaning unless they're part
- * of a tag or an unquoted attribute value.
- * http://mathiasbynens.be/notes/ambiguous-ampersands (under "semi-related fun fact")
- */
-var htmlEscapes = {
-  '&': '&amp;',
-  '<': '&lt;',
-  '>': '&gt;',
-  '"': '&quot;',
-  "'": '&#x27;'
-};
-
-module.exports = htmlEscapes;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/htmlUnescapes.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/htmlUnescapes.js
deleted file mode 100644
index 0f818c1..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/htmlUnescapes.js
+++ /dev/null
@@ -1,15 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var htmlEscapes = require('./htmlEscapes'),
-    invert = require('../objects/invert');
-
-/** Used to convert HTML entities to characters */
-var htmlUnescapes = invert(htmlEscapes);
-
-module.exports = htmlUnescapes;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/indicatorObject.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/indicatorObject.js
deleted file mode 100644
index 684ec9b..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/indicatorObject.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** Used internally to indicate various things */
-var indicatorObject = {};
-
-module.exports = indicatorObject;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/isNative.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/isNative.js
deleted file mode 100644
index 5c1457e..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/isNative.js
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Used to resolve the internal [[Class]] of values */
-var toString = objectProto.toString;
-
-/** Used to detect if a method is native */
-var reNative = RegExp('^' +
-  String(toString)
-    .replace(/[.*+?^${}()|[\]\\]/g, '\\$&')
-    .replace(/toString| for [^\]]+/g, '.*?') + '$'
-);
-
-/**
- * Checks if `value` is a native function.
- *
- * @private
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if the `value` is a native function, else `false`.
- */
-function isNative(value) {
-  return typeof value == 'function' && reNative.test(value);
-}
-
-module.exports = isNative;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/keyPrefix.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/keyPrefix.js
deleted file mode 100644
index d4b4945..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/keyPrefix.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** Used to prefix keys to avoid issues with `__proto__` and properties on `Object.prototype` */
-var keyPrefix = +new Date + '';
-
-module.exports = keyPrefix;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/lodashWrapper.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/lodashWrapper.js
deleted file mode 100644
index e8d38b5..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/lodashWrapper.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * A fast path for creating `lodash` wrapper objects.
- *
- * @private
- * @param {*} value The value to wrap in a `lodash` instance.
- * @param {boolean} chainAll A flag to enable chaining for all methods
- * @returns {Object} Returns a `lodash` instance.
- */
-function lodashWrapper(value, chainAll) {
-  this.__chain__ = !!chainAll;
-  this.__wrapped__ = value;
-}
-
-module.exports = lodashWrapper;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/objectTypes.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/objectTypes.js
deleted file mode 100644
index 0ff2c28..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/objectTypes.js
+++ /dev/null
@@ -1,20 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** Used to determine if values are of the language type Object */
-var objectTypes = {
-  'boolean': false,
-  'function': true,
-  'object': true,
-  'number': false,
-  'string': false,
-  'undefined': false
-};
-
-module.exports = objectTypes;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/reEscapedHtml.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/reEscapedHtml.js
deleted file mode 100644
index 07fe67c..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/reEscapedHtml.js
+++ /dev/null
@@ -1,15 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var htmlUnescapes = require('./htmlUnescapes'),
-    keys = require('../objects/keys');
-
-/** Used to match HTML entities and HTML characters */
-var reEscapedHtml = RegExp('(' + keys(htmlUnescapes).join('|') + ')', 'g');
-
-module.exports = reEscapedHtml;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/reInterpolate.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/reInterpolate.js
deleted file mode 100644
index 07af4c8..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/reInterpolate.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** Used to match "interpolate" template delimiters */
-var reInterpolate = /<%=([\s\S]+?)%>/g;
-
-module.exports = reInterpolate;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/reUnescapedHtml.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/reUnescapedHtml.js
deleted file mode 100644
index f9cdf92..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/reUnescapedHtml.js
+++ /dev/null
@@ -1,15 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var htmlEscapes = require('./htmlEscapes'),
-    keys = require('../objects/keys');
-
-/** Used to match HTML entities and HTML characters */
-var reUnescapedHtml = RegExp('[' + keys(htmlEscapes).join('') + ']', 'g');
-
-module.exports = reUnescapedHtml;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/shimKeys.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/shimKeys.js
deleted file mode 100644
index 6471285..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/shimKeys.js
+++ /dev/null
@@ -1,38 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var objectTypes = require('./objectTypes');
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Native method shortcuts */
-var hasOwnProperty = objectProto.hasOwnProperty;
-
-/**
- * A fallback implementation of `Object.keys` which produces an array of the
- * given object's own enumerable property names.
- *
- * @private
- * @type Function
- * @param {Object} object The object to inspect.
- * @returns {Array} Returns an array of property names.
- */
-var shimKeys = function(object) {
-  var index, iterable = object, result = [];
-  if (!iterable) return result;
-  if (!(objectTypes[typeof object])) return result;
-    for (index in iterable) {
-      if (hasOwnProperty.call(iterable, index)) {
-        result.push(index);
-      }
-    }
-  return result
-};
-
-module.exports = shimKeys;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/slice.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/slice.js
deleted file mode 100644
index 7c19750..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/slice.js
+++ /dev/null
@@ -1,38 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * Slices the `collection` from the `start` index up to, but not including,
- * the `end` index.
- *
- * Note: This function is used instead of `Array#slice` to support node lists
- * in IE < 9 and to ensure dense arrays are returned.
- *
- * @private
- * @param {Array|Object|string} collection The collection to slice.
- * @param {number} start The start index.
- * @param {number} end The end index.
- * @returns {Array} Returns the new array.
- */
-function slice(array, start, end) {
-  start || (start = 0);
-  if (typeof end == 'undefined') {
-    end = array ? array.length : 0;
-  }
-  var index = -1,
-      length = end - start || 0,
-      result = Array(length < 0 ? 0 : length);
-
-  while (++index < length) {
-    result[index] = array[start + index];
-  }
-  return result;
-}
-
-module.exports = slice;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/unescapeHtmlChar.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/unescapeHtmlChar.js
deleted file mode 100644
index 080bb93..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/internals/unescapeHtmlChar.js
+++ /dev/null
@@ -1,22 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var htmlUnescapes = require('./htmlUnescapes');
-
-/**
- * Used by `unescape` to convert HTML entities to characters.
- *
- * @private
- * @param {string} match The matched character to unescape.
- * @returns {string} Returns the unescaped character.
- */
-function unescapeHtmlChar(match) {
-  return htmlUnescapes[match];
-}
-
-module.exports = unescapeHtmlChar;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects.js
deleted file mode 100644
index 1f45ee6..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects.js
+++ /dev/null
@@ -1,42 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-module.exports = {
-  'assign': require('./objects/assign'),
-  'clone': require('./objects/clone'),
-  'defaults': require('./objects/defaults'),
-  'extend': require('./objects/assign'),
-  'forIn': require('./objects/forIn'),
-  'forOwn': require('./objects/forOwn'),
-  'functions': require('./objects/functions'),
-  'has': require('./objects/has'),
-  'invert': require('./objects/invert'),
-  'isArguments': require('./objects/isArguments'),
-  'isArray': require('./objects/isArray'),
-  'isBoolean': require('./objects/isBoolean'),
-  'isDate': require('./objects/isDate'),
-  'isElement': require('./objects/isElement'),
-  'isEmpty': require('./objects/isEmpty'),
-  'isEqual': require('./objects/isEqual'),
-  'isFinite': require('./objects/isFinite'),
-  'isFunction': require('./objects/isFunction'),
-  'isNaN': require('./objects/isNaN'),
-  'isNull': require('./objects/isNull'),
-  'isNumber': require('./objects/isNumber'),
-  'isObject': require('./objects/isObject'),
-  'isRegExp': require('./objects/isRegExp'),
-  'isString': require('./objects/isString'),
-  'isUndefined': require('./objects/isUndefined'),
-  'keys': require('./objects/keys'),
-  'methods': require('./objects/functions'),
-  'omit': require('./objects/omit'),
-  'pairs': require('./objects/pairs'),
-  'pick': require('./objects/pick'),
-  'values': require('./objects/values')
-};
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/assign.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/assign.js
deleted file mode 100644
index cf2ce8a..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/assign.js
+++ /dev/null
@@ -1,58 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseCreateCallback = require('../internals/baseCreateCallback'),
-    keys = require('./keys'),
-    objectTypes = require('../internals/objectTypes');
-
-/**
- * Assigns own enumerable properties of source object(s) to the destination
- * object. Subsequent sources will overwrite property assignments of previous
- * sources. If a callback is provided it will be executed to produce the
- * assigned values. The callback is bound to `thisArg` and invoked with two
- * arguments; (objectValue, sourceValue).
- *
- * @static
- * @memberOf _
- * @type Function
- * @alias extend
- * @category Objects
- * @param {Object} object The destination object.
- * @param {...Object} [source] The source objects.
- * @param {Function} [callback] The function to customize assigning values.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Object} Returns the destination object.
- * @example
- *
- * _.assign({ 'name': 'fred' }, { 'employer': 'slate' });
- * // => { 'name': 'fred', 'employer': 'slate' }
- *
- * var defaults = _.partialRight(_.assign, function(a, b) {
- *   return typeof a == 'undefined' ? b : a;
- * });
- *
- * var object = { 'name': 'barney' };
- * defaults(object, { 'name': 'fred', 'employer': 'slate' });
- * // => { 'name': 'barney', 'employer': 'slate' }
- */
-function assign(object) {
-  if (!object) {
-    return object;
-  }
-  for (var argsIndex = 1, argsLength = arguments.length; argsIndex < argsLength; argsIndex++) {
-    var iterable = arguments[argsIndex];
-    if (iterable) {
-      for (var key in iterable) {
-        object[key] = iterable[key];
-      }
-    }
-  }
-  return object;
-}
-
-module.exports = assign;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/clone.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/clone.js
deleted file mode 100644
index f5735b2..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/clone.js
+++ /dev/null
@@ -1,61 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var assign = require('./assign'),
-    baseCreateCallback = require('../internals/baseCreateCallback'),
-    isArray = require('./isArray'),
-    isObject = require('./isObject'),
-    slice = require('../internals/slice');
-
-/**
- * Creates a clone of `value`. If `isDeep` is `true` nested objects will also
- * be cloned, otherwise they will be assigned by reference. If a callback
- * is provided it will be executed to produce the cloned values. If the
- * callback returns `undefined` cloning will be handled by the method instead.
- * The callback is bound to `thisArg` and invoked with one argument; (value).
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {*} value The value to clone.
- * @param {boolean} [isDeep=false] Specify a deep clone.
- * @param {Function} [callback] The function to customize cloning values.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {*} Returns the cloned value.
- * @example
- *
- * var characters = [
- *   { 'name': 'barney', 'age': 36 },
- *   { 'name': 'fred',   'age': 40 }
- * ];
- *
- * var shallow = _.clone(characters);
- * shallow[0] === characters[0];
- * // => true
- *
- * var deep = _.clone(characters, true);
- * deep[0] === characters[0];
- * // => false
- *
- * _.mixin({
- *   'clone': _.partialRight(_.clone, function(value) {
- *     return _.isElement(value) ? value.cloneNode(false) : undefined;
- *   })
- * });
- *
- * var clone = _.clone(document.body);
- * clone.childNodes.length;
- * // => 0
- */
-function clone(value) {
-  return isObject(value)
-    ? (isArray(value) ? slice(value) : assign({}, value))
-    : value;
-}
-
-module.exports = clone;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/defaults.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/defaults.js
deleted file mode 100644
index a27605d..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/defaults.js
+++ /dev/null
@@ -1,49 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var keys = require('./keys'),
-    objectTypes = require('../internals/objectTypes');
-
-/**
- * Assigns own enumerable properties of source object(s) to the destination
- * object for all destination properties that resolve to `undefined`. Once a
- * property is set, additional defaults of the same property will be ignored.
- *
- * @static
- * @memberOf _
- * @type Function
- * @category Objects
- * @param {Object} object The destination object.
- * @param {...Object} [source] The source objects.
- * @param- {Object} [guard] Allows working with `_.reduce` without using its
- *  `key` and `object` arguments as sources.
- * @returns {Object} Returns the destination object.
- * @example
- *
- * var object = { 'name': 'barney' };
- * _.defaults(object, { 'name': 'fred', 'employer': 'slate' });
- * // => { 'name': 'barney', 'employer': 'slate' }
- */
-function defaults(object) {
-  if (!object) {
-    return object;
-  }
-  for (var argsIndex = 1, argsLength = arguments.length; argsIndex < argsLength; argsIndex++) {
-    var iterable = arguments[argsIndex];
-    if (iterable) {
-      for (var key in iterable) {
-        if (typeof object[key] == 'undefined') {
-          object[key] = iterable[key];
-        }
-      }
-    }
-  }
-  return object;
-}
-
-module.exports = defaults;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/forIn.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/forIn.js
deleted file mode 100644
index e8d29f9..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/forIn.js
+++ /dev/null
@@ -1,54 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseCreateCallback = require('../internals/baseCreateCallback'),
-    indicatorObject = require('../internals/indicatorObject'),
-    objectTypes = require('../internals/objectTypes');
-
-/**
- * Iterates over own and inherited enumerable properties of an object,
- * executing the callback for each property. The callback is bound to `thisArg`
- * and invoked with three arguments; (value, key, object). Callbacks may exit
- * iteration early by explicitly returning `false`.
- *
- * @static
- * @memberOf _
- * @type Function
- * @category Objects
- * @param {Object} object The object to iterate over.
- * @param {Function} [callback=identity] The function called per iteration.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Object} Returns `object`.
- * @example
- *
- * function Shape() {
- *   this.x = 0;
- *   this.y = 0;
- * }
- *
- * Shape.prototype.move = function(x, y) {
- *   this.x += x;
- *   this.y += y;
- * };
- *
- * _.forIn(new Shape, function(value, key) {
- *   console.log(key);
- * });
- * // => logs 'x', 'y', and 'move' (property order is not guaranteed across environments)
- */
-var forIn = function(collection, callback) {
-  var index, iterable = collection, result = iterable;
-  if (!iterable) return result;
-  if (!objectTypes[typeof iterable]) return result;
-    for (index in iterable) {
-      if (callback(iterable[index], index, collection) === indicatorObject) return result;
-    }
-  return result
-};
-
-module.exports = forIn;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/forOwn.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/forOwn.js
deleted file mode 100644
index b91a110..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/forOwn.js
+++ /dev/null
@@ -1,53 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseCreateCallback = require('../internals/baseCreateCallback'),
-    indicatorObject = require('../internals/indicatorObject'),
-    keys = require('./keys'),
-    objectTypes = require('../internals/objectTypes');
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Native method shortcuts */
-var hasOwnProperty = objectProto.hasOwnProperty;
-
-/**
- * Iterates over own enumerable properties of an object, executing the callback
- * for each property. The callback is bound to `thisArg` and invoked with three
- * arguments; (value, key, object). Callbacks may exit iteration early by
- * explicitly returning `false`.
- *
- * @static
- * @memberOf _
- * @type Function
- * @category Objects
- * @param {Object} object The object to iterate over.
- * @param {Function} [callback=identity] The function called per iteration.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Object} Returns `object`.
- * @example
- *
- * _.forOwn({ '0': 'zero', '1': 'one', 'length': 2 }, function(num, key) {
- *   console.log(key);
- * });
- * // => logs '0', '1', and 'length' (property order is not guaranteed across environments)
- */
-var forOwn = function(collection, callback) {
-  var index, iterable = collection, result = iterable;
-  if (!iterable) return result;
-  if (!objectTypes[typeof iterable]) return result;
-    for (index in iterable) {
-      if (hasOwnProperty.call(iterable, index)) {
-        if (callback(iterable[index], index, collection) === indicatorObject) return result;
-      }
-    }
-  return result
-};
-
-module.exports = forOwn;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/functions.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/functions.js
deleted file mode 100644
index 2ac5794..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/functions.js
+++ /dev/null
@@ -1,37 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var forIn = require('./forIn'),
-    isFunction = require('./isFunction');
-
-/**
- * Creates a sorted array of property names of all enumerable properties,
- * own and inherited, of `object` that have function values.
- *
- * @static
- * @memberOf _
- * @alias methods
- * @category Objects
- * @param {Object} object The object to inspect.
- * @returns {Array} Returns an array of property names that have function values.
- * @example
- *
- * _.functions(_);
- * // => ['all', 'any', 'bind', 'bindAll', 'clone', 'compact', 'compose', ...]
- */
-function functions(object) {
-  var result = [];
-  forIn(object, function(value, key) {
-    if (isFunction(value)) {
-      result.push(key);
-    }
-  });
-  return result.sort();
-}
-
-module.exports = functions;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/has.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/has.js
deleted file mode 100644
index 838a4d6..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/has.js
+++ /dev/null
@@ -1,35 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Native method shortcuts */
-var hasOwnProperty = objectProto.hasOwnProperty;
-
-/**
- * Checks if the specified property name exists as a direct property of `object`,
- * instead of an inherited property.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {Object} object The object to inspect.
- * @param {string} key The name of the property to check.
- * @returns {boolean} Returns `true` if key is a direct property, else `false`.
- * @example
- *
- * _.has({ 'a': 1, 'b': 2, 'c': 3 }, 'b');
- * // => true
- */
-function has(object, key) {
-  return object ? hasOwnProperty.call(object, key) : false;
-}
-
-module.exports = has;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/invert.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/invert.js
deleted file mode 100644
index a9716ca..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/invert.js
+++ /dev/null
@@ -1,37 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var keys = require('./keys');
-
-/**
- * Creates an object composed of the inverted keys and values of the given object.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {Object} object The object to invert.
- * @returns {Object} Returns the created inverted object.
- * @example
- *
- * _.invert({ 'first': 'fred', 'second': 'barney' });
- * // => { 'fred': 'first', 'barney': 'second' }
- */
-function invert(object) {
-  var index = -1,
-      props = keys(object),
-      length = props.length,
-      result = {};
-
-  while (++index < length) {
-    var key = props[index];
-    result[object[key]] = key;
-  }
-  return result;
-}
-
-module.exports = invert;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/isArguments.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/isArguments.js
deleted file mode 100644
index 74736fe..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/isArguments.js
+++ /dev/null
@@ -1,51 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** `Object#toString` result shortcuts */
-var argsClass = '[object Arguments]';
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Used to resolve the internal [[Class]] of values */
-var toString = objectProto.toString;
-
-/** Native method shortcuts */
-var hasOwnProperty = objectProto.hasOwnProperty,
-    propertyIsEnumerable = objectProto.propertyIsEnumerable;
-
-/**
- * Checks if `value` is an `arguments` object.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if the `value` is an `arguments` object, else `false`.
- * @example
- *
- * (function() { return _.isArguments(arguments); })(1, 2, 3);
- * // => true
- *
- * _.isArguments([1, 2, 3]);
- * // => false
- */
-function isArguments(value) {
-  return value && typeof value == 'object' && typeof value.length == 'number' &&
-    toString.call(value) == argsClass || false;
-}
-// fallback for browsers that can't detect `arguments` objects by [[Class]]
-if (!isArguments(arguments)) {
-  isArguments = function(value) {
-    return value && typeof value == 'object' && typeof value.length == 'number' &&
-      hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee') || false;
-  };
-}
-
-module.exports = isArguments;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/isArray.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/isArray.js
deleted file mode 100644
index 7ef5cd1..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/isArray.js
+++ /dev/null
@@ -1,45 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isNative = require('../internals/isNative');
-
-/** `Object#toString` result shortcuts */
-var arrayClass = '[object Array]';
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Used to resolve the internal [[Class]] of values */
-var toString = objectProto.toString;
-
-/* Native method shortcuts for methods with the same name as other `lodash` methods */
-var nativeIsArray = isNative(nativeIsArray = Array.isArray) && nativeIsArray;
-
-/**
- * Checks if `value` is an array.
- *
- * @static
- * @memberOf _
- * @type Function
- * @category Objects
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if the `value` is an array, else `false`.
- * @example
- *
- * (function() { return _.isArray(arguments); })();
- * // => false
- *
- * _.isArray([1, 2, 3]);
- * // => true
- */
-var isArray = nativeIsArray || function(value) {
-  return value && typeof value == 'object' && typeof value.length == 'number' &&
-    toString.call(value) == arrayClass || false;
-};
-
-module.exports = isArray;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/isBoolean.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/isBoolean.js
deleted file mode 100644
index ac09e8f..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/isBoolean.js
+++ /dev/null
@@ -1,37 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** `Object#toString` result shortcuts */
-var boolClass = '[object Boolean]';
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Used to resolve the internal [[Class]] of values */
-var toString = objectProto.toString;
-
-/**
- * Checks if `value` is a boolean value.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if the `value` is a boolean value, else `false`.
- * @example
- *
- * _.isBoolean(null);
- * // => false
- */
-function isBoolean(value) {
-  return value === true || value === false ||
-    value && typeof value == 'object' && toString.call(value) == boolClass || false;
-}
-
-module.exports = isBoolean;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/isDate.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/isDate.js
deleted file mode 100644
index 2c9416a..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/isDate.js
+++ /dev/null
@@ -1,36 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** `Object#toString` result shortcuts */
-var dateClass = '[object Date]';
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Used to resolve the internal [[Class]] of values */
-var toString = objectProto.toString;
-
-/**
- * Checks if `value` is a date.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if the `value` is a date, else `false`.
- * @example
- *
- * _.isDate(new Date);
- * // => true
- */
-function isDate(value) {
-  return value && typeof value == 'object' && toString.call(value) == dateClass || false;
-}
-
-module.exports = isDate;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/isElement.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/isElement.js
deleted file mode 100644
index 86a26a0..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/isElement.js
+++ /dev/null
@@ -1,27 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * Checks if `value` is a DOM element.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if the `value` is a DOM element, else `false`.
- * @example
- *
- * _.isElement(document.body);
- * // => true
- */
-function isElement(value) {
-  return value && value.nodeType === 1 || false;
-}
-
-module.exports = isElement;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/isEmpty.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/isEmpty.js
deleted file mode 100644
index 1b90fb5..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/isEmpty.js
+++ /dev/null
@@ -1,54 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isArray = require('./isArray'),
-    isString = require('./isString');
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Native method shortcuts */
-var hasOwnProperty = objectProto.hasOwnProperty;
-
-/**
- * Checks if `value` is empty. Arrays, strings, or `arguments` objects with a
- * length of `0` and objects with no own enumerable properties are considered
- * "empty".
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {Array|Object|string} value The value to inspect.
- * @returns {boolean} Returns `true` if the `value` is empty, else `false`.
- * @example
- *
- * _.isEmpty([1, 2, 3]);
- * // => false
- *
- * _.isEmpty({});
- * // => true
- *
- * _.isEmpty('');
- * // => true
- */
-function isEmpty(value) {
-  if (!value) {
-    return true;
-  }
-  if (isArray(value) || isString(value)) {
-    return !value.length;
-  }
-  for (var key in value) {
-    if (hasOwnProperty.call(value, key)) {
-      return false;
-    }
-  }
-  return true;
-}
-
-module.exports = isEmpty;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/isEqual.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/isEqual.js
deleted file mode 100644
index 741f165..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/isEqual.js
+++ /dev/null
@@ -1,53 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseIsEqual = require('../internals/baseIsEqual');
-
-/**
- * Performs a deep comparison between two values to determine if they are
- * equivalent to each other. If a callback is provided it will be executed
- * to compare values. If the callback returns `undefined` comparisons will
- * be handled by the method instead. The callback is bound to `thisArg` and
- * invoked with two arguments; (a, b).
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {*} a The value to compare.
- * @param {*} b The other value to compare.
- * @param {Function} [callback] The function to customize comparing values.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
- * @example
- *
- * var object = { 'name': 'fred' };
- * var copy = { 'name': 'fred' };
- *
- * object == copy;
- * // => false
- *
- * _.isEqual(object, copy);
- * // => true
- *
- * var words = ['hello', 'goodbye'];
- * var otherWords = ['hi', 'goodbye'];
- *
- * _.isEqual(words, otherWords, function(a, b) {
- *   var reGreet = /^(?:hello|hi)$/i,
- *       aGreet = _.isString(a) && reGreet.test(a),
- *       bGreet = _.isString(b) && reGreet.test(b);
- *
- *   return (aGreet || bGreet) ? (aGreet == bGreet) : undefined;
- * });
- * // => true
- */
-function isEqual(a, b) {
-  return baseIsEqual(a, b);
-}
-
-module.exports = isEqual;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/isFinite.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/isFinite.js
deleted file mode 100644
index bc29c51..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/isFinite.js
+++ /dev/null
@@ -1,46 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/* Native method shortcuts for methods with the same name as other `lodash` methods */
-var nativeIsFinite = global.isFinite,
-    nativeIsNaN = global.isNaN;
-
-/**
- * Checks if `value` is, or can be coerced to, a finite number.
- *
- * Note: This is not the same as native `isFinite` which will return true for
- * booleans and empty strings. See http://es5.github.io/#x15.1.2.5.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if the `value` is finite, else `false`.
- * @example
- *
- * _.isFinite(-101);
- * // => true
- *
- * _.isFinite('10');
- * // => true
- *
- * _.isFinite(true);
- * // => false
- *
- * _.isFinite('');
- * // => false
- *
- * _.isFinite(Infinity);
- * // => false
- */
-function isFinite(value) {
-  return nativeIsFinite(value) && !nativeIsNaN(parseFloat(value));
-}
-
-module.exports = isFinite;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/isFunction.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/isFunction.js
deleted file mode 100644
index 2ef33dc..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/isFunction.js
+++ /dev/null
@@ -1,42 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** `Object#toString` result shortcuts */
-var funcClass = '[object Function]';
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Used to resolve the internal [[Class]] of values */
-var toString = objectProto.toString;
-
-/**
- * Checks if `value` is a function.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if the `value` is a function, else `false`.
- * @example
- *
- * _.isFunction(_);
- * // => true
- */
-function isFunction(value) {
-  return typeof value == 'function';
-}
-// fallback for older versions of Chrome and Safari
-if (isFunction(/x/)) {
-  isFunction = function(value) {
-    return typeof value == 'function' && toString.call(value) == funcClass;
-  };
-}
-
-module.exports = isFunction;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/isNaN.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/isNaN.js
deleted file mode 100644
index cc807b7..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/isNaN.js
+++ /dev/null
@@ -1,42 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isNumber = require('./isNumber');
-
-/**
- * Checks if `value` is `NaN`.
- *
- * Note: This is not the same as native `isNaN` which will return `true` for
- * `undefined` and other non-numeric values. See http://es5.github.io/#x15.1.2.4.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if the `value` is `NaN`, else `false`.
- * @example
- *
- * _.isNaN(NaN);
- * // => true
- *
- * _.isNaN(new Number(NaN));
- * // => true
- *
- * isNaN(undefined);
- * // => true
- *
- * _.isNaN(undefined);
- * // => false
- */
-function isNaN(value) {
-  // `NaN` as a primitive is the only value that is not equal to itself
-  // (perform the [[Class]] check first to avoid errors with some host objects in IE)
-  return isNumber(value) && value != +value;
-}
-
-module.exports = isNaN;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/isNull.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/isNull.js
deleted file mode 100644
index 8dc0797..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/isNull.js
+++ /dev/null
@@ -1,30 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * Checks if `value` is `null`.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if the `value` is `null`, else `false`.
- * @example
- *
- * _.isNull(null);
- * // => true
- *
- * _.isNull(undefined);
- * // => false
- */
-function isNull(value) {
-  return value === null;
-}
-
-module.exports = isNull;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/isNumber.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/isNumber.js
deleted file mode 100644
index f9d88af..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/isNumber.js
+++ /dev/null
@@ -1,39 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** `Object#toString` result shortcuts */
-var numberClass = '[object Number]';
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Used to resolve the internal [[Class]] of values */
-var toString = objectProto.toString;
-
-/**
- * Checks if `value` is a number.
- *
- * Note: `NaN` is considered a number. See http://es5.github.io/#x8.5.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if the `value` is a number, else `false`.
- * @example
- *
- * _.isNumber(8.4 * 5);
- * // => true
- */
-function isNumber(value) {
-  return typeof value == 'number' ||
-    value && typeof value == 'object' && toString.call(value) == numberClass || false;
-}
-
-module.exports = isNumber;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/isObject.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/isObject.js
deleted file mode 100644
index 53ceabb..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/isObject.js
+++ /dev/null
@@ -1,39 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var objectTypes = require('../internals/objectTypes');
-
-/**
- * Checks if `value` is the language type of Object.
- * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if the `value` is an object, else `false`.
- * @example
- *
- * _.isObject({});
- * // => true
- *
- * _.isObject([1, 2, 3]);
- * // => true
- *
- * _.isObject(1);
- * // => false
- */
-function isObject(value) {
-  // check if the value is the ECMAScript language type of Object
-  // http://es5.github.io/#x8
-  // and avoid a V8 bug
-  // http://code.google.com/p/v8/issues/detail?id=2291
-  return !!(value && objectTypes[typeof value]);
-}
-
-module.exports = isObject;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/isRegExp.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/isRegExp.js
deleted file mode 100644
index 48626e5..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/isRegExp.js
+++ /dev/null
@@ -1,37 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var objectTypes = require('../internals/objectTypes');
-
-/** `Object#toString` result shortcuts */
-var regexpClass = '[object RegExp]';
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Used to resolve the internal [[Class]] of values */
-var toString = objectProto.toString;
-
-/**
- * Checks if `value` is a regular expression.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if the `value` is a regular expression, else `false`.
- * @example
- *
- * _.isRegExp(/fred/);
- * // => true
- */
-function isRegExp(value) {
-  return value && objectTypes[typeof value] && toString.call(value) == regexpClass || false;
-}
-
-module.exports = isRegExp;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/isString.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/isString.js
deleted file mode 100644
index e8df7c4..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/isString.js
+++ /dev/null
@@ -1,37 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** `Object#toString` result shortcuts */
-var stringClass = '[object String]';
-
-/** Used for native method references */
-var objectProto = Object.prototype;
-
-/** Used to resolve the internal [[Class]] of values */
-var toString = objectProto.toString;
-
-/**
- * Checks if `value` is a string.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if the `value` is a string, else `false`.
- * @example
- *
- * _.isString('fred');
- * // => true
- */
-function isString(value) {
-  return typeof value == 'string' ||
-    value && typeof value == 'object' && toString.call(value) == stringClass || false;
-}
-
-module.exports = isString;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/isUndefined.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/isUndefined.js
deleted file mode 100644
index 4d54db3..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/isUndefined.js
+++ /dev/null
@@ -1,27 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * Checks if `value` is `undefined`.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if the `value` is `undefined`, else `false`.
- * @example
- *
- * _.isUndefined(void 0);
- * // => true
- */
-function isUndefined(value) {
-  return typeof value == 'undefined';
-}
-
-module.exports = isUndefined;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/keys.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/keys.js
deleted file mode 100644
index ae7401d..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/keys.js
+++ /dev/null
@@ -1,36 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isNative = require('../internals/isNative'),
-    isObject = require('./isObject'),
-    shimKeys = require('../internals/shimKeys');
-
-/* Native method shortcuts for methods with the same name as other `lodash` methods */
-var nativeKeys = isNative(nativeKeys = Object.keys) && nativeKeys;
-
-/**
- * Creates an array composed of the own enumerable property names of an object.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {Object} object The object to inspect.
- * @returns {Array} Returns an array of property names.
- * @example
- *
- * _.keys({ 'one': 1, 'two': 2, 'three': 3 });
- * // => ['one', 'two', 'three'] (property order is not guaranteed across environments)
- */
-var keys = !nativeKeys ? shimKeys : function(object) {
-  if (!isObject(object)) {
-    return [];
-  }
-  return nativeKeys(object);
-};
-
-module.exports = keys;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/omit.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/omit.js
deleted file mode 100644
index 33c65ae..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/omit.js
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseDifference = require('../internals/baseDifference'),
-    baseFlatten = require('../internals/baseFlatten'),
-    forIn = require('./forIn');
-
-/**
- * Creates a shallow clone of `object` excluding the specified properties.
- * Property names may be specified as individual arguments or as arrays of
- * property names. If a callback is provided it will be executed for each
- * property of `object` omitting the properties the callback returns truey
- * for. The callback is bound to `thisArg` and invoked with three arguments;
- * (value, key, object).
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {Object} object The source object.
- * @param {Function|...string|string[]} [callback] The properties to omit or the
- *  function called per iteration.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Object} Returns an object without the omitted properties.
- * @example
- *
- * _.omit({ 'name': 'fred', 'age': 40 }, 'age');
- * // => { 'name': 'fred' }
- *
- * _.omit({ 'name': 'fred', 'age': 40 }, function(value) {
- *   return typeof value == 'number';
- * });
- * // => { 'name': 'fred' }
- */
-function omit(object) {
-  var props = [];
-  forIn(object, function(value, key) {
-    props.push(key);
-  });
-  props = baseDifference(props, baseFlatten(arguments, true, false, 1));
-
-  var index = -1,
-      length = props.length,
-      result = {};
-
-  while (++index < length) {
-    var key = props[index];
-    result[key] = object[key];
-  }
-  return result;
-}
-
-module.exports = omit;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/pairs.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/pairs.js
deleted file mode 100644
index ea8c7ae..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/pairs.js
+++ /dev/null
@@ -1,38 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var keys = require('./keys');
-
-/**
- * Creates a two dimensional array of an object's key-value pairs,
- * i.e. `[[key1, value1], [key2, value2]]`.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {Object} object The object to inspect.
- * @returns {Array} Returns new array of key-value pairs.
- * @example
- *
- * _.pairs({ 'barney': 36, 'fred': 40 });
- * // => [['barney', 36], ['fred', 40]] (property order is not guaranteed across environments)
- */
-function pairs(object) {
-  var index = -1,
-      props = keys(object),
-      length = props.length,
-      result = Array(length);
-
-  while (++index < length) {
-    var key = props[index];
-    result[index] = [key, object[key]];
-  }
-  return result;
-}
-
-module.exports = pairs;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/pick.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/pick.js
deleted file mode 100644
index d195fb5..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/pick.js
+++ /dev/null
@@ -1,53 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseFlatten = require('../internals/baseFlatten');
-
-/**
- * Creates a shallow clone of `object` composed of the specified properties.
- * Property names may be specified as individual arguments or as arrays of
- * property names. If a callback is provided it will be executed for each
- * property of `object` picking the properties the callback returns truey
- * for. The callback is bound to `thisArg` and invoked with three arguments;
- * (value, key, object).
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {Object} object The source object.
- * @param {Function|...string|string[]} [callback] The function called per
- *  iteration or property names to pick, specified as individual property
- *  names or arrays of property names.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Object} Returns an object composed of the picked properties.
- * @example
- *
- * _.pick({ 'name': 'fred', '_userid': 'fred1' }, 'name');
- * // => { 'name': 'fred' }
- *
- * _.pick({ 'name': 'fred', '_userid': 'fred1' }, function(value, key) {
- *   return key.charAt(0) != '_';
- * });
- * // => { 'name': 'fred' }
- */
-function pick(object) {
-  var index = -1,
-      props = baseFlatten(arguments, true, false, 1),
-      length = props.length,
-      result = {};
-
-  while (++index < length) {
-    var key = props[index];
-    if (key in object) {
-      result[key] = object[key];
-    }
-  }
-  return result;
-}
-
-module.exports = pick;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/values.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/values.js
deleted file mode 100644
index d11055e..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/objects/values.js
+++ /dev/null
@@ -1,36 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var keys = require('./keys');
-
-/**
- * Creates an array composed of the own enumerable property values of `object`.
- *
- * @static
- * @memberOf _
- * @category Objects
- * @param {Object} object The object to inspect.
- * @returns {Array} Returns an array of property values.
- * @example
- *
- * _.values({ 'one': 1, 'two': 2, 'three': 3 });
- * // => [1, 2, 3] (property order is not guaranteed across environments)
- */
-function values(object) {
-  var index = -1,
-      props = keys(object),
-      length = props.length,
-      result = Array(length);
-
-  while (++index < length) {
-    result[index] = object[props[index]];
-  }
-  return result;
-}
-
-module.exports = values;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/support.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/support.js
deleted file mode 100644
index 90fbe96..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/support.js
+++ /dev/null
@@ -1,46 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isNative = require('./internals/isNative');
-
-/**
- * Used for `Array` method references.
- *
- * Normally `Array.prototype` would suffice, however, using an array literal
- * avoids issues in Narwhal.
- */
-var arrayRef = [];
-
-/**
- * An object used to flag environments features.
- *
- * @static
- * @memberOf _
- * @type Object
- */
-var support = {};
-
-(function() {
-  var object = { '0': 1, 'length': 1 };
-
-  /**
-   * Detect if `Array#shift` and `Array#splice` augment array-like objects correctly.
-   *
-   * Firefox < 10, IE compatibility mode, and IE < 9 have buggy Array `shift()`
-   * and `splice()` functions that fail to remove the last element, `value[0]`,
-   * of array-like objects even though the `length` property is set to `0`.
-   * The `shift()` method is buggy in IE 8 compatibility mode, while `splice()`
-   * is buggy regardless of mode in IE < 9 and buggy in compatibility mode in IE 9.
-   *
-   * @memberOf _.support
-   * @type boolean
-   */
-  support.spliceObjects = (arrayRef.splice.call(object, 0, 1), !object[0]);
-}(1));
-
-module.exports = support;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/utilities.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/utilities.js
deleted file mode 100644
index cef5f20..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/utilities.js
+++ /dev/null
@@ -1,26 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-module.exports = {
-  'createCallback': require('./functions/createCallback'),
-  'escape': require('./utilities/escape'),
-  'identity': require('./utilities/identity'),
-  'mixin': require('./utilities/mixin'),
-  'noConflict': require('./utilities/noConflict'),
-  'noop': require('./utilities/noop'),
-  'now': require('./utilities/now'),
-  'property': require('./utilities/property'),
-  'random': require('./utilities/random'),
-  'result': require('./utilities/result'),
-  'template': require('./utilities/template'),
-  'templateSettings': require('./utilities/templateSettings'),
-  'times': require('./utilities/times'),
-  'unescape': require('./utilities/unescape'),
-  'uniqueId': require('./utilities/uniqueId')
-};
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/utilities/escape.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/utilities/escape.js
deleted file mode 100644
index 2e1f5c0..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/utilities/escape.js
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var escapeHtmlChar = require('../internals/escapeHtmlChar'),
-    keys = require('../objects/keys'),
-    reUnescapedHtml = require('../internals/reUnescapedHtml');
-
-/**
- * Converts the characters `&`, `<`, `>`, `"`, and `'` in `string` to their
- * corresponding HTML entities.
- *
- * @static
- * @memberOf _
- * @category Utilities
- * @param {string} string The string to escape.
- * @returns {string} Returns the escaped string.
- * @example
- *
- * _.escape('Fred, Wilma, & Pebbles');
- * // => 'Fred, Wilma, &amp; Pebbles'
- */
-function escape(string) {
-  return string == null ? '' : String(string).replace(reUnescapedHtml, escapeHtmlChar);
-}
-
-module.exports = escape;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/utilities/identity.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/utilities/identity.js
deleted file mode 100644
index 5734880..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/utilities/identity.js
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * This method returns the first argument provided to it.
- *
- * @static
- * @memberOf _
- * @category Utilities
- * @param {*} value Any value.
- * @returns {*} Returns `value`.
- * @example
- *
- * var object = { 'name': 'fred' };
- * _.identity(object) === object;
- * // => true
- */
-function identity(value) {
-  return value;
-}
-
-module.exports = identity;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/utilities/mixin.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/utilities/mixin.js
deleted file mode 100644
index 9865704..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/utilities/mixin.js
+++ /dev/null
@@ -1,74 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var forEach = require('../collections/forEach'),
-    functions = require('../objects/functions'),
-    isFunction = require('../objects/isFunction');
-
-/**
- * Used for `Array` method references.
- *
- * Normally `Array.prototype` would suffice, however, using an array literal
- * avoids issues in Narwhal.
- */
-var arrayRef = [];
-
-/** Native method shortcuts */
-var push = arrayRef.push;
-
-/**
- * Adds function properties of a source object to the destination object.
- * If `object` is a function methods will be added to its prototype as well.
- *
- * @static
- * @memberOf _
- * @category Utilities
- * @param {Function|Object} [object=lodash] object The destination object.
- * @param {Object} source The object of functions to add.
- * @param {Object} [options] The options object.
- * @param {boolean} [options.chain=true] Specify whether the functions added are chainable.
- * @example
- *
- * function capitalize(string) {
- *   return string.charAt(0).toUpperCase() + string.slice(1).toLowerCase();
- * }
- *
- * _.mixin({ 'capitalize': capitalize });
- * _.capitalize('fred');
- * // => 'Fred'
- *
- * _('fred').capitalize().value();
- * // => 'Fred'
- *
- * _.mixin({ 'capitalize': capitalize }, { 'chain': false });
- * _('fred').capitalize();
- * // => 'Fred'
- */
-function mixin(object, source) {
-  var ctor = object,
-      isFunc = isFunction(ctor);
-
-  forEach(functions(source), function(methodName) {
-    var func = object[methodName] = source[methodName];
-    if (isFunc) {
-      ctor.prototype[methodName] = function() {
-        var args = [this.__wrapped__];
-        push.apply(args, arguments);
-
-        var result = func.apply(object, args);
-        if (this.__chain__) {
-          result = new ctor(result);
-          result.__chain__ = true;
-        }
-        return result;
-      };
-    }
-  });
-}
-
-module.exports = mixin;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/utilities/noConflict.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/utilities/noConflict.js
deleted file mode 100644
index 349a093..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/utilities/noConflict.js
+++ /dev/null
@@ -1,30 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** Used to restore the original `_` reference in `noConflict` */
-var oldDash = global._;
-
-/**
- * Reverts the '_' variable to its previous value and returns a reference to
- * the `lodash` function.
- *
- * @static
- * @memberOf _
- * @category Utilities
- * @returns {Function} Returns the `lodash` function.
- * @example
- *
- * var lodash = _.noConflict();
- */
-function noConflict() {
-  global._ = oldDash;
-  return this;
-}
-
-module.exports = noConflict;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/utilities/noop.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/utilities/noop.js
deleted file mode 100644
index 2756a24..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/utilities/noop.js
+++ /dev/null
@@ -1,26 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * A no-operation function.
- *
- * @static
- * @memberOf _
- * @category Utilities
- * @example
- *
- * var object = { 'name': 'fred' };
- * _.noop(object) === undefined;
- * // => true
- */
-function noop() {
-  // no operation performed
-}
-
-module.exports = noop;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/utilities/now.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/utilities/now.js
deleted file mode 100644
index c340513..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/utilities/now.js
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isNative = require('../internals/isNative');
-
-/**
- * Gets the number of milliseconds that have elapsed since the Unix epoch
- * (1 January 1970 00:00:00 UTC).
- *
- * @static
- * @memberOf _
- * @category Utilities
- * @example
- *
- * var stamp = _.now();
- * _.defer(function() { console.log(_.now() - stamp); });
- * // => logs the number of milliseconds it took for the deferred function to be called
- */
-var now = isNative(now = Date.now) && now || function() {
-  return new Date().getTime();
-};
-
-module.exports = now;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/utilities/property.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/utilities/property.js
deleted file mode 100644
index 232d11d..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/utilities/property.js
+++ /dev/null
@@ -1,40 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/**
- * Creates a "_.pluck" style function, which returns the `key` value of a
- * given object.
- *
- * @static
- * @memberOf _
- * @category Utilities
- * @param {string} key The name of the property to retrieve.
- * @returns {Function} Returns the new function.
- * @example
- *
- * var characters = [
- *   { 'name': 'fred',   'age': 40 },
- *   { 'name': 'barney', 'age': 36 }
- * ];
- *
- * var getName = _.property('name');
- *
- * _.map(characters, getName);
- * // => ['barney', 'fred']
- *
- * _.sortBy(characters, getName);
- * // => [{ 'name': 'barney', 'age': 36 }, { 'name': 'fred',   'age': 40 }]
- */
-function property(key) {
-  return function(object) {
-    return object[key];
-  };
-}
-
-module.exports = property;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/utilities/random.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/utilities/random.js
deleted file mode 100644
index fb6640e..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/utilities/random.js
+++ /dev/null
@@ -1,58 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseRandom = require('../internals/baseRandom');
-
-/** Native method shortcuts */
-var floor = Math.floor;
-
-/* Native method shortcuts for methods with the same name as other `lodash` methods */
-var nativeRandom = Math.random;
-
-/**
- * Produces a random number between `min` and `max` (inclusive). If only one
- * argument is provided a number between `0` and the given number will be
- * returned. If `floating` is truey or either `min` or `max` are floats a
- * floating-point number will be returned instead of an integer.
- *
- * @static
- * @memberOf _
- * @category Utilities
- * @param {number} [min=0] The minimum possible value.
- * @param {number} [max=1] The maximum possible value.
- * @param {boolean} [floating=false] Specify returning a floating-point number.
- * @returns {number} Returns a random number.
- * @example
- *
- * _.random(0, 5);
- * // => an integer between 0 and 5
- *
- * _.random(5);
- * // => also an integer between 0 and 5
- *
- * _.random(5, true);
- * // => a floating-point number between 0 and 5
- *
- * _.random(1.2, 5.2);
- * // => a floating-point number between 1.2 and 5.2
- */
-function random(min, max) {
-  if (min == null && max == null) {
-    max = 1;
-  }
-  min = +min || 0;
-  if (max == null) {
-    max = min;
-    min = 0;
-  } else {
-    max = +max || 0;
-  }
-  return min + floor(nativeRandom() * (max - min + 1));
-}
-
-module.exports = random;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/utilities/result.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/utilities/result.js
deleted file mode 100644
index 95d44c6..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/utilities/result.js
+++ /dev/null
@@ -1,45 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var isFunction = require('../objects/isFunction');
-
-/**
- * Resolves the value of property `key` on `object`. If `key` is a function
- * it will be invoked with the `this` binding of `object` and its result returned,
- * else the property value is returned. If `object` is falsey then `undefined`
- * is returned.
- *
- * @static
- * @memberOf _
- * @category Utilities
- * @param {Object} object The object to inspect.
- * @param {string} key The name of the property to resolve.
- * @returns {*} Returns the resolved value.
- * @example
- *
- * var object = {
- *   'cheese': 'crumpets',
- *   'stuff': function() {
- *     return 'nonsense';
- *   }
- * };
- *
- * _.result(object, 'cheese');
- * // => 'crumpets'
- *
- * _.result(object, 'stuff');
- * // => 'nonsense'
- */
-function result(object, key) {
-  if (object) {
-    var value = object[key];
-    return isFunction(value) ? object[key]() : value;
-  }
-}
-
-module.exports = result;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/utilities/template.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/utilities/template.js
deleted file mode 100644
index b6e8807..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/utilities/template.js
+++ /dev/null
@@ -1,163 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var defaults = require('../objects/defaults'),
-    escape = require('./escape'),
-    escapeStringChar = require('../internals/escapeStringChar'),
-    reInterpolate = require('../internals/reInterpolate'),
-    templateSettings = require('./templateSettings');
-
-/** Used to ensure capturing order of template delimiters */
-var reNoMatch = /($^)/;
-
-/** Used to match unescaped characters in compiled string literals */
-var reUnescapedString = /['\n\r\t\u2028\u2029\\]/g;
-
-/**
- * A micro-templating method that handles arbitrary delimiters, preserves
- * whitespace, and correctly escapes quotes within interpolated code.
- *
- * Note: In the development build, `_.template` utilizes sourceURLs for easier
- * debugging. See http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl
- *
- * For more information on precompiling templates see:
- * http://lodash.com/custom-builds
- *
- * For more information on Chrome extension sandboxes see:
- * http://developer.chrome.com/stable/extensions/sandboxingEval.html
- *
- * @static
- * @memberOf _
- * @category Utilities
- * @param {string} text The template text.
- * @param {Object} data The data object used to populate the text.
- * @param {Object} [options] The options object.
- * @param {RegExp} [options.escape] The "escape" delimiter.
- * @param {RegExp} [options.evaluate] The "evaluate" delimiter.
- * @param {Object} [options.imports] An object to import into the template as local variables.
- * @param {RegExp} [options.interpolate] The "interpolate" delimiter.
- * @param {string} [sourceURL] The sourceURL of the template's compiled source.
- * @param {string} [variable] The data object variable name.
- * @returns {Function|string} Returns a compiled function when no `data` object
- *  is given, else it returns the interpolated text.
- * @example
- *
- * // using the "interpolate" delimiter to create a compiled template
- * var compiled = _.template('hello <%= name %>');
- * compiled({ 'name': 'fred' });
- * // => 'hello fred'
- *
- * // using the "escape" delimiter to escape HTML in data property values
- * _.template('<b><%- value %></b>', { 'value': '<script>' });
- * // => '<b>&lt;script&gt;</b>'
- *
- * // using the "evaluate" delimiter to generate HTML
- * var list = '<% _.forEach(people, function(name) { %><li><%- name %></li><% }); %>';
- * _.template(list, { 'people': ['fred', 'barney'] });
- * // => '<li>fred</li><li>barney</li>'
- *
- * // using the ES6 delimiter as an alternative to the default "interpolate" delimiter
- * _.template('hello ${ name }', { 'name': 'pebbles' });
- * // => 'hello pebbles'
- *
- * // using the internal `print` function in "evaluate" delimiters
- * _.template('<% print("hello " + name); %>!', { 'name': 'barney' });
- * // => 'hello barney!'
- *
- * // using a custom template delimiters
- * _.templateSettings = {
- *   'interpolate': /{{([\s\S]+?)}}/g
- * };
- *
- * _.template('hello {{ name }}!', { 'name': 'mustache' });
- * // => 'hello mustache!'
- *
- * // using the `imports` option to import jQuery
- * var list = '<% jq.each(people, function(name) { %><li><%- name %></li><% }); %>';
- * _.template(list, { 'people': ['fred', 'barney'] }, { 'imports': { 'jq': jQuery } });
- * // => '<li>fred</li><li>barney</li>'
- *
- * // using the `sourceURL` option to specify a custom sourceURL for the template
- * var compiled = _.template('hello <%= name %>', null, { 'sourceURL': '/basic/greeting.jst' });
- * compiled(data);
- * // => find the source of "greeting.jst" under the Sources tab or Resources panel of the web inspector
- *
- * // using the `variable` option to ensure a with-statement isn't used in the compiled template
- * var compiled = _.template('hi <%= data.name %>!', null, { 'variable': 'data' });
- * compiled.source;
- * // => function(data) {
- *   var __t, __p = '', __e = _.escape;
- *   __p += 'hi ' + ((__t = ( data.name )) == null ? '' : __t) + '!';
- *   return __p;
- * }
- *
- * // using the `source` property to inline compiled templates for meaningful
- * // line numbers in error messages and a stack trace
- * fs.writeFileSync(path.join(cwd, 'jst.js'), '\
- *   var JST = {\
- *     "main": ' + _.template(mainText).source + '\
- *   };\
- * ');
- */
-function template(text, data, options) {
-  var _ = templateSettings.imports._,
-      settings = _.templateSettings || templateSettings;
-
-  text = String(text || '');
-  options = defaults({}, options, settings);
-
-  var index = 0,
-      source = "__p += '",
-      variable = options.variable;
-
-  var reDelimiters = RegExp(
-    (options.escape || reNoMatch).source + '|' +
-    (options.interpolate || reNoMatch).source + '|' +
-    (options.evaluate || reNoMatch).source + '|$'
-  , 'g');
-
-  text.replace(reDelimiters, function(match, escapeValue, interpolateValue, evaluateValue, offset) {
-    source += text.slice(index, offset).replace(reUnescapedString, escapeStringChar);
-    if (escapeValue) {
-      source += "' +\n_.escape(" + escapeValue + ") +\n'";
-    }
-    if (evaluateValue) {
-      source += "';\n" + evaluateValue + ";\n__p += '";
-    }
-    if (interpolateValue) {
-      source += "' +\n((__t = (" + interpolateValue + ")) == null ? '' : __t) +\n'";
-    }
-    index = offset + match.length;
-    return match;
-  });
-
-  source += "';\n";
-  if (!variable) {
-    variable = 'obj';
-    source = 'with (' + variable + ' || {}) {\n' + source + '\n}\n';
-  }
-  source = 'function(' + variable + ') {\n' +
-    "var __t, __p = '', __j = Array.prototype.join;\n" +
-    "function print() { __p += __j.call(arguments, '') }\n" +
-    source +
-    'return __p\n}';
-
-  try {
-    var result = Function('_', 'return ' + source)(_);
-  } catch(e) {
-    e.source = source;
-    throw e;
-  }
-  if (data) {
-    return result(data);
-  }
-  result.source = source;
-  return result;
-}
-
-module.exports = template;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/utilities/templateSettings.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/utilities/templateSettings.js
deleted file mode 100644
index 8459664..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/utilities/templateSettings.js
+++ /dev/null
@@ -1,73 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var escape = require('./escape'),
-    reInterpolate = require('../internals/reInterpolate');
-
-/**
- * By default, the template delimiters used by Lo-Dash are similar to those in
- * embedded Ruby (ERB). Change the following template settings to use alternative
- * delimiters.
- *
- * @static
- * @memberOf _
- * @type Object
- */
-var templateSettings = {
-
-  /**
-   * Used to detect `data` property values to be HTML-escaped.
-   *
-   * @memberOf _.templateSettings
-   * @type RegExp
-   */
-  'escape': /<%-([\s\S]+?)%>/g,
-
-  /**
-   * Used to detect code to be evaluated.
-   *
-   * @memberOf _.templateSettings
-   * @type RegExp
-   */
-  'evaluate': /<%([\s\S]+?)%>/g,
-
-  /**
-   * Used to detect `data` property values to inject.
-   *
-   * @memberOf _.templateSettings
-   * @type RegExp
-   */
-  'interpolate': reInterpolate,
-
-  /**
-   * Used to reference the data object in the template text.
-   *
-   * @memberOf _.templateSettings
-   * @type string
-   */
-  'variable': '',
-
-  /**
-   * Used to import variables into the compiled template.
-   *
-   * @memberOf _.templateSettings
-   * @type Object
-   */
-  'imports': {
-
-    /**
-     * A reference to the `lodash` function.
-     *
-     * @memberOf _.templateSettings.imports
-     * @type Function
-     */
-    '_': { 'escape': escape }
-  }
-};
-
-module.exports = templateSettings;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/utilities/times.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/utilities/times.js
deleted file mode 100644
index b87e512..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/utilities/times.js
+++ /dev/null
@@ -1,46 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var baseCreateCallback = require('../internals/baseCreateCallback');
-
-/**
- * Executes the callback `n` times, returning an array of the results
- * of each callback execution. The callback is bound to `thisArg` and invoked
- * with one argument; (index).
- *
- * @static
- * @memberOf _
- * @category Utilities
- * @param {number} n The number of times to execute the callback.
- * @param {Function} callback The function called per iteration.
- * @param {*} [thisArg] The `this` binding of `callback`.
- * @returns {Array} Returns an array of the results of each `callback` execution.
- * @example
- *
- * var diceRolls = _.times(3, _.partial(_.random, 1, 6));
- * // => [3, 6, 4]
- *
- * _.times(3, function(n) { mage.castSpell(n); });
- * // => calls `mage.castSpell(n)` three times, passing `n` of `0`, `1`, and `2` respectively
- *
- * _.times(3, function(n) { this.cast(n); }, mage);
- * // => also calls `mage.castSpell(n)` three times
- */
-function times(n, callback, thisArg) {
-  n = (n = +n) > -1 ? n : 0;
-  var index = -1,
-      result = Array(n);
-
-  callback = baseCreateCallback(callback, thisArg, 1);
-  while (++index < n) {
-    result[index] = callback(index);
-  }
-  return result;
-}
-
-module.exports = times;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/utilities/unescape.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/utilities/unescape.js
deleted file mode 100644
index d6050ea..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/utilities/unescape.js
+++ /dev/null
@@ -1,32 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-var keys = require('../objects/keys'),
-    reEscapedHtml = require('../internals/reEscapedHtml'),
-    unescapeHtmlChar = require('../internals/unescapeHtmlChar');
-
-/**
- * The inverse of `_.escape` this method converts the HTML entities
- * `&amp;`, `&lt;`, `&gt;`, `&quot;`, and `&#39;` in `string` to their
- * corresponding characters.
- *
- * @static
- * @memberOf _
- * @category Utilities
- * @param {string} string The string to unescape.
- * @returns {string} Returns the unescaped string.
- * @example
- *
- * _.unescape('Fred, Barney &amp; Pebbles');
- * // => 'Fred, Barney & Pebbles'
- */
-function unescape(string) {
-  return string == null ? '' : String(string).replace(reEscapedHtml, unescapeHtmlChar);
-}
-
-module.exports = unescape;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/utilities/uniqueId.js b/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/utilities/uniqueId.js
deleted file mode 100644
index e9178b6..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/node_modules/lodash-node/underscore/utilities/uniqueId.js
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
- * Build: `lodash modularize underscore exports="node" -o ./underscore/`
- * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
- * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- * Available under MIT license <http://lodash.com/license>
- */
-
-/** Used to generate unique IDs */
-var idCounter = 0;
-
-/**
- * Generates a unique ID. If `prefix` is provided the ID will be appended to it.
- *
- * @static
- * @memberOf _
- * @category Utilities
- * @param {string} [prefix] The value to prefix the ID with.
- * @returns {string} Returns the unique ID.
- * @example
- *
- * _.uniqueId('contact_');
- * // => 'contact_104'
- *
- * _.uniqueId();
- * // => '105'
- */
-function uniqueId(prefix) {
-  var id = ++idCounter + '';
-  return prefix ? prefix + id : id;
-}
-
-module.exports = uniqueId;
diff --git a/bin/node_modules/plist/node_modules/xmlbuilder/package.json b/bin/node_modules/plist/node_modules/xmlbuilder/package.json
deleted file mode 100644
index 35fb8d0..0000000
--- a/bin/node_modules/plist/node_modules/xmlbuilder/package.json
+++ /dev/null
@@ -1,65 +0,0 @@
-{
-  "name": "xmlbuilder",
-  "version": "2.2.1",
-  "keywords": [
-    "xml",
-    "xmlbuilder"
-  ],
-  "homepage": "http://github.com/oozcitak/xmlbuilder-js",
-  "description": "An XML builder for node.js",
-  "author": {
-    "name": "Ozgur Ozcitak",
-    "email": "oozcitak@gmail.com"
-  },
-  "licenses": [
-    {
-      "type": "MIT",
-      "url": "http://opensource.org/licenses/mit-license.php"
-    }
-  ],
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/oozcitak/xmlbuilder-js.git"
-  },
-  "bugs": {
-    "url": "http://github.com/oozcitak/xmlbuilder-js/issues"
-  },
-  "main": "./lib/index",
-  "engines": {
-    "node": "0.8.x || 0.10.x"
-  },
-  "dependencies": {
-    "lodash-node": "~2.4.1"
-  },
-  "devDependencies": {
-    "coffee-script": "~1.6.3",
-    "vows": "*",
-    "memwatch": "*"
-  },
-  "scripts": {
-    "prepublish": "coffee -co lib/ src/*.coffee",
-    "postpublish": "rm -rf lib",
-    "test": "vows test/*"
-  },
-  "_id": "xmlbuilder@2.2.1",
-  "dist": {
-    "shasum": "9326430f130d87435d4c4086643aa2926e105a32",
-    "tarball": "http://registry.npmjs.org/xmlbuilder/-/xmlbuilder-2.2.1.tgz"
-  },
-  "_from": "xmlbuilder@2.2.1",
-  "_npmVersion": "1.4.6",
-  "_npmUser": {
-    "name": "oozcitak",
-    "email": "oozcitak@gmail.com"
-  },
-  "maintainers": [
-    {
-      "name": "oozcitak",
-      "email": "oozcitak@gmail.com"
-    }
-  ],
-  "directories": {},
-  "_shasum": "9326430f130d87435d4c4086643aa2926e105a32",
-  "_resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-2.2.1.tgz",
-  "readme": "ERROR: No README data found!"
-}
diff --git a/bin/node_modules/plist/node_modules/xmldom/.npmignore b/bin/node_modules/plist/node_modules/xmldom/.npmignore
deleted file mode 100644
index b094a44..0000000
--- a/bin/node_modules/plist/node_modules/xmldom/.npmignore
+++ /dev/null
@@ -1,5 +0,0 @@
-test
-t
-travis.yml
-.project
-changelog
diff --git a/bin/node_modules/plist/node_modules/xmldom/.travis.yml b/bin/node_modules/plist/node_modules/xmldom/.travis.yml
deleted file mode 100644
index b95408e..0000000
--- a/bin/node_modules/plist/node_modules/xmldom/.travis.yml
+++ /dev/null
@@ -1,22 +0,0 @@
-language: node_js
-
-node_js:
-  - '0.10'
-
-branches:
-  only:
-    - master
-    - proof
-    - travis-ci
-
-# Not using `npm install --dev` because it is recursive. It will pull in the all
-# development dependencies for CoffeeScript. Way too much spew in the Travis CI
-# build output.
-
-before_install:
-  - npm install
-  - npm install istanbul coveralls
-
-env:
-  global:
-  - secure: "BxUHTsa1WVANLQoimilbZwa1MCWSdM9hOmPWBE/rsYb7uT/iiqkRXXwnWhKtN5CLvTvIQbiAzq4iyPID0S8UHrnxClYQrOuA6QkrtwgIEuDAmijao/bgxobPOremvkwXcpMGIwzYKyYQQtSEaEIQbqf6gSSKW9dBh/GZ/vfTsqo="
diff --git a/bin/node_modules/plist/node_modules/xmldom/LICENSE b/bin/node_modules/plist/node_modules/xmldom/LICENSE
deleted file mode 100644
index 68a9b5e..0000000
--- a/bin/node_modules/plist/node_modules/xmldom/LICENSE
+++ /dev/null
@@ -1,8 +0,0 @@
-You can choose any one of those:
-
-The MIT License (MIT):
-
-link:http://opensource.org/licenses/MIT
-
-LGPL:
-http://www.gnu.org/licenses/lgpl.html
diff --git a/bin/node_modules/plist/node_modules/xmldom/__package__.js b/bin/node_modules/plist/node_modules/xmldom/__package__.js
deleted file mode 100644
index b4cad28..0000000
--- a/bin/node_modules/plist/node_modules/xmldom/__package__.js
+++ /dev/null
@@ -1,4 +0,0 @@
-this.addScript('dom.js',['DOMImplementation','XMLSerializer']);
-this.addScript('dom-parser.js',['DOMHandler','DOMParser'],
-		['DOMImplementation','XMLReader']);
-this.addScript('sax.js','XMLReader');
\ No newline at end of file
diff --git a/bin/node_modules/plist/node_modules/xmldom/component.json b/bin/node_modules/plist/node_modules/xmldom/component.json
deleted file mode 100644
index 93b4d57..0000000
--- a/bin/node_modules/plist/node_modules/xmldom/component.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
-  "name": "xmldom",
-  "version": "0.1.15",
-  "main": "dom-parser.js",
-  "ignore": [
-    "**/.*",
-    "node_modules",
-    "components"
-  ]
-}
diff --git a/bin/node_modules/plist/node_modules/xmldom/dom-parser.js b/bin/node_modules/plist/node_modules/xmldom/dom-parser.js
deleted file mode 100644
index 19282ef..0000000
--- a/bin/node_modules/plist/node_modules/xmldom/dom-parser.js
+++ /dev/null
@@ -1,255 +0,0 @@
-function DOMParser(options){
-	this.options = options ||{locator:{}};
-	
-}
-DOMParser.prototype.parseFromString = function(source,mimeType){	
-	var options = this.options;
-	var sax =  new XMLReader();
-	var domBuilder = options.domBuilder || new DOMHandler();//contentHandler and LexicalHandler
-	var errorHandler = options.errorHandler;
-	var locator = options.locator;
-	var defaultNSMap = options.xmlns||{};
-	var entityMap = {'lt':'<','gt':'>','amp':'&','quot':'"','apos':"'"}
-	if(locator){
-		domBuilder.setDocumentLocator(locator)
-	}
-	
-	sax.errorHandler = buildErrorHandler(errorHandler,domBuilder,locator);
-	sax.domBuilder = options.domBuilder || domBuilder;
-	if(/\/x?html?$/.test(mimeType)){
-		entityMap.nbsp = '\xa0';
-		entityMap.copy = '\xa9';
-		defaultNSMap['']= 'http://www.w3.org/1999/xhtml';
-	}
-	if(source){
-		sax.parse(source,defaultNSMap,entityMap);
-	}else{
-		sax.errorHandler.error("invalid document source");
-	}
-	return domBuilder.document;
-}
-function buildErrorHandler(errorImpl,domBuilder,locator){
-	if(!errorImpl){
-		if(domBuilder instanceof DOMHandler){
-			return domBuilder;
-		}
-		errorImpl = domBuilder ;
-	}
-	var errorHandler = {}
-	var isCallback = errorImpl instanceof Function;
-	locator = locator||{}
-	function build(key){
-		var fn = errorImpl[key];
-		if(!fn){
-			if(isCallback){
-				fn = errorImpl.length == 2?function(msg){errorImpl(key,msg)}:errorImpl;
-			}else{
-				var i=arguments.length;
-				while(--i){
-					if(fn = errorImpl[arguments[i]]){
-						break;
-					}
-				}
-			}
-		}
-		errorHandler[key] = fn && function(msg){
-			fn(msg+_locator(locator));
-		}||function(){};
-	}
-	build('warning','warn');
-	build('error','warn','warning');
-	build('fatalError','warn','warning','error');
-	return errorHandler;
-}
-/**
- * +ContentHandler+ErrorHandler
- * +LexicalHandler+EntityResolver2
- * -DeclHandler-DTDHandler 
- * 
- * DefaultHandler:EntityResolver, DTDHandler, ContentHandler, ErrorHandler
- * DefaultHandler2:DefaultHandler,LexicalHandler, DeclHandler, EntityResolver2
- * @link http://www.saxproject.org/apidoc/org/xml/sax/helpers/DefaultHandler.html
- */
-function DOMHandler() {
-    this.cdata = false;
-}
-function position(locator,node){
-	node.lineNumber = locator.lineNumber;
-	node.columnNumber = locator.columnNumber;
-}
-/**
- * @see org.xml.sax.ContentHandler#startDocument
- * @link http://www.saxproject.org/apidoc/org/xml/sax/ContentHandler.html
- */ 
-DOMHandler.prototype = {
-	startDocument : function() {
-    	this.document = new DOMImplementation().createDocument(null, null, null);
-    	if (this.locator) {
-        	this.document.documentURI = this.locator.systemId;
-    	}
-	},
-	startElement:function(namespaceURI, localName, qName, attrs) {
-		var doc = this.document;
-	    var el = doc.createElementNS(namespaceURI, qName||localName);
-	    var len = attrs.length;
-	    appendElement(this, el);
-	    this.currentElement = el;
-	    
-		this.locator && position(this.locator,el)
-	    for (var i = 0 ; i < len; i++) {
-	        var namespaceURI = attrs.getURI(i);
-	        var value = attrs.getValue(i);
-	        var qName = attrs.getQName(i);
-			var attr = doc.createAttributeNS(namespaceURI, qName);
-			if( attr.getOffset){
-				position(attr.getOffset(1),attr)
-			}
-			attr.value = attr.nodeValue = value;
-			el.setAttributeNode(attr)
-	    }
-	},
-	endElement:function(namespaceURI, localName, qName) {
-		var current = this.currentElement
-	    var tagName = current.tagName;
-	    this.currentElement = current.parentNode;
-	},
-	startPrefixMapping:function(prefix, uri) {
-	},
-	endPrefixMapping:function(prefix) {
-	},
-	processingInstruction:function(target, data) {
-	    var ins = this.document.createProcessingInstruction(target, data);
-	    this.locator && position(this.locator,ins)
-	    appendElement(this, ins);
-	},
-	ignorableWhitespace:function(ch, start, length) {
-	},
-	characters:function(chars, start, length) {
-		chars = _toString.apply(this,arguments)
-		//console.log(chars)
-		if(this.currentElement && chars){
-			if (this.cdata) {
-				var charNode = this.document.createCDATASection(chars);
-				this.currentElement.appendChild(charNode);
-			} else {
-				var charNode = this.document.createTextNode(chars);
-				this.currentElement.appendChild(charNode);
-			}
-			this.locator && position(this.locator,charNode)
-		}
-	},
-	skippedEntity:function(name) {
-	},
-	endDocument:function() {
-		this.document.normalize();
-	},
-	setDocumentLocator:function (locator) {
-	    if(this.locator = locator){// && !('lineNumber' in locator)){
-	    	locator.lineNumber = 0;
-	    }
-	},
-	//LexicalHandler
-	comment:function(chars, start, length) {
-		chars = _toString.apply(this,arguments)
-	    var comm = this.document.createComment(chars);
-	    this.locator && position(this.locator,comm)
-	    appendElement(this, comm);
-	},
-	
-	startCDATA:function() {
-	    //used in characters() methods
-	    this.cdata = true;
-	},
-	endCDATA:function() {
-	    this.cdata = false;
-	},
-	
-	startDTD:function(name, publicId, systemId) {
-		var impl = this.document.implementation;
-	    if (impl && impl.createDocumentType) {
-	        var dt = impl.createDocumentType(name, publicId, systemId);
-	        this.locator && position(this.locator,dt)
-	        appendElement(this, dt);
-	    }
-	},
-	/**
-	 * @see org.xml.sax.ErrorHandler
-	 * @link http://www.saxproject.org/apidoc/org/xml/sax/ErrorHandler.html
-	 */
-	warning:function(error) {
-		console.warn(error,_locator(this.locator));
-	},
-	error:function(error) {
-		console.error(error,_locator(this.locator));
-	},
-	fatalError:function(error) {
-		console.error(error,_locator(this.locator));
-	    throw error;
-	}
-}
-function _locator(l){
-	if(l){
-		return '\n@'+(l.systemId ||'')+'#[line:'+l.lineNumber+',col:'+l.columnNumber+']'
-	}
-}
-function _toString(chars,start,length){
-	if(typeof chars == 'string'){
-		return chars.substr(start,length)
-	}else{//java sax connect width xmldom on rhino(what about: "? && !(chars instanceof String)")
-		if(chars.length >= start+length || start){
-			return new java.lang.String(chars,start,length)+'';
-		}
-		return chars;
-	}
-}
-
-/*
- * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/LexicalHandler.html
- * used method of org.xml.sax.ext.LexicalHandler:
- *  #comment(chars, start, length)
- *  #startCDATA()
- *  #endCDATA()
- *  #startDTD(name, publicId, systemId)
- *
- *
- * IGNORED method of org.xml.sax.ext.LexicalHandler:
- *  #endDTD()
- *  #startEntity(name)
- *  #endEntity(name)
- *
- *
- * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/DeclHandler.html
- * IGNORED method of org.xml.sax.ext.DeclHandler
- * 	#attributeDecl(eName, aName, type, mode, value)
- *  #elementDecl(name, model)
- *  #externalEntityDecl(name, publicId, systemId)
- *  #internalEntityDecl(name, value)
- * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/EntityResolver2.html
- * IGNORED method of org.xml.sax.EntityResolver2
- *  #resolveEntity(String name,String publicId,String baseURI,String systemId)
- *  #resolveEntity(publicId, systemId)
- *  #getExternalSubset(name, baseURI)
- * @link http://www.saxproject.org/apidoc/org/xml/sax/DTDHandler.html
- * IGNORED method of org.xml.sax.DTDHandler
- *  #notationDecl(name, publicId, systemId) {};
- *  #unparsedEntityDecl(name, publicId, systemId, notationName) {};
- */
-"endDTD,startEntity,endEntity,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,resolveEntity,getExternalSubset,notationDecl,unparsedEntityDecl".replace(/\w+/g,function(key){
-	DOMHandler.prototype[key] = function(){return null}
-})
-
-/* Private static helpers treated below as private instance methods, so don't need to add these to the public API; we might use a Relator to also get rid of non-standard public properties */
-function appendElement (hander,node) {
-    if (!hander.currentElement) {
-        hander.document.appendChild(node);
-    } else {
-        hander.currentElement.appendChild(node);
-    }
-}//appendChild and setAttributeNS are preformance key
-
-if(typeof require == 'function'){
-	var XMLReader = require('./sax').XMLReader;
-	var DOMImplementation = exports.DOMImplementation = require('./dom').DOMImplementation;
-	exports.XMLSerializer = require('./dom').XMLSerializer ;
-	exports.DOMParser = DOMParser;
-}
diff --git a/bin/node_modules/plist/node_modules/xmldom/dom.js b/bin/node_modules/plist/node_modules/xmldom/dom.js
deleted file mode 100644
index f79a561..0000000
--- a/bin/node_modules/plist/node_modules/xmldom/dom.js
+++ /dev/null
@@ -1,1138 +0,0 @@
-/*
- * DOM Level 2
- * Object DOMException
- * @see http://www.w3.org/TR/REC-DOM-Level-1/ecma-script-language-binding.html
- * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html
- */
-
-function copy(src,dest){
-	for(var p in src){
-		dest[p] = src[p];
-	}
-}
-/**
-^\w+\.prototype\.([_\w]+)\s*=\s*((?:.*\{\s*?[\r\n][\s\S]*?^})|\S.*?(?=[;\r\n]));?
-^\w+\.prototype\.([_\w]+)\s*=\s*(\S.*?(?=[;\r\n]));?
- */
-function _extends(Class,Super){
-	var pt = Class.prototype;
-	if(Object.create){
-		var ppt = Object.create(Super.prototype)
-		pt.__proto__ = ppt;
-	}
-	if(!(pt instanceof Super)){
-		function t(){};
-		t.prototype = Super.prototype;
-		t = new t();
-		copy(pt,t);
-		Class.prototype = pt = t;
-	}
-	if(pt.constructor != Class){
-		if(typeof Class != 'function'){
-			console.error("unknow Class:"+Class)
-		}
-		pt.constructor = Class
-	}
-}
-var htmlns = 'http://www.w3.org/1999/xhtml' ;
-// Node Types
-var NodeType = {}
-var ELEMENT_NODE                = NodeType.ELEMENT_NODE                = 1;
-var ATTRIBUTE_NODE              = NodeType.ATTRIBUTE_NODE              = 2;
-var TEXT_NODE                   = NodeType.TEXT_NODE                   = 3;
-var CDATA_SECTION_NODE          = NodeType.CDATA_SECTION_NODE          = 4;
-var ENTITY_REFERENCE_NODE       = NodeType.ENTITY_REFERENCE_NODE       = 5;
-var ENTITY_NODE                 = NodeType.ENTITY_NODE                 = 6;
-var PROCESSING_INSTRUCTION_NODE = NodeType.PROCESSING_INSTRUCTION_NODE = 7;
-var COMMENT_NODE                = NodeType.COMMENT_NODE                = 8;
-var DOCUMENT_NODE               = NodeType.DOCUMENT_NODE               = 9;
-var DOCUMENT_TYPE_NODE          = NodeType.DOCUMENT_TYPE_NODE          = 10;
-var DOCUMENT_FRAGMENT_NODE      = NodeType.DOCUMENT_FRAGMENT_NODE      = 11;
-var NOTATION_NODE               = NodeType.NOTATION_NODE               = 12;
-
-// ExceptionCode
-var ExceptionCode = {}
-var ExceptionMessage = {};
-var INDEX_SIZE_ERR              = ExceptionCode.INDEX_SIZE_ERR              = ((ExceptionMessage[1]="Index size error"),1);
-var DOMSTRING_SIZE_ERR          = ExceptionCode.DOMSTRING_SIZE_ERR          = ((ExceptionMessage[2]="DOMString size error"),2);
-var HIERARCHY_REQUEST_ERR       = ExceptionCode.HIERARCHY_REQUEST_ERR       = ((ExceptionMessage[3]="Hierarchy request error"),3);
-var WRONG_DOCUMENT_ERR          = ExceptionCode.WRONG_DOCUMENT_ERR          = ((ExceptionMessage[4]="Wrong document"),4);
-var INVALID_CHARACTER_ERR       = ExceptionCode.INVALID_CHARACTER_ERR       = ((ExceptionMessage[5]="Invalid character"),5);
-var NO_DATA_ALLOWED_ERR         = ExceptionCode.NO_DATA_ALLOWED_ERR         = ((ExceptionMessage[6]="No data allowed"),6);
-var NO_MODIFICATION_ALLOWED_ERR = ExceptionCode.NO_MODIFICATION_ALLOWED_ERR = ((ExceptionMessage[7]="No modification allowed"),7);
-var NOT_FOUND_ERR               = ExceptionCode.NOT_FOUND_ERR               = ((ExceptionMessage[8]="Not found"),8);
-var NOT_SUPPORTED_ERR           = ExceptionCode.NOT_SUPPORTED_ERR           = ((ExceptionMessage[9]="Not supported"),9);
-var INUSE_ATTRIBUTE_ERR         = ExceptionCode.INUSE_ATTRIBUTE_ERR         = ((ExceptionMessage[10]="Attribute in use"),10);
-//level2
-var INVALID_STATE_ERR        	= ExceptionCode.INVALID_STATE_ERR        	= ((ExceptionMessage[11]="Invalid state"),11);
-var SYNTAX_ERR               	= ExceptionCode.SYNTAX_ERR               	= ((ExceptionMessage[12]="Syntax error"),12);
-var INVALID_MODIFICATION_ERR 	= ExceptionCode.INVALID_MODIFICATION_ERR 	= ((ExceptionMessage[13]="Invalid modification"),13);
-var NAMESPACE_ERR            	= ExceptionCode.NAMESPACE_ERR           	= ((ExceptionMessage[14]="Invalid namespace"),14);
-var INVALID_ACCESS_ERR       	= ExceptionCode.INVALID_ACCESS_ERR      	= ((ExceptionMessage[15]="Invalid access"),15);
-
-
-function DOMException(code, message) {
-	if(message instanceof Error){
-		var error = message;
-	}else{
-		error = this;
-		Error.call(this, ExceptionMessage[code]);
-		this.message = ExceptionMessage[code];
-		if(Error.captureStackTrace) Error.captureStackTrace(this, DOMException);
-	}
-	error.code = code;
-	if(message) this.message = this.message + ": " + message;
-	return error;
-};
-DOMException.prototype = Error.prototype;
-copy(ExceptionCode,DOMException)
-/**
- * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-536297177
- * The NodeList interface provides the abstraction of an ordered collection of nodes, without defining or constraining how this collection is implemented. NodeList objects in the DOM are live.
- * The items in the NodeList are accessible via an integral index, starting from 0.
- */
-function NodeList() {
-};
-NodeList.prototype = {
-	/**
-	 * The number of nodes in the list. The range of valid child node indices is 0 to length-1 inclusive.
-	 * @standard level1
-	 */
-	length:0, 
-	/**
-	 * Returns the indexth item in the collection. If index is greater than or equal to the number of nodes in the list, this returns null.
-	 * @standard level1
-	 * @param index  unsigned long 
-	 *   Index into the collection.
-	 * @return Node
-	 * 	The node at the indexth position in the NodeList, or null if that is not a valid index. 
-	 */
-	item: function(index) {
-		return this[index] || null;
-	}
-};
-function LiveNodeList(node,refresh){
-	this._node = node;
-	this._refresh = refresh
-	_updateLiveList(this);
-}
-function _updateLiveList(list){
-	var inc = list._node._inc || list._node.ownerDocument._inc;
-	if(list._inc != inc){
-		var ls = list._refresh(list._node);
-		//console.log(ls.length)
-		__set__(list,'length',ls.length);
-		copy(ls,list);
-		list._inc = inc;
-	}
-}
-LiveNodeList.prototype.item = function(i){
-	_updateLiveList(this);
-	return this[i];
-}
-
-_extends(LiveNodeList,NodeList);
-/**
- * 
- * Objects implementing the NamedNodeMap interface are used to represent collections of nodes that can be accessed by name. Note that NamedNodeMap does not inherit from NodeList; NamedNodeMaps are not maintained in any particular order. Objects contained in an object implementing NamedNodeMap may also be accessed by an ordinal index, but this is simply to allow convenient enumeration of the contents of a NamedNodeMap, and does not imply that the DOM specifies an order to these Nodes.
- * NamedNodeMap objects in the DOM are live.
- * used for attributes or DocumentType entities 
- */
-function NamedNodeMap() {
-};
-
-function _findNodeIndex(list,node){
-	var i = list.length;
-	while(i--){
-		if(list[i] === node){return i}
-	}
-}
-
-function _addNamedNode(el,list,newAttr,oldAttr){
-	if(oldAttr){
-		list[_findNodeIndex(list,oldAttr)] = newAttr;
-	}else{
-		list[list.length++] = newAttr;
-	}
-	if(el){
-		newAttr.ownerElement = el;
-		var doc = el.ownerDocument;
-		if(doc){
-			oldAttr && _onRemoveAttribute(doc,el,oldAttr);
-			_onAddAttribute(doc,el,newAttr);
-		}
-	}
-}
-function _removeNamedNode(el,list,attr){
-	var i = _findNodeIndex(list,attr);
-	if(i>=0){
-		var lastIndex = list.length-1
-		while(i<lastIndex){
-			list[i] = list[++i]
-		}
-		list.length = lastIndex;
-		if(el){
-			var doc = el.ownerDocument;
-			if(doc){
-				_onRemoveAttribute(doc,el,attr);
-				attr.ownerElement = null;
-			}
-		}
-	}else{
-		throw DOMException(NOT_FOUND_ERR,new Error())
-	}
-}
-NamedNodeMap.prototype = {
-	length:0,
-	item:NodeList.prototype.item,
-	getNamedItem: function(key) {
-//		if(key.indexOf(':')>0 || key == 'xmlns'){
-//			return null;
-//		}
-		var i = this.length;
-		while(i--){
-			var attr = this[i];
-			if(attr.nodeName == key){
-				return attr;
-			}
-		}
-	},
-	setNamedItem: function(attr) {
-		var el = attr.ownerElement;
-		if(el && el!=this._ownerElement){
-			throw new DOMException(INUSE_ATTRIBUTE_ERR);
-		}
-		var oldAttr = this.getNamedItem(attr.nodeName);
-		_addNamedNode(this._ownerElement,this,attr,oldAttr);
-		return oldAttr;
-	},
-	/* returns Node */
-	setNamedItemNS: function(attr) {// raises: WRONG_DOCUMENT_ERR,NO_MODIFICATION_ALLOWED_ERR,INUSE_ATTRIBUTE_ERR
-		var el = attr.ownerElement, oldAttr;
-		if(el && el!=this._ownerElement){
-			throw new DOMException(INUSE_ATTRIBUTE_ERR);
-		}
-		oldAttr = this.getNamedItemNS(attr.namespaceURI,attr.localName);
-		_addNamedNode(this._ownerElement,this,attr,oldAttr);
-		return oldAttr;
-	},
-
-	/* returns Node */
-	removeNamedItem: function(key) {
-		var attr = this.getNamedItem(key);
-		_removeNamedNode(this._ownerElement,this,attr);
-		return attr;
-		
-		
-	},// raises: NOT_FOUND_ERR,NO_MODIFICATION_ALLOWED_ERR
-	
-	//for level2
-	removeNamedItemNS:function(namespaceURI,localName){
-		var attr = this.getNamedItemNS(namespaceURI,localName);
-		_removeNamedNode(this._ownerElement,this,attr);
-		return attr;
-	},
-	getNamedItemNS: function(namespaceURI, localName) {
-		var i = this.length;
-		while(i--){
-			var node = this[i];
-			if(node.localName == localName && node.namespaceURI == namespaceURI){
-				return node;
-			}
-		}
-		return null;
-	}
-};
-/**
- * @see http://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-102161490
- */
-function DOMImplementation(/* Object */ features) {
-	this._features = {};
-	if (features) {
-		for (var feature in features) {
-			 this._features = features[feature];
-		}
-	}
-};
-
-DOMImplementation.prototype = {
-	hasFeature: function(/* string */ feature, /* string */ version) {
-		var versions = this._features[feature.toLowerCase()];
-		if (versions && (!version || version in versions)) {
-			return true;
-		} else {
-			return false;
-		}
-	},
-	// Introduced in DOM Level 2:
-	createDocument:function(namespaceURI,  qualifiedName, doctype){// raises:INVALID_CHARACTER_ERR,NAMESPACE_ERR,WRONG_DOCUMENT_ERR
-		var doc = new Document();
-		doc.doctype = doctype;
-		if(doctype){
-			doc.appendChild(doctype);
-		}
-		doc.implementation = this;
-		doc.childNodes = new NodeList();
-		if(qualifiedName){
-			var root = doc.createElementNS(namespaceURI,qualifiedName);
-			doc.appendChild(root);
-		}
-		return doc;
-	},
-	// Introduced in DOM Level 2:
-	createDocumentType:function(qualifiedName, publicId, systemId){// raises:INVALID_CHARACTER_ERR,NAMESPACE_ERR
-		var node = new DocumentType();
-		node.name = qualifiedName;
-		node.nodeName = qualifiedName;
-		node.publicId = publicId;
-		node.systemId = systemId;
-		// Introduced in DOM Level 2:
-		//readonly attribute DOMString        internalSubset;
-		
-		//TODO:..
-		//  readonly attribute NamedNodeMap     entities;
-		//  readonly attribute NamedNodeMap     notations;
-		return node;
-	}
-};
-
-
-/**
- * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-1950641247
- */
-
-function Node() {
-};
-
-Node.prototype = {
-	firstChild : null,
-	lastChild : null,
-	previousSibling : null,
-	nextSibling : null,
-	attributes : null,
-	parentNode : null,
-	childNodes : null,
-	ownerDocument : null,
-	nodeValue : null,
-	namespaceURI : null,
-	prefix : null,
-	localName : null,
-	// Modified in DOM Level 2:
-	insertBefore:function(newChild, refChild){//raises 
-		return _insertBefore(this,newChild,refChild);
-	},
-	replaceChild:function(newChild, oldChild){//raises 
-		this.insertBefore(newChild,oldChild);
-		if(oldChild){
-			this.removeChild(oldChild);
-		}
-	},
-	removeChild:function(oldChild){
-		return _removeChild(this,oldChild);
-	},
-	appendChild:function(newChild){
-		return this.insertBefore(newChild,null);
-	},
-	hasChildNodes:function(){
-		return this.firstChild != null;
-	},
-	cloneNode:function(deep){
-		return cloneNode(this.ownerDocument||this,this,deep);
-	},
-	// Modified in DOM Level 2:
-	normalize:function(){
-		var child = this.firstChild;
-		while(child){
-			var next = child.nextSibling;
-			if(next && next.nodeType == TEXT_NODE && child.nodeType == TEXT_NODE){
-				this.removeChild(next);
-				child.appendData(next.data);
-			}else{
-				child.normalize();
-				child = next;
-			}
-		}
-	},
-  	// Introduced in DOM Level 2:
-	isSupported:function(feature, version){
-		return this.ownerDocument.implementation.hasFeature(feature,version);
-	},
-    // Introduced in DOM Level 2:
-    hasAttributes:function(){
-    	return this.attributes.length>0;
-    },
-    lookupPrefix:function(namespaceURI){
-    	var el = this;
-    	while(el){
-    		var map = el._nsMap;
-    		//console.dir(map)
-    		if(map){
-    			for(var n in map){
-    				if(map[n] == namespaceURI){
-    					return n;
-    				}
-    			}
-    		}
-    		el = el.nodeType == 2?el.ownerDocument : el.parentNode;
-    	}
-    	return null;
-    },
-    // Introduced in DOM Level 3:
-    lookupNamespaceURI:function(prefix){
-    	var el = this;
-    	while(el){
-    		var map = el._nsMap;
-    		//console.dir(map)
-    		if(map){
-    			if(prefix in map){
-    				return map[prefix] ;
-    			}
-    		}
-    		el = el.nodeType == 2?el.ownerDocument : el.parentNode;
-    	}
-    	return null;
-    },
-    // Introduced in DOM Level 3:
-    isDefaultNamespace:function(namespaceURI){
-    	var prefix = this.lookupPrefix(namespaceURI);
-    	return prefix == null;
-    }
-};
-
-
-function _xmlEncoder(c){
-	return c == '<' && '&lt;' ||
-         c == '>' && '&gt;' ||
-         c == '&' && '&amp;' ||
-         c == '"' && '&quot;' ||
-         '&#'+c.charCodeAt()+';'
-}
-
-
-copy(NodeType,Node);
-copy(NodeType,Node.prototype);
-
-/**
- * @param callback return true for continue,false for break
- * @return boolean true: break visit;
- */
-function _visitNode(node,callback){
-	if(callback(node)){
-		return true;
-	}
-	if(node = node.firstChild){
-		do{
-			if(_visitNode(node,callback)){return true}
-        }while(node=node.nextSibling)
-    }
-}
-
-
-
-function Document(){
-}
-function _onAddAttribute(doc,el,newAttr){
-	doc && doc._inc++;
-	var ns = newAttr.namespaceURI ;
-	if(ns == 'http://www.w3.org/2000/xmlns/'){
-		//update namespace
-		el._nsMap[newAttr.prefix?newAttr.localName:''] = newAttr.value
-	}
-}
-function _onRemoveAttribute(doc,el,newAttr,remove){
-	doc && doc._inc++;
-	var ns = newAttr.namespaceURI ;
-	if(ns == 'http://www.w3.org/2000/xmlns/'){
-		//update namespace
-		delete el._nsMap[newAttr.prefix?newAttr.localName:'']
-	}
-}
-function _onUpdateChild(doc,el,newChild){
-	if(doc && doc._inc){
-		doc._inc++;
-		//update childNodes
-		var cs = el.childNodes;
-		if(newChild){
-			cs[cs.length++] = newChild;
-		}else{
-			//console.log(1)
-			var child = el.firstChild;
-			var i = 0;
-			while(child){
-				cs[i++] = child;
-				child =child.nextSibling;
-			}
-			cs.length = i;
-		}
-	}
-}
-
-/**
- * attributes;
- * children;
- * 
- * writeable properties:
- * nodeValue,Attr:value,CharacterData:data
- * prefix
- */
-function _removeChild(parentNode,child){
-	var previous = child.previousSibling;
-	var next = child.nextSibling;
-	if(previous){
-		previous.nextSibling = next;
-	}else{
-		parentNode.firstChild = next
-	}
-	if(next){
-		next.previousSibling = previous;
-	}else{
-		parentNode.lastChild = previous;
-	}
-	_onUpdateChild(parentNode.ownerDocument,parentNode);
-	return child;
-}
-/**
- * preformance key(refChild == null)
- */
-function _insertBefore(parentNode,newChild,nextChild){
-	var cp = newChild.parentNode;
-	if(cp){
-		cp.removeChild(newChild);//remove and update
-	}
-	if(newChild.nodeType === DOCUMENT_FRAGMENT_NODE){
-		var newFirst = newChild.firstChild;
-		if (newFirst == null) {
-			return newChild;
-		}
-		var newLast = newChild.lastChild;
-	}else{
-		newFirst = newLast = newChild;
-	}
-	var pre = nextChild ? nextChild.previousSibling : parentNode.lastChild;
-
-	newFirst.previousSibling = pre;
-	newLast.nextSibling = nextChild;
-	
-	
-	if(pre){
-		pre.nextSibling = newFirst;
-	}else{
-		parentNode.firstChild = newFirst;
-	}
-	if(nextChild == null){
-		parentNode.lastChild = newLast;
-	}else{
-		nextChild.previousSibling = newLast;
-	}
-	do{
-		newFirst.parentNode = parentNode;
-	}while(newFirst !== newLast && (newFirst= newFirst.nextSibling))
-	_onUpdateChild(parentNode.ownerDocument||parentNode,parentNode);
-	//console.log(parentNode.lastChild.nextSibling == null)
-	if (newChild.nodeType == DOCUMENT_FRAGMENT_NODE) {
-		newChild.firstChild = newChild.lastChild = null;
-	}
-	return newChild;
-}
-function _appendSingleChild(parentNode,newChild){
-	var cp = newChild.parentNode;
-	if(cp){
-		var pre = parentNode.lastChild;
-		cp.removeChild(newChild);//remove and update
-		var pre = parentNode.lastChild;
-	}
-	var pre = parentNode.lastChild;
-	newChild.parentNode = parentNode;
-	newChild.previousSibling = pre;
-	newChild.nextSibling = null;
-	if(pre){
-		pre.nextSibling = newChild;
-	}else{
-		parentNode.firstChild = newChild;
-	}
-	parentNode.lastChild = newChild;
-	_onUpdateChild(parentNode.ownerDocument,parentNode,newChild);
-	return newChild;
-	//console.log("__aa",parentNode.lastChild.nextSibling == null)
-}
-Document.prototype = {
-	//implementation : null,
-	nodeName :  '#document',
-	nodeType :  DOCUMENT_NODE,
-	doctype :  null,
-	documentElement :  null,
-	_inc : 1,
-	
-	insertBefore :  function(newChild, refChild){//raises 
-		if(newChild.nodeType == DOCUMENT_FRAGMENT_NODE){
-			var child = newChild.firstChild;
-			while(child){
-				var next = child.nextSibling;
-				this.insertBefore(child,refChild);
-				child = next;
-			}
-			return newChild;
-		}
-		if(this.documentElement == null && newChild.nodeType == 1){
-			this.documentElement = newChild;
-		}
-		
-		return _insertBefore(this,newChild,refChild),(newChild.ownerDocument = this),newChild;
-	},
-	removeChild :  function(oldChild){
-		if(this.documentElement == oldChild){
-			this.documentElement = null;
-		}
-		return _removeChild(this,oldChild);
-	},
-	// Introduced in DOM Level 2:
-	importNode : function(importedNode,deep){
-		return importNode(this,importedNode,deep);
-	},
-	// Introduced in DOM Level 2:
-	getElementById :	function(id){
-		var rtv = null;
-		_visitNode(this.documentElement,function(node){
-			if(node.nodeType == 1){
-				if(node.getAttribute('id') == id){
-					rtv = node;
-					return true;
-				}
-			}
-		})
-		return rtv;
-	},
-	
-	//document factory method:
-	createElement :	function(tagName){
-		var node = new Element();
-		node.ownerDocument = this;
-		node.nodeName = tagName;
-		node.tagName = tagName;
-		node.childNodes = new NodeList();
-		var attrs	= node.attributes = new NamedNodeMap();
-		attrs._ownerElement = node;
-		return node;
-	},
-	createDocumentFragment :	function(){
-		var node = new DocumentFragment();
-		node.ownerDocument = this;
-		node.childNodes = new NodeList();
-		return node;
-	},
-	createTextNode :	function(data){
-		var node = new Text();
-		node.ownerDocument = this;
-		node.appendData(data)
-		return node;
-	},
-	createComment :	function(data){
-		var node = new Comment();
-		node.ownerDocument = this;
-		node.appendData(data)
-		return node;
-	},
-	createCDATASection :	function(data){
-		var node = new CDATASection();
-		node.ownerDocument = this;
-		node.appendData(data)
-		return node;
-	},
-	createProcessingInstruction :	function(target,data){
-		var node = new ProcessingInstruction();
-		node.ownerDocument = this;
-		node.tagName = node.target = target;
-		node.nodeValue= node.data = data;
-		return node;
-	},
-	createAttribute :	function(name){
-		var node = new Attr();
-		node.ownerDocument	= this;
-		node.name = name;
-		node.nodeName	= name;
-		node.localName = name;
-		node.specified = true;
-		return node;
-	},
-	createEntityReference :	function(name){
-		var node = new EntityReference();
-		node.ownerDocument	= this;
-		node.nodeName	= name;
-		return node;
-	},
-	// Introduced in DOM Level 2:
-	createElementNS :	function(namespaceURI,qualifiedName){
-		var node = new Element();
-		var pl = qualifiedName.split(':');
-		var attrs	= node.attributes = new NamedNodeMap();
-		node.childNodes = new NodeList();
-		node.ownerDocument = this;
-		node.nodeName = qualifiedName;
-		node.tagName = qualifiedName;
-		node.namespaceURI = namespaceURI;
-		if(pl.length == 2){
-			node.prefix = pl[0];
-			node.localName = pl[1];
-		}else{
-			//el.prefix = null;
-			node.localName = qualifiedName;
-		}
-		attrs._ownerElement = node;
-		return node;
-	},
-	// Introduced in DOM Level 2:
-	createAttributeNS :	function(namespaceURI,qualifiedName){
-		var node = new Attr();
-		var pl = qualifiedName.split(':');
-		node.ownerDocument = this;
-		node.nodeName = qualifiedName;
-		node.name = qualifiedName;
-		node.namespaceURI = namespaceURI;
-		node.specified = true;
-		if(pl.length == 2){
-			node.prefix = pl[0];
-			node.localName = pl[1];
-		}else{
-			//el.prefix = null;
-			node.localName = qualifiedName;
-		}
-		return node;
-	}
-};
-_extends(Document,Node);
-
-
-function Element() {
-	this._nsMap = {};
-};
-Element.prototype = {
-	nodeType : ELEMENT_NODE,
-	hasAttribute : function(name){
-		return this.getAttributeNode(name)!=null;
-	},
-	getAttribute : function(name){
-		var attr = this.getAttributeNode(name);
-		return attr && attr.value || '';
-	},
-	getAttributeNode : function(name){
-		return this.attributes.getNamedItem(name);
-	},
-	setAttribute : function(name, value){
-		var attr = this.ownerDocument.createAttribute(name);
-		attr.value = attr.nodeValue = "" + value;
-		this.setAttributeNode(attr)
-	},
-	removeAttribute : function(name){
-		var attr = this.getAttributeNode(name)
-		attr && this.removeAttributeNode(attr);
-	},
-	
-	//four real opeartion method
-	appendChild:function(newChild){
-		if(newChild.nodeType === DOCUMENT_FRAGMENT_NODE){
-			return this.insertBefore(newChild,null);
-		}else{
-			return _appendSingleChild(this,newChild);
-		}
-	},
-	setAttributeNode : function(newAttr){
-		return this.attributes.setNamedItem(newAttr);
-	},
-	setAttributeNodeNS : function(newAttr){
-		return this.attributes.setNamedItemNS(newAttr);
-	},
-	removeAttributeNode : function(oldAttr){
-		return this.attributes.removeNamedItem(oldAttr.nodeName);
-	},
-	//get real attribute name,and remove it by removeAttributeNode
-	removeAttributeNS : function(namespaceURI, localName){
-		var old = this.getAttributeNodeNS(namespaceURI, localName);
-		old && this.removeAttributeNode(old);
-	},
-	
-	hasAttributeNS : function(namespaceURI, localName){
-		return this.getAttributeNodeNS(namespaceURI, localName)!=null;
-	},
-	getAttributeNS : function(namespaceURI, localName){
-		var attr = this.getAttributeNodeNS(namespaceURI, localName);
-		return attr && attr.value || '';
-	},
-	setAttributeNS : function(namespaceURI, qualifiedName, value){
-		var attr = this.ownerDocument.createAttributeNS(namespaceURI, qualifiedName);
-		attr.value = attr.nodeValue = value;
-		this.setAttributeNode(attr)
-	},
-	getAttributeNodeNS : function(namespaceURI, localName){
-		return this.attributes.getNamedItemNS(namespaceURI, localName);
-	},
-	
-	getElementsByTagName : function(tagName){
-		return new LiveNodeList(this,function(base){
-			var ls = [];
-			_visitNode(base,function(node){
-				if(node !== base && node.nodeType == ELEMENT_NODE && (tagName === '*' || node.tagName == tagName)){
-					ls.push(node);
-				}
-			});
-			return ls;
-		});
-	},
-	getElementsByTagNameNS : function(namespaceURI, localName){
-		return new LiveNodeList(this,function(base){
-			var ls = [];
-			_visitNode(base,function(node){
-				if(node !== base && node.nodeType === ELEMENT_NODE && node.namespaceURI === namespaceURI && (localName === '*' || node.localName == localName)){
-					ls.push(node);
-				}
-			});
-			return ls;
-		});
-	}
-};
-Document.prototype.getElementsByTagName = Element.prototype.getElementsByTagName;
-Document.prototype.getElementsByTagNameNS = Element.prototype.getElementsByTagNameNS;
-
-
-_extends(Element,Node);
-function Attr() {
-};
-Attr.prototype.nodeType = ATTRIBUTE_NODE;
-_extends(Attr,Node);
-
-
-function CharacterData() {
-};
-CharacterData.prototype = {
-	data : '',
-	substringData : function(offset, count) {
-		return this.data.substring(offset, offset+count);
-	},
-	appendData: function(text) {
-		text = this.data+text;
-		this.nodeValue = this.data = text;
-		this.length = text.length;
-	},
-	insertData: function(offset,text) {
-		this.replaceData(offset,0,text);
-	
-	},
-	appendChild:function(newChild){
-		//if(!(newChild instanceof CharacterData)){
-			throw new Error(ExceptionMessage[3])
-		//}
-		return Node.prototype.appendChild.apply(this,arguments)
-	},
-	deleteData: function(offset, count) {
-		this.replaceData(offset,count,"");
-	},
-	replaceData: function(offset, count, text) {
-		var start = this.data.substring(0,offset);
-		var end = this.data.substring(offset+count);
-		text = start + text + end;
-		this.nodeValue = this.data = text;
-		this.length = text.length;
-	}
-}
-_extends(CharacterData,Node);
-function Text() {
-};
-Text.prototype = {
-	nodeName : "#text",
-	nodeType : TEXT_NODE,
-	splitText : function(offset) {
-		var text = this.data;
-		var newText = text.substring(offset);
-		text = text.substring(0, offset);
-		this.data = this.nodeValue = text;
-		this.length = text.length;
-		var newNode = this.ownerDocument.createTextNode(newText);
-		if(this.parentNode){
-			this.parentNode.insertBefore(newNode, this.nextSibling);
-		}
-		return newNode;
-	}
-}
-_extends(Text,CharacterData);
-function Comment() {
-};
-Comment.prototype = {
-	nodeName : "#comment",
-	nodeType : COMMENT_NODE
-}
-_extends(Comment,CharacterData);
-
-function CDATASection() {
-};
-CDATASection.prototype = {
-	nodeName : "#cdata-section",
-	nodeType : CDATA_SECTION_NODE
-}
-_extends(CDATASection,CharacterData);
-
-
-function DocumentType() {
-};
-DocumentType.prototype.nodeType = DOCUMENT_TYPE_NODE;
-_extends(DocumentType,Node);
-
-function Notation() {
-};
-Notation.prototype.nodeType = NOTATION_NODE;
-_extends(Notation,Node);
-
-function Entity() {
-};
-Entity.prototype.nodeType = ENTITY_NODE;
-_extends(Entity,Node);
-
-function EntityReference() {
-};
-EntityReference.prototype.nodeType = ENTITY_REFERENCE_NODE;
-_extends(EntityReference,Node);
-
-function DocumentFragment() {
-};
-DocumentFragment.prototype.nodeName =	"#document-fragment";
-DocumentFragment.prototype.nodeType =	DOCUMENT_FRAGMENT_NODE;
-_extends(DocumentFragment,Node);
-
-
-function ProcessingInstruction() {
-}
-ProcessingInstruction.prototype.nodeType = PROCESSING_INSTRUCTION_NODE;
-_extends(ProcessingInstruction,Node);
-function XMLSerializer(){}
-XMLSerializer.prototype.serializeToString = function(node){
-	var buf = [];
-	serializeToString(node,buf);
-	return buf.join('');
-}
-Node.prototype.toString =function(){
-	return XMLSerializer.prototype.serializeToString(this);
-}
-function serializeToString(node,buf){
-	switch(node.nodeType){
-	case ELEMENT_NODE:
-		var attrs = node.attributes;
-		var len = attrs.length;
-		var child = node.firstChild;
-		var nodeName = node.tagName;
-		var isHTML = htmlns === node.namespaceURI
-		buf.push('<',nodeName);
-		for(var i=0;i<len;i++){
-			serializeToString(attrs.item(i),buf,isHTML);
-		}
-		if(child || isHTML && !/^(?:meta|link|img|br|hr|input)$/i.test(nodeName)){
-			buf.push('>');
-			//if is cdata child node
-			if(isHTML && /^script$/i.test(nodeName)){
-				if(child){
-					buf.push(child.data);
-				}
-			}else{
-				while(child){
-					serializeToString(child,buf);
-					child = child.nextSibling;
-				}
-			}
-			buf.push('</',nodeName,'>');
-		}else{
-			buf.push('/>');
-		}
-		return;
-	case DOCUMENT_NODE:
-	case DOCUMENT_FRAGMENT_NODE:
-		var child = node.firstChild;
-		while(child){
-			serializeToString(child,buf);
-			child = child.nextSibling;
-		}
-		return;
-	case ATTRIBUTE_NODE:
-		return buf.push(' ',node.name,'="',node.value.replace(/[<&"]/g,_xmlEncoder),'"');
-	case TEXT_NODE:
-		return buf.push(node.data.replace(/[<&]/g,_xmlEncoder));
-	case CDATA_SECTION_NODE:
-		return buf.push( '<![CDATA[',node.data,']]>');
-	case COMMENT_NODE:
-		return buf.push( "<!--",node.data,"-->");
-	case DOCUMENT_TYPE_NODE:
-		var pubid = node.publicId;
-		var sysid = node.systemId;
-		buf.push('<!DOCTYPE ',node.name);
-		if(pubid){
-			buf.push(' PUBLIC "',pubid);
-			if (sysid && sysid!='.') {
-				buf.push( '" "',sysid);
-			}
-			buf.push('">');
-		}else if(sysid && sysid!='.'){
-			buf.push(' SYSTEM "',sysid,'">');
-		}else{
-			var sub = node.internalSubset;
-			if(sub){
-				buf.push(" [",sub,"]");
-			}
-			buf.push(">");
-		}
-		return;
-	case PROCESSING_INSTRUCTION_NODE:
-		return buf.push( "<?",node.target," ",node.data,"?>");
-	case ENTITY_REFERENCE_NODE:
-		return buf.push( '&',node.nodeName,';');
-	//case ENTITY_NODE:
-	//case NOTATION_NODE:
-	default:
-		buf.push('??',node.nodeName);
-	}
-}
-function importNode(doc,node,deep){
-	var node2;
-	switch (node.nodeType) {
-	case ELEMENT_NODE:
-		node2 = node.cloneNode(false);
-		node2.ownerDocument = doc;
-		//var attrs = node2.attributes;
-		//var len = attrs.length;
-		//for(var i=0;i<len;i++){
-			//node2.setAttributeNodeNS(importNode(doc,attrs.item(i),deep));
-		//}
-	case DOCUMENT_FRAGMENT_NODE:
-		break;
-	case ATTRIBUTE_NODE:
-		deep = true;
-		break;
-	//case ENTITY_REFERENCE_NODE:
-	//case PROCESSING_INSTRUCTION_NODE:
-	////case TEXT_NODE:
-	//case CDATA_SECTION_NODE:
-	//case COMMENT_NODE:
-	//	deep = false;
-	//	break;
-	//case DOCUMENT_NODE:
-	//case DOCUMENT_TYPE_NODE:
-	//cannot be imported.
-	//case ENTITY_NODE:
-	//case NOTATION_NODE:
-	//can not hit in level3
-	//default:throw e;
-	}
-	if(!node2){
-		node2 = node.cloneNode(false);//false
-	}
-	node2.ownerDocument = doc;
-	node2.parentNode = null;
-	if(deep){
-		var child = node.firstChild;
-		while(child){
-			node2.appendChild(importNode(doc,child,deep));
-			child = child.nextSibling;
-		}
-	}
-	return node2;
-}
-//
-//var _relationMap = {firstChild:1,lastChild:1,previousSibling:1,nextSibling:1,
-//					attributes:1,childNodes:1,parentNode:1,documentElement:1,doctype,};
-function cloneNode(doc,node,deep){
-	var node2 = new node.constructor();
-	for(var n in node){
-		var v = node[n];
-		if(typeof v != 'object' ){
-			if(v != node2[n]){
-				node2[n] = v;
-			}
-		}
-	}
-	if(node.childNodes){
-		node2.childNodes = new NodeList();
-	}
-	node2.ownerDocument = doc;
-	switch (node2.nodeType) {
-	case ELEMENT_NODE:
-		var attrs	= node.attributes;
-		var attrs2	= node2.attributes = new NamedNodeMap();
-		var len = attrs.length
-		attrs2._ownerElement = node2;
-		for(var i=0;i<len;i++){
-			node2.setAttributeNode(cloneNode(doc,attrs.item(i),true));
-		}
-		break;;
-	case ATTRIBUTE_NODE:
-		deep = true;
-	}
-	if(deep){
-		var child = node.firstChild;
-		while(child){
-			node2.appendChild(cloneNode(doc,child,deep));
-			child = child.nextSibling;
-		}
-	}
-	return node2;
-}
-
-function __set__(object,key,value){
-	object[key] = value
-}
-//do dynamic
-try{
-	if(Object.defineProperty){
-		Object.defineProperty(LiveNodeList.prototype,'length',{
-			get:function(){
-				_updateLiveList(this);
-				return this.$$length;
-			}
-		});
-		Object.defineProperty(Node.prototype,'textContent',{
-			get:function(){
-				return getTextContent(this);
-			},
-			set:function(data){
-				switch(this.nodeType){
-				case 1:
-				case 11:
-					while(this.firstChild){
-						this.removeChild(this.firstChild);
-					}
-					if(data || String(data)){
-						this.appendChild(this.ownerDocument.createTextNode(data));
-					}
-					break;
-				default:
-					//TODO:
-					this.data = data;
-					this.value = value;
-					this.nodeValue = data;
-				}
-			}
-		})
-		
-		function getTextContent(node){
-			switch(node.nodeType){
-			case 1:
-			case 11:
-				var buf = [];
-				node = node.firstChild;
-				while(node){
-					if(node.nodeType!==7 && node.nodeType !==8){
-						buf.push(getTextContent(node));
-					}
-					node = node.nextSibling;
-				}
-				return buf.join('');
-			default:
-				return node.nodeValue;
-			}
-		}
-		__set__ = function(object,key,value){
-			//console.log(value)
-			object['$$'+key] = value
-		}
-	}
-}catch(e){//ie8
-}
-
-if(typeof require == 'function'){
-	exports.DOMImplementation = DOMImplementation;
-	exports.XMLSerializer = XMLSerializer;
-}
diff --git a/bin/node_modules/plist/node_modules/xmldom/package.json b/bin/node_modules/plist/node_modules/xmldom/package.json
deleted file mode 100644
index f3bb6c6..0000000
--- a/bin/node_modules/plist/node_modules/xmldom/package.json
+++ /dev/null
@@ -1,96 +0,0 @@
-{
-  "name": "xmldom",
-  "version": "0.1.19",
-  "description": "A W3C Standard XML DOM(Level2 CORE) implementation and parser(DOMParser/XMLSerializer).",
-  "keywords": [
-    "w3c",
-    "dom",
-    "xml",
-    "parser",
-    "javascript",
-    "DOMParser",
-    "XMLSerializer"
-  ],
-  "author": {
-    "name": "jindw",
-    "email": "jindw@xidea.org",
-    "url": "http://www.xidea.org"
-  },
-  "homepage": "https://github.com/jindw/xmldom",
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/jindw/xmldom.git"
-  },
-  "main": "./dom-parser.js",
-  "scripts": {
-    "test": "proof platform win32 && proof test */*/*.t.js || t/test"
-  },
-  "engines": {
-    "node": ">=0.1"
-  },
-  "dependencies": {},
-  "devDependencies": {
-    "proof": "0.0.28"
-  },
-  "maintainers": [
-    {
-      "name": "jindw",
-      "email": "jindw@xidea.org"
-    },
-    {
-      "name": "yaron",
-      "email": "yaronn01@gmail.com"
-    },
-    {
-      "name": "bigeasy",
-      "email": "alan@prettyrobots.com"
-    },
-    {
-      "name": "kethinov",
-      "email": "kethinov@gmail.com"
-    }
-  ],
-  "contributors": [
-    {
-      "name": "Yaron Naveh",
-      "email": "yaronn01@gmail.com",
-      "url": "http://webservices20.blogspot.com/"
-    },
-    {
-      "name": "Harutyun Amirjanyan",
-      "email": "amirjanyan@gmail.com",
-      "url": "https://github.com/nightwing"
-    },
-    {
-      "name": "Alan Gutierrez",
-      "email": "alan@prettyrobots.com",
-      "url": "http://www.prettyrobots.com/"
-    }
-  ],
-  "bugs": {
-    "url": "http://github.com/jindw/xmldom/issues",
-    "email": "jindw@xidea.org"
-  },
-  "licenses": [
-    {
-      "type": "LGPL",
-      "url": "http://www.gnu.org/licenses/lgpl.html",
-      "MIT": "http://opensource.org/licenses/MIT"
-    }
-  ],
-  "_id": "xmldom@0.1.19",
-  "dist": {
-    "shasum": "631fc07776efd84118bf25171b37ed4d075a0abc",
-    "tarball": "http://registry.npmjs.org/xmldom/-/xmldom-0.1.19.tgz"
-  },
-  "_from": "xmldom@0.1.x",
-  "_npmVersion": "1.2.15",
-  "_npmUser": {
-    "name": "jindw",
-    "email": "jindw@xidea.org"
-  },
-  "directories": {},
-  "_shasum": "631fc07776efd84118bf25171b37ed4d075a0abc",
-  "_resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.19.tgz",
-  "readme": "ERROR: No README data found!"
-}
diff --git a/bin/node_modules/plist/node_modules/xmldom/readme.md b/bin/node_modules/plist/node_modules/xmldom/readme.md
deleted file mode 100644
index f832c44..0000000
--- a/bin/node_modules/plist/node_modules/xmldom/readme.md
+++ /dev/null
@@ -1,219 +0,0 @@
-# XMLDOM [![Build Status](https://secure.travis-ci.org/bigeasy/xmldom.png?branch=master)](http://travis-ci.org/bigeasy/xmldom) [![Coverage Status](https://coveralls.io/repos/bigeasy/xmldom/badge.png?branch=master)](https://coveralls.io/r/bigeasy/xmldom) [![NPM version](https://badge.fury.io/js/xmldom.png)](http://badge.fury.io/js/xmldom)
-
-A JavaScript implementation of W3C DOM for Node.js, Rhino and the browser. Fully
-compatible with `W3C DOM level2`; and some compatible with `level3`. Supports
-`DOMParser` and `XMLSerializer` interface such as in browser.
-
-Install:
--------
->npm install xmldom
-
-Example:
-====
-```javascript
-var DOMParser = require('xmldom').DOMParser;
-var doc = new DOMParser().parseFromString(
-    '<xml xmlns="a" xmlns:c="./lite">\n'+
-        '\t<child>test</child>\n'+
-        '\t<child></child>\n'+
-        '\t<child/>\n'+
-    '</xml>'
-    ,'text/xml');
-doc.documentElement.setAttribute('x','y');
-doc.documentElement.setAttributeNS('./lite','c:x','y2');
-var nsAttr = doc.documentElement.getAttributeNS('./lite','x')
-console.info(nsAttr)
-console.info(doc)
-```
-API Reference
-=====
-
- * [DOMParser](https://developer.mozilla.org/en/DOMParser):
-
-	```javascript
-	parseFromString(xmlsource,mimeType)
-	```
-	* **options extension** _by xmldom_(not BOM standard!!)
-
-	```javascript
-	//added the options argument
-	new DOMParser(options)
-	
-	//errorHandler is supported
-	new DOMParser({
-		/**
-		 * locator is always need for error position info
-		 */
-		locator:{},
-		/**
-		 * you can override the errorHandler for xml parser
-		 * @link http://www.saxproject.org/apidoc/org/xml/sax/ErrorHandler.html
-		 */
-		errorHandler:{warning:function(w){console.warn(w)},error:callback,fatalError:callback}
-		//only callback model
-		//errorHandler:function(level,msg){console.log(level,msg)}
-	})
-		
-	```
-
- * [XMLSerializer](https://developer.mozilla.org/en/XMLSerializer)
- 
-	```javascript
-	serializeToString(node)
-	```
-DOM level2 method and attribute:
-------
-
- * [Node](http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-1950641247)
-	
-		attribute:
-			nodeValue|prefix
-		readonly attribute:
-			nodeName|nodeType|parentNode|childNodes|firstChild|lastChild|previousSibling|nextSibling|attributes|ownerDocument|namespaceURI|localName
-		method:	
-			insertBefore(newChild, refChild)
-			replaceChild(newChild, oldChild)
-			removeChild(oldChild)
-			appendChild(newChild)
-			hasChildNodes()
-			cloneNode(deep)
-			normalize()
-			isSupported(feature, version)
-			hasAttributes()
-
- * [DOMImplementation](http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-102161490)
-		
-		method:
-			hasFeature(feature, version)
-			createDocumentType(qualifiedName, publicId, systemId)
-			createDocument(namespaceURI, qualifiedName, doctype)
-
- * [Document](http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#i-Document) : Node
-		
-		readonly attribute:
-			doctype|implementation|documentElement
-		method:
-			createElement(tagName)
-			createDocumentFragment()
-			createTextNode(data)
-			createComment(data)
-			createCDATASection(data)
-			createProcessingInstruction(target, data)
-			createAttribute(name)
-			createEntityReference(name)
-			getElementsByTagName(tagname)
-			importNode(importedNode, deep)
-			createElementNS(namespaceURI, qualifiedName)
-			createAttributeNS(namespaceURI, qualifiedName)
-			getElementsByTagNameNS(namespaceURI, localName)
-			getElementById(elementId)
-
- * [DocumentFragment](http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-B63ED1A3) : Node
- * [Element](http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-745549614) : Node
-		
-		readonly attribute:
-			tagName
-		method:
-			getAttribute(name)
-			setAttribute(name, value)
-			removeAttribute(name)
-			getAttributeNode(name)
-			setAttributeNode(newAttr)
-			removeAttributeNode(oldAttr)
-			getElementsByTagName(name)
-			getAttributeNS(namespaceURI, localName)
-			setAttributeNS(namespaceURI, qualifiedName, value)
-			removeAttributeNS(namespaceURI, localName)
-			getAttributeNodeNS(namespaceURI, localName)
-			setAttributeNodeNS(newAttr)
-			getElementsByTagNameNS(namespaceURI, localName)
-			hasAttribute(name)
-			hasAttributeNS(namespaceURI, localName)
-
- * [Attr](http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-637646024) : Node
-	
-		attribute:
-			value
-		readonly attribute:
-			name|specified|ownerElement
-
- * [NodeList](http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-536297177)
-		
-		readonly attribute:
-			length
-		method:
-			item(index)
-	
- * [NamedNodeMap](http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-1780488922)
-
-		readonly attribute:
-			length
-		method:
-			getNamedItem(name)
-			setNamedItem(arg)
-			removeNamedItem(name)
-			item(index)
-			getNamedItemNS(namespaceURI, localName)
-			setNamedItemNS(arg)
-			removeNamedItemNS(namespaceURI, localName)
-		
- * [CharacterData](http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-FF21A306) : Node
-	
-		method:
-			substringData(offset, count)
-			appendData(arg)
-			insertData(offset, arg)
-			deleteData(offset, count)
-			replaceData(offset, count, arg)
-		
- * [Text](http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-1312295772) : CharacterData
-	
-		method:
-			splitText(offset)
-			
- * [CDATASection](http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-667469212)
- * [Comment](http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-1728279322) : CharacterData
-	
- * [DocumentType](http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-412266927)
-	
-		readonly attribute:
-			name|entities|notations|publicId|systemId|internalSubset
-			
- * Notation : Node
-	
-		readonly attribute:
-			publicId|systemId
-			
- * Entity : Node
-	
-		readonly attribute:
-			publicId|systemId|notationName
-			
- * EntityReference : Node 
- * ProcessingInstruction : Node 
-	
-		attribute:
-			data
-		readonly attribute:
-			target
-		
-DOM level 3 support:
------
-
- * [Node](http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-textContent)
-		
-		attribute:
-			textContent
-		method:
-			isDefaultNamespace(namespaceURI){
-			lookupNamespaceURI(prefix)
-
-DOM extension by xmldom
----
- * [Node] Source position extension; 
-		
-		attribute:
-			//Numbered starting from '1'
-			lineNumber
-			//Numbered starting from '1'
-			columnNumber
diff --git a/bin/node_modules/plist/node_modules/xmldom/sax.js b/bin/node_modules/plist/node_modules/xmldom/sax.js
deleted file mode 100644
index ff8d940..0000000
--- a/bin/node_modules/plist/node_modules/xmldom/sax.js
+++ /dev/null
@@ -1,584 +0,0 @@
-//[4]   	NameStartChar	   ::=   	":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]
-//[4a]   	NameChar	   ::=   	NameStartChar | "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]
-//[5]   	Name	   ::=   	NameStartChar (NameChar)*
-var nameStartChar = /[A-Z_a-z\xC0-\xD6\xD8-\xF6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]///\u10000-\uEFFFF
-var nameChar = new RegExp("[\\-\\.0-9"+nameStartChar.source.slice(1,-1)+"\u00B7\u0300-\u036F\\ux203F-\u2040]");
-var tagNamePattern = new RegExp('^'+nameStartChar.source+nameChar.source+'*(?:\:'+nameStartChar.source+nameChar.source+'*)?$');
-//var tagNamePattern = /^[a-zA-Z_][\w\-\.]*(?:\:[a-zA-Z_][\w\-\.]*)?$/
-//var handlers = 'resolveEntity,getExternalSubset,characters,endDocument,endElement,endPrefixMapping,ignorableWhitespace,processingInstruction,setDocumentLocator,skippedEntity,startDocument,startElement,startPrefixMapping,notationDecl,unparsedEntityDecl,error,fatalError,warning,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,comment,endCDATA,endDTD,endEntity,startCDATA,startDTD,startEntity'.split(',')
-
-//S_TAG,	S_ATTR,	S_EQ,	S_V
-//S_ATTR_S,	S_E,	S_S,	S_C
-var S_TAG = 0;//tag name offerring
-var S_ATTR = 1;//attr name offerring 
-var S_ATTR_S=2;//attr name end and space offer
-var S_EQ = 3;//=space?
-var S_V = 4;//attr value(no quot value only)
-var S_E = 5;//attr value end and no space(quot end)
-var S_S = 6;//(attr value end || tag end ) && (space offer)
-var S_C = 7;//closed el<el />
-
-function XMLReader(){
-	
-}
-
-XMLReader.prototype = {
-	parse:function(source,defaultNSMap,entityMap){
-		var domBuilder = this.domBuilder;
-		domBuilder.startDocument();
-		_copy(defaultNSMap ,defaultNSMap = {})
-		parse(source,defaultNSMap,entityMap,
-				domBuilder,this.errorHandler);
-		domBuilder.endDocument();
-	}
-}
-function parse(source,defaultNSMapCopy,entityMap,domBuilder,errorHandler){
-  function fixedFromCharCode(code) {
-		// String.prototype.fromCharCode does not supports
-		// > 2 bytes unicode chars directly
-		if (code > 0xffff) {
-			code -= 0x10000;
-			var surrogate1 = 0xd800 + (code >> 10)
-				, surrogate2 = 0xdc00 + (code & 0x3ff);
-
-			return String.fromCharCode(surrogate1, surrogate2);
-		} else {
-			return String.fromCharCode(code);
-		}
-	}
-	function entityReplacer(a){
-		var k = a.slice(1,-1);
-		if(k in entityMap){
-			return entityMap[k]; 
-		}else if(k.charAt(0) === '#'){
-			return fixedFromCharCode(parseInt(k.substr(1).replace('x','0x')))
-		}else{
-			errorHandler.error('entity not found:'+a);
-			return a;
-		}
-	}
-	function appendText(end){//has some bugs
-		var xt = source.substring(start,end).replace(/&#?\w+;/g,entityReplacer);
-		locator&&position(start);
-		domBuilder.characters(xt,0,end-start);
-		start = end
-	}
-	function position(start,m){
-		while(start>=endPos && (m = linePattern.exec(source))){
-			startPos = m.index;
-			endPos = startPos + m[0].length;
-			locator.lineNumber++;
-			//console.log('line++:',locator,startPos,endPos)
-		}
-		locator.columnNumber = start-startPos+1;
-	}
-	var startPos = 0;
-	var endPos = 0;
-	var linePattern = /.+(?:\r\n?|\n)|.*$/g
-	var locator = domBuilder.locator;
-	
-	var parseStack = [{currentNSMap:defaultNSMapCopy}]
-	var closeMap = {};
-	var start = 0;
-	while(true){
-		var i = source.indexOf('<',start);
-		if(i<0){
-			if(!source.substr(start).match(/^\s*$/)){
-				var doc = domBuilder.document;
-    			var text = doc.createTextNode(source.substr(start));
-    			doc.appendChild(text);
-    			domBuilder.currentElement = text;
-			}
-			return;
-		}
-		if(i>start){
-			appendText(i);
-		}
-		switch(source.charAt(i+1)){
-		case '/':
-			var end = source.indexOf('>',i+3);
-			var tagName = source.substring(i+2,end);
-			var config = parseStack.pop();
-			var localNSMap = config.localNSMap;
-			
-	        if(config.tagName != tagName){
-	            errorHandler.fatalError("end tag name: "+tagName+' is not match the current start tagName:'+config.tagName );
-	        }
-			domBuilder.endElement(config.uri,config.localName,tagName);
-			if(localNSMap){
-				for(var prefix in localNSMap){
-					domBuilder.endPrefixMapping(prefix) ;
-				}
-			}
-			end++;
-			break;
-			// end elment
-		case '?':// <?...?>
-			locator&&position(i);
-			end = parseInstruction(source,i,domBuilder);
-			break;
-		case '!':// <!doctype,<![CDATA,<!--
-			locator&&position(i);
-			end = parseDCC(source,i,domBuilder,errorHandler);
-			break;
-		default:
-			try{
-				locator&&position(i);
-				
-				var el = new ElementAttributes();
-				
-				//elStartEnd
-				var end = parseElementStartPart(source,i,el,entityReplacer,errorHandler);
-				var len = el.length;
-				//position fixed
-				if(len && locator){
-					var backup = copyLocator(locator,{});
-					for(var i = 0;i<len;i++){
-						var a = el[i];
-						position(a.offset);
-						a.offset = copyLocator(locator,{});
-					}
-					copyLocator(backup,locator);
-				}
-				if(!el.closed && fixSelfClosed(source,end,el.tagName,closeMap)){
-					el.closed = true;
-					if(!entityMap.nbsp){
-						errorHandler.warning('unclosed xml attribute');
-					}
-				}
-				appendElement(el,domBuilder,parseStack);
-				
-				
-				if(el.uri === 'http://www.w3.org/1999/xhtml' && !el.closed){
-					end = parseHtmlSpecialContent(source,end,el.tagName,entityReplacer,domBuilder)
-				}else{
-					end++;
-				}
-			}catch(e){
-				errorHandler.error('element parse error: '+e);
-				end = -1;
-			}
-
-		}
-		if(end<0){
-			//TODO: 这里有可能sax回退,有位置错误风险
-			appendText(i+1);
-		}else{
-			start = end;
-		}
-	}
-}
-function copyLocator(f,t){
-	t.lineNumber = f.lineNumber;
-	t.columnNumber = f.columnNumber;
-	return t;
-	
-}
-
-/**
- * @see #appendElement(source,elStartEnd,el,selfClosed,entityReplacer,domBuilder,parseStack);
- * @return end of the elementStartPart(end of elementEndPart for selfClosed el)
- */
-function parseElementStartPart(source,start,el,entityReplacer,errorHandler){
-	var attrName;
-	var value;
-	var p = ++start;
-	var s = S_TAG;//status
-	while(true){
-		var c = source.charAt(p);
-		switch(c){
-		case '=':
-			if(s === S_ATTR){//attrName
-				attrName = source.slice(start,p);
-				s = S_EQ;
-			}else if(s === S_ATTR_S){
-				s = S_EQ;
-			}else{
-				//fatalError: equal must after attrName or space after attrName
-				throw new Error('attribute equal must after attrName');
-			}
-			break;
-		case '\'':
-		case '"':
-			if(s === S_EQ){//equal
-				start = p+1;
-				p = source.indexOf(c,start)
-				if(p>0){
-					value = source.slice(start,p).replace(/&#?\w+;/g,entityReplacer);
-					el.add(attrName,value,start-1);
-					s = S_E;
-				}else{
-					//fatalError: no end quot match
-					throw new Error('attribute value no end \''+c+'\' match');
-				}
-			}else if(s == S_V){
-				value = source.slice(start,p).replace(/&#?\w+;/g,entityReplacer);
-				//console.log(attrName,value,start,p)
-				el.add(attrName,value,start);
-				//console.dir(el)
-				errorHandler.warning('attribute "'+attrName+'" missed start quot('+c+')!!');
-				start = p+1;
-				s = S_E
-			}else{
-				//fatalError: no equal before
-				throw new Error('attribute value must after "="');
-			}
-			break;
-		case '/':
-			switch(s){
-			case S_TAG:
-				el.setTagName(source.slice(start,p));
-			case S_E:
-			case S_S:
-			case S_C:
-				s = S_C;
-				el.closed = true;
-			case S_V:
-			case S_ATTR:
-			case S_ATTR_S:
-				break;
-			//case S_EQ:
-			default:
-				throw new Error("attribute invalid close char('/')")
-			}
-			break;
-		case ''://end document
-			//throw new Error('unexpected end of input')
-			errorHandler.error('unexpected end of input');
-		case '>':
-			switch(s){
-			case S_TAG:
-				el.setTagName(source.slice(start,p));
-			case S_E:
-			case S_S:
-			case S_C:
-				break;//normal
-			case S_V://Compatible state
-			case S_ATTR:
-				value = source.slice(start,p);
-				if(value.slice(-1) === '/'){
-					el.closed  = true;
-					value = value.slice(0,-1)
-				}
-			case S_ATTR_S:
-				if(s === S_ATTR_S){
-					value = attrName;
-				}
-				if(s == S_V){
-					errorHandler.warning('attribute "'+value+'" missed quot(")!!');
-					el.add(attrName,value.replace(/&#?\w+;/g,entityReplacer),start)
-				}else{
-					errorHandler.warning('attribute "'+value+'" missed value!! "'+value+'" instead!!')
-					el.add(value,value,start)
-				}
-				break;
-			case S_EQ:
-				throw new Error('attribute value missed!!');
-			}
-//			console.log(tagName,tagNamePattern,tagNamePattern.test(tagName))
-			return p;
-		/*xml space '\x20' | #x9 | #xD | #xA; */
-		case '\u0080':
-			c = ' ';
-		default:
-			if(c<= ' '){//space
-				switch(s){
-				case S_TAG:
-					el.setTagName(source.slice(start,p));//tagName
-					s = S_S;
-					break;
-				case S_ATTR:
-					attrName = source.slice(start,p)
-					s = S_ATTR_S;
-					break;
-				case S_V:
-					var value = source.slice(start,p).replace(/&#?\w+;/g,entityReplacer);
-					errorHandler.warning('attribute "'+value+'" missed quot(")!!');
-					el.add(attrName,value,start)
-				case S_E:
-					s = S_S;
-					break;
-				//case S_S:
-				//case S_EQ:
-				//case S_ATTR_S:
-				//	void();break;
-				//case S_C:
-					//ignore warning
-				}
-			}else{//not space
-//S_TAG,	S_ATTR,	S_EQ,	S_V
-//S_ATTR_S,	S_E,	S_S,	S_C
-				switch(s){
-				//case S_TAG:void();break;
-				//case S_ATTR:void();break;
-				//case S_V:void();break;
-				case S_ATTR_S:
-					errorHandler.warning('attribute "'+attrName+'" missed value!! "'+attrName+'" instead!!')
-					el.add(attrName,attrName,start);
-					start = p;
-					s = S_ATTR;
-					break;
-				case S_E:
-					errorHandler.warning('attribute space is required"'+attrName+'"!!')
-				case S_S:
-					s = S_ATTR;
-					start = p;
-					break;
-				case S_EQ:
-					s = S_V;
-					start = p;
-					break;
-				case S_C:
-					throw new Error("elements closed character '/' and '>' must be connected to");
-				}
-			}
-		}
-		p++;
-	}
-}
-/**
- * @return end of the elementStartPart(end of elementEndPart for selfClosed el)
- */
-function appendElement(el,domBuilder,parseStack){
-	var tagName = el.tagName;
-	var localNSMap = null;
-	var currentNSMap = parseStack[parseStack.length-1].currentNSMap;
-	var i = el.length;
-	while(i--){
-		var a = el[i];
-		var qName = a.qName;
-		var value = a.value;
-		var nsp = qName.indexOf(':');
-		if(nsp>0){
-			var prefix = a.prefix = qName.slice(0,nsp);
-			var localName = qName.slice(nsp+1);
-			var nsPrefix = prefix === 'xmlns' && localName
-		}else{
-			localName = qName;
-			prefix = null
-			nsPrefix = qName === 'xmlns' && ''
-		}
-		//can not set prefix,because prefix !== ''
-		a.localName = localName ;
-		//prefix == null for no ns prefix attribute 
-		if(nsPrefix !== false){//hack!!
-			if(localNSMap == null){
-				localNSMap = {}
-				//console.log(currentNSMap,0)
-				_copy(currentNSMap,currentNSMap={})
-				//console.log(currentNSMap,1)
-			}
-			currentNSMap[nsPrefix] = localNSMap[nsPrefix] = value;
-			a.uri = 'http://www.w3.org/2000/xmlns/'
-			domBuilder.startPrefixMapping(nsPrefix, value) 
-		}
-	}
-	var i = el.length;
-	while(i--){
-		a = el[i];
-		var prefix = a.prefix;
-		if(prefix){//no prefix attribute has no namespace
-			if(prefix === 'xml'){
-				a.uri = 'http://www.w3.org/XML/1998/namespace';
-			}if(prefix !== 'xmlns'){
-				a.uri = currentNSMap[prefix]
-				
-				//{console.log('###'+a.qName,domBuilder.locator.systemId+'',currentNSMap,a.uri)}
-			}
-		}
-	}
-	var nsp = tagName.indexOf(':');
-	if(nsp>0){
-		prefix = el.prefix = tagName.slice(0,nsp);
-		localName = el.localName = tagName.slice(nsp+1);
-	}else{
-		prefix = null;//important!!
-		localName = el.localName = tagName;
-	}
-	//no prefix element has default namespace
-	var ns = el.uri = currentNSMap[prefix || ''];
-	domBuilder.startElement(ns,localName,tagName,el);
-	//endPrefixMapping and startPrefixMapping have not any help for dom builder
-	//localNSMap = null
-	if(el.closed){
-		domBuilder.endElement(ns,localName,tagName);
-		if(localNSMap){
-			for(prefix in localNSMap){
-				domBuilder.endPrefixMapping(prefix) 
-			}
-		}
-	}else{
-		el.currentNSMap = currentNSMap;
-		el.localNSMap = localNSMap;
-		parseStack.push(el);
-	}
-}
-function parseHtmlSpecialContent(source,elStartEnd,tagName,entityReplacer,domBuilder){
-	if(/^(?:script|textarea)$/i.test(tagName)){
-		var elEndStart =  source.indexOf('</'+tagName+'>',elStartEnd);
-		var text = source.substring(elStartEnd+1,elEndStart);
-		if(/[&<]/.test(text)){
-			if(/^script$/i.test(tagName)){
-				//if(!/\]\]>/.test(text)){
-					//lexHandler.startCDATA();
-					domBuilder.characters(text,0,text.length);
-					//lexHandler.endCDATA();
-					return elEndStart;
-				//}
-			}//}else{//text area
-				text = text.replace(/&#?\w+;/g,entityReplacer);
-				domBuilder.characters(text,0,text.length);
-				return elEndStart;
-			//}
-			
-		}
-	}
-	return elStartEnd+1;
-}
-function fixSelfClosed(source,elStartEnd,tagName,closeMap){
-	//if(tagName in closeMap){
-	var pos = closeMap[tagName];
-	if(pos == null){
-		//console.log(tagName)
-		pos = closeMap[tagName] = source.lastIndexOf('</'+tagName+'>')
-	}
-	return pos<elStartEnd;
-	//} 
-}
-function _copy(source,target){
-	for(var n in source){target[n] = source[n]}
-}
-function parseDCC(source,start,domBuilder,errorHandler){//sure start with '<!'
-	var next= source.charAt(start+2)
-	switch(next){
-	case '-':
-		if(source.charAt(start + 3) === '-'){
-			var end = source.indexOf('-->',start+4);
-			//append comment source.substring(4,end)//<!--
-			if(end>start){
-				domBuilder.comment(source,start+4,end-start-4);
-				return end+3;
-			}else{
-				errorHandler.error("Unclosed comment");
-				return -1;
-			}
-		}else{
-			//error
-			return -1;
-		}
-	default:
-		if(source.substr(start+3,6) == 'CDATA['){
-			var end = source.indexOf(']]>',start+9);
-			domBuilder.startCDATA();
-			domBuilder.characters(source,start+9,end-start-9);
-			domBuilder.endCDATA() 
-			return end+3;
-		}
-		//<!DOCTYPE
-		//startDTD(java.lang.String name, java.lang.String publicId, java.lang.String systemId) 
-		var matchs = split(source,start);
-		var len = matchs.length;
-		if(len>1 && /!doctype/i.test(matchs[0][0])){
-			var name = matchs[1][0];
-			var pubid = len>3 && /^public$/i.test(matchs[2][0]) && matchs[3][0]
-			var sysid = len>4 && matchs[4][0];
-			var lastMatch = matchs[len-1]
-			domBuilder.startDTD(name,pubid && pubid.replace(/^(['"])(.*?)\1$/,'$2'),
-					sysid && sysid.replace(/^(['"])(.*?)\1$/,'$2'));
-			domBuilder.endDTD();
-			
-			return lastMatch.index+lastMatch[0].length
-		}
-	}
-	return -1;
-}
-
-
-
-function parseInstruction(source,start,domBuilder){
-	var end = source.indexOf('?>',start);
-	if(end){
-		var match = source.substring(start,end).match(/^<\?(\S*)\s*([\s\S]*?)\s*$/);
-		if(match){
-			var len = match[0].length;
-			domBuilder.processingInstruction(match[1], match[2]) ;
-			return end+2;
-		}else{//error
-			return -1;
-		}
-	}
-	return -1;
-}
-
-/**
- * @param source
- */
-function ElementAttributes(source){
-	
-}
-ElementAttributes.prototype = {
-	setTagName:function(tagName){
-		if(!tagNamePattern.test(tagName)){
-			throw new Error('invalid tagName:'+tagName)
-		}
-		this.tagName = tagName
-	},
-	add:function(qName,value,offset){
-		if(!tagNamePattern.test(qName)){
-			throw new Error('invalid attribute:'+qName)
-		}
-		this[this.length++] = {qName:qName,value:value,offset:offset}
-	},
-	length:0,
-	getLocalName:function(i){return this[i].localName},
-	getOffset:function(i){return this[i].offset},
-	getQName:function(i){return this[i].qName},
-	getURI:function(i){return this[i].uri},
-	getValue:function(i){return this[i].value}
-//	,getIndex:function(uri, localName)){
-//		if(localName){
-//			
-//		}else{
-//			var qName = uri
-//		}
-//	},
-//	getValue:function(){return this.getValue(this.getIndex.apply(this,arguments))},
-//	getType:function(uri,localName){}
-//	getType:function(i){},
-}
-
-
-
-
-function _set_proto_(thiz,parent){
-	thiz.__proto__ = parent;
-	return thiz;
-}
-if(!(_set_proto_({},_set_proto_.prototype) instanceof _set_proto_)){
-	_set_proto_ = function(thiz,parent){
-		function p(){};
-		p.prototype = parent;
-		p = new p();
-		for(parent in thiz){
-			p[parent] = thiz[parent];
-		}
-		return p;
-	}
-}
-
-function split(source,start){
-	var match;
-	var buf = [];
-	var reg = /'[^']+'|"[^"]+"|[^\s<>\/=]+=?|(\/?\s*>|<)/g;
-	reg.lastIndex = start;
-	reg.exec(source);//skip <
-	while(match = reg.exec(source)){
-		buf.push(match);
-		if(match[1])return buf;
-	}
-}
-
-if(typeof require == 'function'){
-	exports.XMLReader = XMLReader;
-}
-
diff --git a/bin/node_modules/plist/package.json b/bin/node_modules/plist/package.json
deleted file mode 100644
index ad22151..0000000
--- a/bin/node_modules/plist/package.json
+++ /dev/null
@@ -1,90 +0,0 @@
-{
-  "name": "plist",
-  "description": "Mac OS X Plist parser/builder for Node.js and browsers",
-  "version": "1.1.0",
-  "author": {
-    "name": "Nathan Rajlich",
-    "email": "nathan@tootallnate.net"
-  },
-  "contributors": [
-    {
-      "name": "Hans Huebner",
-      "email": "hans.huebner@gmail.com"
-    },
-    {
-      "name": "Pierre Metrailler"
-    },
-    {
-      "name": "Mike Reinstein",
-      "email": "reinstein.mike@gmail.com"
-    },
-    {
-      "name": "Vladimir Tsvang"
-    },
-    {
-      "name": "Mathieu D'Amours"
-    }
-  ],
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/TooTallNate/node-plist.git"
-  },
-  "keywords": [
-    "apple",
-    "browser",
-    "mac",
-    "plist",
-    "parser",
-    "xml"
-  ],
-  "main": "lib/plist.js",
-  "dependencies": {
-    "base64-js": "0.0.6",
-    "xmlbuilder": "2.2.1",
-    "xmldom": "0.1.x",
-    "util-deprecate": "1.0.0"
-  },
-  "devDependencies": {
-    "browserify": "5.10.1",
-    "mocha": "1.18.2",
-    "multiline": "0.3.4",
-    "zuul": "1.10.2"
-  },
-  "scripts": {
-    "test": "make test"
-  },
-  "gitHead": "806c35e79ad1326da22ced98bc9c721ff570af84",
-  "bugs": {
-    "url": "https://github.com/TooTallNate/node-plist/issues"
-  },
-  "homepage": "https://github.com/TooTallNate/node-plist",
-  "_id": "plist@1.1.0",
-  "_shasum": "ff6708590c97cc438e7bc45de5251bd725f3f89d",
-  "_from": "plist@",
-  "_npmVersion": "1.4.21",
-  "_npmUser": {
-    "name": "tootallnate",
-    "email": "nathan@tootallnate.net"
-  },
-  "maintainers": [
-    {
-      "name": "TooTallNate",
-      "email": "nathan@tootallnate.net"
-    },
-    {
-      "name": "tootallnate",
-      "email": "nathan@tootallnate.net"
-    },
-    {
-      "name": "mreinstein",
-      "email": "reinstein.mike@gmail.com"
-    }
-  ],
-  "dist": {
-    "shasum": "ff6708590c97cc438e7bc45de5251bd725f3f89d",
-    "tarball": "http://registry.npmjs.org/plist/-/plist-1.1.0.tgz"
-  },
-  "directories": {},
-  "_resolved": "https://registry.npmjs.org/plist/-/plist-1.1.0.tgz",
-  "readme": "ERROR: No README data found!"
-}
diff --git a/bin/node_modules/plist/test/build.js b/bin/node_modules/plist/test/build.js
deleted file mode 100644
index c396c55..0000000
--- a/bin/node_modules/plist/test/build.js
+++ /dev/null
@@ -1,133 +0,0 @@
-
-var assert = require('assert');
-var build = require('../').build;
-var multiline = require('multiline');
-
-describe('plist', function () {
-
-  describe('build()', function () {
-
-    it('should create a plist XML string from a String', function () {
-      var xml = build('test');
-      assert.strictEqual(xml, multiline(function () {/*
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-  <string>test</string>
-</plist>
-*/}));
-    });
-
-    it('should create a plist XML integer from a whole Number', function () {
-      var xml = build(3);
-      assert.strictEqual(xml, multiline(function () {/*
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-  <integer>3</integer>
-</plist>
-*/}));
-    });
-
-    it('should create a plist XML real from a fractional Number', function () {
-      var xml = build(Math.PI);
-      assert.strictEqual(xml, multiline(function () {/*
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-  <real>3.141592653589793</real>
-</plist>
-*/}));
-    });
-
-    it('should create a plist XML date from a Date', function () {
-      var xml = build(new Date('2010-02-08T21:41:23Z'));
-      assert.strictEqual(xml, multiline(function () {/*
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-  <date>2010-02-08T21:41:23Z</date>
-</plist>
-*/}));
-    });
-
-    it('should create a plist XML date from a Buffer', function () {
-      var xml = build(new Buffer('☃'));
-      assert.strictEqual(xml, multiline(function () {/*
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-  <data>4piD</data>
-</plist>
-*/}));
-    });
-
-    it('should create a plist XML true from a `true` Boolean', function () {
-      var xml = build(true);
-      assert.strictEqual(xml, multiline(function () {/*
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-  <true/>
-</plist>
-*/}));
-    });
-
-    it('should create a plist XML false from a `false` Boolean', function () {
-      var xml = build(false);
-      assert.strictEqual(xml, multiline(function () {/*
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-  <false/>
-</plist>
-*/}));
-    });
-
-    it('should create a plist XML dict from an Object', function () {
-      var xml = build({ foo: 'bar' });
-      assert.strictEqual(xml, multiline(function () {/*
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-  <dict>
-    <key>foo</key>
-    <string>bar</string>
-  </dict>
-</plist>
-*/}));
-    });
-
-    it('should create a plist XML array from an Array', function () {
-      var xml = build([ 1, 'foo', false, new Date(1234) ]);
-      assert.strictEqual(xml, multiline(function () {/*
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-  <array>
-    <integer>1</integer>
-    <string>foo</string>
-    <false/>
-    <date>1970-01-01T00:00:01Z</date>
-  </array>
-</plist>
-*/}));
-    });
-
-    it('should properly encode an empty string', function () {
-      var xml = build({ a: '' });
-      assert.strictEqual(xml, multiline(function () {/*
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-  <dict>
-    <key>a</key>
-    <string></string>
-  </dict>
-</plist>
-*/}));
-    });
-
-  });
-
-});
diff --git a/bin/node_modules/plist/test/parse.js b/bin/node_modules/plist/test/parse.js
deleted file mode 100644
index 67a9257..0000000
--- a/bin/node_modules/plist/test/parse.js
+++ /dev/null
@@ -1,448 +0,0 @@
-
-var assert = require('assert');
-var parse = require('../').parse;
-var multiline = require('multiline');
-
-describe('plist', function () {
-
-  describe('parse()', function () {
-
-    it('should parse a minimal <string> node into a String', function () {
-      var parsed = parse('<plist><string>Hello World!</string></plist>');
-      assert.strictEqual(parsed, 'Hello World!');
-    });
-
-    it('should parse a full XML <string> node into a String', function () {
-      var xml = multiline(function () {/*
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<string>gray</string>
-</plist>
-*/});
-      var parsed = parse(xml);
-      assert.strictEqual(parsed, 'gray');
-    });
-
-    it('should parse an <integer> node into a Number', function () {
-      var xml = multiline(function () {/*
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-  <integer>14</integer>
-</plist>
-*/});
-      var parsed = parse(xml);
-      assert.strictEqual(parsed, 14);
-    });
-
-    it('should parse a <real> node into a Number', function () {
-      var xml = multiline(function () {/*
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-  <real>3.14</real>
-</plist>
-*/});
-      var parsed = parse(xml);
-      assert.strictEqual(parsed, 3.14);
-    });
-
-    it('should parse a <date> node into a Date', function () {
-      var xml = multiline(function () {/*
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-  <date>2010-02-08T21:41:23Z</date>
-</plist>
-*/});
-      var parsed = parse(xml);
-      assert(parsed instanceof Date);
-      assert.strictEqual(parsed.getTime(), 1265665283000);
-    });
-
-    it('should parse a <data> node into a Buffer', function () {
-      var xml = multiline(function () {/*
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-  <data>4pyTIMOgIGxhIG1vZGU=</data>
-</plist>
-*/});
-      var parsed = parse(xml);
-      assert(Buffer.isBuffer(parsed));
-      assert.strictEqual(parsed.toString('utf8'), '✓ à la mode');
-    });
-
-    it('should parse a <data> node with newlines into a Buffer', function () {
-      var xml = multiline(function () {/*
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-  <data>4pyTIMOgIGxhIG
-  
-  
-  1v
-  
-  ZG
-  U=</data>
-</plist>
-*/});
-      var parsed = parse(xml);
-      assert(Buffer.isBuffer(parsed));
-      assert.strictEqual(parsed.toString('utf8'), '✓ à la mode');
-    });
-
-    it('should parse a <true> node into a Boolean `true` value', function () {
-      var xml = multiline(function () {/*
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-  <true/>
-</plist>
-*/});
-      var parsed = parse(xml);
-      assert.strictEqual(parsed, true);
-    });
-
-    it('should parse a <false> node into a Boolean `false` value', function () {
-      var xml = multiline(function () {/*
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-  <false/>
-</plist>
-*/});
-      var parsed = parse(xml);
-      assert.strictEqual(parsed, false);
-    });
-
-    it('should parse an <array> node into an Array', function () {
-      var xml = multiline(function () {/*
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-  <array>
-    <dict>
-      <key>duration</key>
-      <real>5555.0495000000001</real>
-      <key>start</key>
-      <real>0.0</real>
-    </dict>
-  </array>
-</plist>
-*/});
-      var parsed = parse(xml);
-      assert.deepEqual(parsed, [
-        {
-          duration: 5555.0495,
-          start: 0
-        }
-      ]);
-    });
-
-    it('should parse a plist file with XML comments', function () {
-      var xml = multiline(function () {/*
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-  <dict>
-    <key>CFBundleName</key>
-    <string>Emacs</string>
-
-    <key>CFBundlePackageType</key>
-    <string>APPL</string>
-
-    <!-- This should be the emacs version number. -->
-
-    <key>CFBundleShortVersionString</key>
-    <string>24.3</string>
-
-    <key>CFBundleSignature</key>
-    <string>EMAx</string>
-
-    <!-- This SHOULD be a build number. -->
-
-    <key>CFBundleVersion</key>
-    <string>9.0</string>
-  </dict>
-</plist>
-*/});
-      var parsed = parse(xml);
-      assert.deepEqual(parsed, {
-        CFBundleName: 'Emacs',
-        CFBundlePackageType: 'APPL',
-        CFBundleShortVersionString: '24.3',
-        CFBundleSignature: 'EMAx',
-        CFBundleVersion: '9.0'
-      });
-    });
-
-    it('should parse a plist file with CDATA content', function () {
-      var xml = multiline(function () {/*
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>OptionsLabel</key>
-	<string>Product</string>
-	<key>PopupMenu</key>
-	<array>
-		<dict>
-			<key>Key</key>
-			<string>iPhone</string>
-			<key>Title</key>
-			<string>iPhone</string>
-		</dict>
-		<dict>
-			<key>Key</key>
-			<string>iPad</string>
-			<key>Title</key>
-			<string>iPad</string>
-		</dict>
-		<dict>
-			<key>Key</key>
-      <string>
-        <![CDATA[
-        #import &lt;Cocoa/Cocoa.h&gt;
-
-#import &lt;MacRuby/MacRuby.h&gt;
-
-int main(int argc, char *argv[])
-{
-  return macruby_main("rb_main.rb", argc, argv);
-}
-]]>
-</string>
-		</dict>
-	</array>
-	<key>TemplateSelection</key>
-	<dict>
-		<key>iPhone</key>
-		<string>Tab Bar iPhone Application</string>
-		<key>iPad</key>
-		<string>Tab Bar iPad Application</string>
-	</dict>
-</dict>
-</plist>
-*/});
-      var parsed = parse(xml);
-      assert.deepEqual(parsed, { OptionsLabel: 'Product',
-        PopupMenu:
-         [ { Key: 'iPhone', Title: 'iPhone' },
-           { Key: 'iPad', Title: 'iPad' },
-           { Key: '\n        \n        #import &lt;Cocoa/Cocoa.h&gt;\n\n#import &lt;MacRuby/MacRuby.h&gt;\n\nint main(int argc, char *argv[])\n{\n  return macruby_main("rb_main.rb", argc, argv);\n}\n\n' } ],
-        TemplateSelection:
-         { iPhone: 'Tab Bar iPhone Application',
-           iPad: 'Tab Bar iPad Application' }
-      });
-    });
-
-    it('should parse an example "Cordova.plist" file', function () {
-      var xml = multiline(function () {/*
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<!--
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-# 
-# http://www.apache.org/licenses/LICENSE-2.0
-# 
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-#  KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
--->
-<plist version="1.0">
-<dict>
-  <key>UIWebViewBounce</key>
-  <true/>
-  <key>TopActivityIndicator</key>
-  <string>gray</string>
-  <key>EnableLocation</key>
-  <false/>
-  <key>EnableViewportScale</key>
-  <false/>
-  <key>AutoHideSplashScreen</key>
-  <true/>
-  <key>ShowSplashScreenSpinner</key>
-  <true/>
-  <key>MediaPlaybackRequiresUserAction</key>
-  <false/>
-  <key>AllowInlineMediaPlayback</key>
-  <false/>
-  <key>OpenAllWhitelistURLsInWebView</key>
-  <false/>
-  <key>BackupWebStorage</key>
-  <true/>
-  <key>ExternalHosts</key>
-  <array>
-      <string>*</string>
-  </array>
-  <key>Plugins</key>
-  <dict>
-    <key>Device</key>
-    <string>CDVDevice</string>
-    <key>Logger</key>
-    <string>CDVLogger</string>
-    <key>Compass</key>
-    <string>CDVLocation</string>
-    <key>Accelerometer</key>
-    <string>CDVAccelerometer</string>
-    <key>Camera</key>
-    <string>CDVCamera</string>
-    <key>NetworkStatus</key>
-    <string>CDVConnection</string>
-    <key>Contacts</key>
-    <string>CDVContacts</string>
-    <key>Debug Console</key>
-    <string>CDVDebugConsole</string>
-    <key>Echo</key>
-    <string>CDVEcho</string>
-    <key>File</key>
-    <string>CDVFile</string>
-    <key>FileTransfer</key>
-    <string>CDVFileTransfer</string>
-    <key>Geolocation</key>
-    <string>CDVLocation</string>
-    <key>Notification</key>
-    <string>CDVNotification</string>
-    <key>Media</key>
-    <string>CDVSound</string>
-    <key>Capture</key>
-    <string>CDVCapture</string>
-    <key>SplashScreen</key>
-    <string>CDVSplashScreen</string>
-    <key>Battery</key>
-    <string>CDVBattery</string>
-  </dict>
-</dict>
-</plist>
-*/});
-      var parsed = parse(xml);
-      assert.deepEqual(parsed, {
-        UIWebViewBounce: true,
-        TopActivityIndicator: 'gray',
-        EnableLocation: false,
-        EnableViewportScale: false,
-        AutoHideSplashScreen: true,
-        ShowSplashScreenSpinner: true,
-        MediaPlaybackRequiresUserAction: false,
-        AllowInlineMediaPlayback: false,
-        OpenAllWhitelistURLsInWebView: false,
-        BackupWebStorage: true,
-        ExternalHosts: [ '*' ],
-        Plugins: {
-          Device: 'CDVDevice',
-          Logger: 'CDVLogger',
-          Compass: 'CDVLocation',
-          Accelerometer: 'CDVAccelerometer',
-          Camera: 'CDVCamera',
-          NetworkStatus: 'CDVConnection',
-          Contacts: 'CDVContacts',
-          'Debug Console': 'CDVDebugConsole',
-          Echo: 'CDVEcho',
-          File: 'CDVFile',
-          FileTransfer: 'CDVFileTransfer',
-          Geolocation: 'CDVLocation',
-          Notification: 'CDVNotification',
-          Media: 'CDVSound',
-          Capture: 'CDVCapture',
-          SplashScreen: 'CDVSplashScreen',
-          Battery: 'CDVBattery'
-        }
-      });
-    });
-
-    it('should parse an example "Xcode-Info.plist" file', function () {
-      var xml = multiline(function () {/*
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>en</string>
-	<key>CFBundleDisplayName</key>
-	<string>${PRODUCT_NAME}</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleIconFiles</key>
-	<array/>
-	<key>CFBundleIdentifier</key>
-	<string>com.joshfire.ads</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundleName</key>
-	<string>${PRODUCT_NAME}</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleShortVersionString</key>
-	<string>1.0</string>
-	<key>CFBundleSignature</key>
-	<string>????</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>LSRequiresIPhoneOS</key>
-	<true/>
-	<key>UIRequiredDeviceCapabilities</key>
-	<array>
-		<string>armv7</string>
-	</array>
-	<key>UISupportedInterfaceOrientations</key>
-	<array>
-		<string>UIInterfaceOrientationPortrait</string>
-		<string>UIInterfaceOrientationLandscapeLeft</string>
-		<string>UIInterfaceOrientationLandscapeRight</string>
-	</array>
-	<key>UISupportedInterfaceOrientations~ipad</key>
-	<array>
-		<string>UIInterfaceOrientationPortrait</string>
-		<string>UIInterfaceOrientationPortraitUpsideDown</string>
-		<string>UIInterfaceOrientationLandscapeLeft</string>
-		<string>UIInterfaceOrientationLandscapeRight</string>
-	</array>
-	<key>CFBundleAllowMixedLocalizations</key>
-	<true/>
-</dict>
-</plist>
-*/});
-      var parsed = parse(xml);
-      assert.deepEqual(parsed, {
-        CFBundleDevelopmentRegion: 'en',
-        CFBundleDisplayName: '${PRODUCT_NAME}',
-        CFBundleExecutable: '${EXECUTABLE_NAME}',
-        CFBundleIconFiles: [],
-        CFBundleIdentifier: 'com.joshfire.ads',
-        CFBundleInfoDictionaryVersion: '6.0',
-        CFBundleName: '${PRODUCT_NAME}',
-        CFBundlePackageType: 'APPL',
-        CFBundleShortVersionString: '1.0',
-        CFBundleSignature: '????',
-        CFBundleVersion: '1.0',
-        LSRequiresIPhoneOS: true,
-        UIRequiredDeviceCapabilities: [ 'armv7' ],
-        UISupportedInterfaceOrientations:
-         [ 'UIInterfaceOrientationPortrait',
-           'UIInterfaceOrientationLandscapeLeft',
-           'UIInterfaceOrientationLandscapeRight' ],
-        'UISupportedInterfaceOrientations~ipad':
-         [ 'UIInterfaceOrientationPortrait',
-           'UIInterfaceOrientationPortraitUpsideDown',
-           'UIInterfaceOrientationLandscapeLeft',
-           'UIInterfaceOrientationLandscapeRight' ],
-        CFBundleAllowMixedLocalizations: true
-      });
-    });
-
-  });
-
-});
diff --git a/bin/node_modules/q/LICENSE b/bin/node_modules/q/LICENSE
deleted file mode 100644
index 8a706b5..0000000
--- a/bin/node_modules/q/LICENSE
+++ /dev/null
@@ -1,18 +0,0 @@
-Copyright 2009–2014 Kristopher Michael Kowal. All rights reserved.
-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/bin/node_modules/q/package.json b/bin/node_modules/q/package.json
deleted file mode 100644
index 7b7f3c6..0000000
--- a/bin/node_modules/q/package.json
+++ /dev/null
@@ -1,112 +0,0 @@
-{
-  "name": "q",
-  "version": "1.0.1",
-  "description": "A library for promises (CommonJS/Promises/A,B,D)",
-  "homepage": "https://github.com/kriskowal/q",
-  "author": {
-    "name": "Kris Kowal",
-    "email": "kris@cixar.com",
-    "url": "https://github.com/kriskowal"
-  },
-  "keywords": [
-    "q",
-    "promise",
-    "promises",
-    "promises-a",
-    "promises-aplus",
-    "deferred",
-    "future",
-    "async",
-    "flow control",
-    "fluent",
-    "browser",
-    "node"
-  ],
-  "contributors": [
-    {
-      "name": "Kris Kowal",
-      "email": "kris@cixar.com",
-      "url": "https://github.com/kriskowal"
-    },
-    {
-      "name": "Irakli Gozalishvili",
-      "email": "rfobic@gmail.com",
-      "url": "http://jeditoolkit.com"
-    },
-    {
-      "name": "Domenic Denicola",
-      "email": "domenic@domenicdenicola.com",
-      "url": "http://domenicdenicola.com"
-    }
-  ],
-  "bugs": {
-    "url": "http://github.com/kriskowal/q/issues"
-  },
-  "license": {
-    "type": "MIT",
-    "url": "http://github.com/kriskowal/q/raw/master/LICENSE"
-  },
-  "main": "q.js",
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/kriskowal/q.git"
-  },
-  "engines": {
-    "node": ">=0.6.0",
-    "teleport": ">=0.2.0"
-  },
-  "dependencies": {},
-  "devDependencies": {
-    "jshint": "~2.1.9",
-    "cover": "*",
-    "jasmine-node": "1.11.0",
-    "opener": "*",
-    "promises-aplus-tests": "1.x",
-    "grunt": "~0.4.1",
-    "grunt-cli": "~0.1.9",
-    "grunt-contrib-uglify": "~0.2.2",
-    "matcha": "~0.2.0"
-  },
-  "scripts": {
-    "test": "jasmine-node spec && promises-aplus-tests spec/aplus-adapter",
-    "test-browser": "opener spec/q-spec.html",
-    "benchmark": "matcha",
-    "lint": "jshint q.js",
-    "cover": "cover run node_modules/jasmine-node/bin/jasmine-node spec && cover report html && opener cover_html/index.html",
-    "minify": "grunt",
-    "prepublish": "grunt"
-  },
-  "overlay": {
-    "teleport": {
-      "dependencies": {
-        "system": ">=0.0.4"
-      }
-    }
-  },
-  "directories": {
-    "test": "./spec"
-  },
-  "_id": "q@1.0.1",
-  "dist": {
-    "shasum": "11872aeedee89268110b10a718448ffb10112a14",
-    "tarball": "http://registry.npmjs.org/q/-/q-1.0.1.tgz"
-  },
-  "_from": "q@",
-  "_npmVersion": "1.4.4",
-  "_npmUser": {
-    "name": "kriskowal",
-    "email": "kris.kowal@cixar.com"
-  },
-  "maintainers": [
-    {
-      "name": "kriskowal",
-      "email": "kris.kowal@cixar.com"
-    },
-    {
-      "name": "domenic",
-      "email": "domenic@domenicdenicola.com"
-    }
-  ],
-  "_shasum": "11872aeedee89268110b10a718448ffb10112a14",
-  "_resolved": "https://registry.npmjs.org/q/-/q-1.0.1.tgz"
-}
diff --git a/bin/node_modules/q/q.js b/bin/node_modules/q/q.js
deleted file mode 100644
index df36027..0000000
--- a/bin/node_modules/q/q.js
+++ /dev/null
@@ -1,1904 +0,0 @@
-// vim:ts=4:sts=4:sw=4:
-/*!
- *
- * Copyright 2009-2012 Kris Kowal under the terms of the MIT
- * license found at http://github.com/kriskowal/q/raw/master/LICENSE
- *
- * With parts by Tyler Close
- * Copyright 2007-2009 Tyler Close under the terms of the MIT X license found
- * at http://www.opensource.org/licenses/mit-license.html
- * Forked at ref_send.js version: 2009-05-11
- *
- * With parts by Mark Miller
- * Copyright (C) 2011 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-(function (definition) {
-    // Turn off strict mode for this function so we can assign to global.Q
-    /* jshint strict: false */
-
-    // This file will function properly as a <script> tag, or a module
-    // using CommonJS and NodeJS or RequireJS module formats.  In
-    // Common/Node/RequireJS, the module exports the Q API and when
-    // executed as a simple <script>, it creates a Q global instead.
-
-    // Montage Require
-    if (typeof bootstrap === "function") {
-        bootstrap("promise", definition);
-
-    // CommonJS
-    } else if (typeof exports === "object") {
-        module.exports = definition();
-
-    // RequireJS
-    } else if (typeof define === "function" && define.amd) {
-        define(definition);
-
-    // SES (Secure EcmaScript)
-    } else if (typeof ses !== "undefined") {
-        if (!ses.ok()) {
-            return;
-        } else {
-            ses.makeQ = definition;
-        }
-
-    // <script>
-    } else {
-        Q = definition();
-    }
-
-})(function () {
-"use strict";
-
-var hasStacks = false;
-try {
-    throw new Error();
-} catch (e) {
-    hasStacks = !!e.stack;
-}
-
-// All code after this point will be filtered from stack traces reported
-// by Q.
-var qStartingLine = captureLine();
-var qFileName;
-
-// shims
-
-// used for fallback in "allResolved"
-var noop = function () {};
-
-// Use the fastest possible means to execute a task in a future turn
-// of the event loop.
-var nextTick =(function () {
-    // linked list of tasks (single, with head node)
-    var head = {task: void 0, next: null};
-    var tail = head;
-    var flushing = false;
-    var requestTick = void 0;
-    var isNodeJS = false;
-
-    function flush() {
-        /* jshint loopfunc: true */
-
-        while (head.next) {
-            head = head.next;
-            var task = head.task;
-            head.task = void 0;
-            var domain = head.domain;
-
-            if (domain) {
-                head.domain = void 0;
-                domain.enter();
-            }
-
-            try {
-                task();
-
-            } catch (e) {
-                if (isNodeJS) {
-                    // In node, uncaught exceptions are considered fatal errors.
-                    // Re-throw them synchronously to interrupt flushing!
-
-                    // Ensure continuation if the uncaught exception is suppressed
-                    // listening "uncaughtException" events (as domains does).
-                    // Continue in next event to avoid tick recursion.
-                    if (domain) {
-                        domain.exit();
-                    }
-                    setTimeout(flush, 0);
-                    if (domain) {
-                        domain.enter();
-                    }
-
-                    throw e;
-
-                } else {
-                    // In browsers, uncaught exceptions are not fatal.
-                    // Re-throw them asynchronously to avoid slow-downs.
-                    setTimeout(function() {
-                       throw e;
-                    }, 0);
-                }
-            }
-
-            if (domain) {
-                domain.exit();
-            }
-        }
-
-        flushing = false;
-    }
-
-    nextTick = function (task) {
-        tail = tail.next = {
-            task: task,
-            domain: isNodeJS && process.domain,
-            next: null
-        };
-
-        if (!flushing) {
-            flushing = true;
-            requestTick();
-        }
-    };
-
-    if (typeof process !== "undefined" && process.nextTick) {
-        // Node.js before 0.9. Note that some fake-Node environments, like the
-        // Mocha test runner, introduce a `process` global without a `nextTick`.
-        isNodeJS = true;
-
-        requestTick = function () {
-            process.nextTick(flush);
-        };
-
-    } else if (typeof setImmediate === "function") {
-        // In IE10, Node.js 0.9+, or https://github.com/NobleJS/setImmediate
-        if (typeof window !== "undefined") {
-            requestTick = setImmediate.bind(window, flush);
-        } else {
-            requestTick = function () {
-                setImmediate(flush);
-            };
-        }
-
-    } else if (typeof MessageChannel !== "undefined") {
-        // modern browsers
-        // http://www.nonblocking.io/2011/06/windownexttick.html
-        var channel = new MessageChannel();
-        // At least Safari Version 6.0.5 (8536.30.1) intermittently cannot create
-        // working message ports the first time a page loads.
-        channel.port1.onmessage = function () {
-            requestTick = requestPortTick;
-            channel.port1.onmessage = flush;
-            flush();
-        };
-        var requestPortTick = function () {
-            // Opera requires us to provide a message payload, regardless of
-            // whether we use it.
-            channel.port2.postMessage(0);
-        };
-        requestTick = function () {
-            setTimeout(flush, 0);
-            requestPortTick();
-        };
-
-    } else {
-        // old browsers
-        requestTick = function () {
-            setTimeout(flush, 0);
-        };
-    }
-
-    return nextTick;
-})();
-
-// Attempt to make generics safe in the face of downstream
-// modifications.
-// There is no situation where this is necessary.
-// If you need a security guarantee, these primordials need to be
-// deeply frozen anyway, and if you don’t need a security guarantee,
-// this is just plain paranoid.
-// However, this **might** have the nice side-effect of reducing the size of
-// the minified code by reducing x.call() to merely x()
-// See Mark Miller’s explanation of what this does.
-// http://wiki.ecmascript.org/doku.php?id=conventions:safe_meta_programming
-var call = Function.call;
-function uncurryThis(f) {
-    return function () {
-        return call.apply(f, arguments);
-    };
-}
-// This is equivalent, but slower:
-// uncurryThis = Function_bind.bind(Function_bind.call);
-// http://jsperf.com/uncurrythis
-
-var array_slice = uncurryThis(Array.prototype.slice);
-
-var array_reduce = uncurryThis(
-    Array.prototype.reduce || function (callback, basis) {
-        var index = 0,
-            length = this.length;
-        // concerning the initial value, if one is not provided
-        if (arguments.length === 1) {
-            // seek to the first value in the array, accounting
-            // for the possibility that is is a sparse array
-            do {
-                if (index in this) {
-                    basis = this[index++];
-                    break;
-                }
-                if (++index >= length) {
-                    throw new TypeError();
-                }
-            } while (1);
-        }
-        // reduce
-        for (; index < length; index++) {
-            // account for the possibility that the array is sparse
-            if (index in this) {
-                basis = callback(basis, this[index], index);
-            }
-        }
-        return basis;
-    }
-);
-
-var array_indexOf = uncurryThis(
-    Array.prototype.indexOf || function (value) {
-        // not a very good shim, but good enough for our one use of it
-        for (var i = 0; i < this.length; i++) {
-            if (this[i] === value) {
-                return i;
-            }
-        }
-        return -1;
-    }
-);
-
-var array_map = uncurryThis(
-    Array.prototype.map || function (callback, thisp) {
-        var self = this;
-        var collect = [];
-        array_reduce(self, function (undefined, value, index) {
-            collect.push(callback.call(thisp, value, index, self));
-        }, void 0);
-        return collect;
-    }
-);
-
-var object_create = Object.create || function (prototype) {
-    function Type() { }
-    Type.prototype = prototype;
-    return new Type();
-};
-
-var object_hasOwnProperty = uncurryThis(Object.prototype.hasOwnProperty);
-
-var object_keys = Object.keys || function (object) {
-    var keys = [];
-    for (var key in object) {
-        if (object_hasOwnProperty(object, key)) {
-            keys.push(key);
-        }
-    }
-    return keys;
-};
-
-var object_toString = uncurryThis(Object.prototype.toString);
-
-function isObject(value) {
-    return value === Object(value);
-}
-
-// generator related shims
-
-// FIXME: Remove this function once ES6 generators are in SpiderMonkey.
-function isStopIteration(exception) {
-    return (
-        object_toString(exception) === "[object StopIteration]" ||
-        exception instanceof QReturnValue
-    );
-}
-
-// FIXME: Remove this helper and Q.return once ES6 generators are in
-// SpiderMonkey.
-var QReturnValue;
-if (typeof ReturnValue !== "undefined") {
-    QReturnValue = ReturnValue;
-} else {
-    QReturnValue = function (value) {
-        this.value = value;
-    };
-}
-
-// long stack traces
-
-var STACK_JUMP_SEPARATOR = "From previous event:";
-
-function makeStackTraceLong(error, promise) {
-    // If possible, transform the error stack trace by removing Node and Q
-    // cruft, then concatenating with the stack trace of `promise`. See #57.
-    if (hasStacks &&
-        promise.stack &&
-        typeof error === "object" &&
-        error !== null &&
-        error.stack &&
-        error.stack.indexOf(STACK_JUMP_SEPARATOR) === -1
-    ) {
-        var stacks = [];
-        for (var p = promise; !!p; p = p.source) {
-            if (p.stack) {
-                stacks.unshift(p.stack);
-            }
-        }
-        stacks.unshift(error.stack);
-
-        var concatedStacks = stacks.join("\n" + STACK_JUMP_SEPARATOR + "\n");
-        error.stack = filterStackString(concatedStacks);
-    }
-}
-
-function filterStackString(stackString) {
-    var lines = stackString.split("\n");
-    var desiredLines = [];
-    for (var i = 0; i < lines.length; ++i) {
-        var line = lines[i];
-
-        if (!isInternalFrame(line) && !isNodeFrame(line) && line) {
-            desiredLines.push(line);
-        }
-    }
-    return desiredLines.join("\n");
-}
-
-function isNodeFrame(stackLine) {
-    return stackLine.indexOf("(module.js:") !== -1 ||
-           stackLine.indexOf("(node.js:") !== -1;
-}
-
-function getFileNameAndLineNumber(stackLine) {
-    // Named functions: "at functionName (filename:lineNumber:columnNumber)"
-    // In IE10 function name can have spaces ("Anonymous function") O_o
-    var attempt1 = /at .+ \((.+):(\d+):(?:\d+)\)$/.exec(stackLine);
-    if (attempt1) {
-        return [attempt1[1], Number(attempt1[2])];
-    }
-
-    // Anonymous functions: "at filename:lineNumber:columnNumber"
-    var attempt2 = /at ([^ ]+):(\d+):(?:\d+)$/.exec(stackLine);
-    if (attempt2) {
-        return [attempt2[1], Number(attempt2[2])];
-    }
-
-    // Firefox style: "function@filename:lineNumber or @filename:lineNumber"
-    var attempt3 = /.*@(.+):(\d+)$/.exec(stackLine);
-    if (attempt3) {
-        return [attempt3[1], Number(attempt3[2])];
-    }
-}
-
-function isInternalFrame(stackLine) {
-    var fileNameAndLineNumber = getFileNameAndLineNumber(stackLine);
-
-    if (!fileNameAndLineNumber) {
-        return false;
-    }
-
-    var fileName = fileNameAndLineNumber[0];
-    var lineNumber = fileNameAndLineNumber[1];
-
-    return fileName === qFileName &&
-        lineNumber >= qStartingLine &&
-        lineNumber <= qEndingLine;
-}
-
-// discover own file name and line number range for filtering stack
-// traces
-function captureLine() {
-    if (!hasStacks) {
-        return;
-    }
-
-    try {
-        throw new Error();
-    } catch (e) {
-        var lines = e.stack.split("\n");
-        var firstLine = lines[0].indexOf("@") > 0 ? lines[1] : lines[2];
-        var fileNameAndLineNumber = getFileNameAndLineNumber(firstLine);
-        if (!fileNameAndLineNumber) {
-            return;
-        }
-
-        qFileName = fileNameAndLineNumber[0];
-        return fileNameAndLineNumber[1];
-    }
-}
-
-function deprecate(callback, name, alternative) {
-    return function () {
-        if (typeof console !== "undefined" &&
-            typeof console.warn === "function") {
-            console.warn(name + " is deprecated, use " + alternative +
-                         " instead.", new Error("").stack);
-        }
-        return callback.apply(callback, arguments);
-    };
-}
-
-// end of shims
-// beginning of real work
-
-/**
- * Constructs a promise for an immediate reference, passes promises through, or
- * coerces promises from different systems.
- * @param value immediate reference or promise
- */
-function Q(value) {
-    // If the object is already a Promise, return it directly.  This enables
-    // the resolve function to both be used to created references from objects,
-    // but to tolerably coerce non-promises to promises.
-    if (isPromise(value)) {
-        return value;
-    }
-
-    // assimilate thenables
-    if (isPromiseAlike(value)) {
-        return coerce(value);
-    } else {
-        return fulfill(value);
-    }
-}
-Q.resolve = Q;
-
-/**
- * Performs a task in a future turn of the event loop.
- * @param {Function} task
- */
-Q.nextTick = nextTick;
-
-/**
- * Controls whether or not long stack traces will be on
- */
-Q.longStackSupport = false;
-
-/**
- * Constructs a {promise, resolve, reject} object.
- *
- * `resolve` is a callback to invoke with a more resolved value for the
- * promise. To fulfill the promise, invoke `resolve` with any value that is
- * not a thenable. To reject the promise, invoke `resolve` with a rejected
- * thenable, or invoke `reject` with the reason directly. To resolve the
- * promise to another thenable, thus putting it in the same state, invoke
- * `resolve` with that other thenable.
- */
-Q.defer = defer;
-function defer() {
-    // if "messages" is an "Array", that indicates that the promise has not yet
-    // been resolved.  If it is "undefined", it has been resolved.  Each
-    // element of the messages array is itself an array of complete arguments to
-    // forward to the resolved promise.  We coerce the resolution value to a
-    // promise using the `resolve` function because it handles both fully
-    // non-thenable values and other thenables gracefully.
-    var messages = [], progressListeners = [], resolvedPromise;
-
-    var deferred = object_create(defer.prototype);
-    var promise = object_create(Promise.prototype);
-
-    promise.promiseDispatch = function (resolve, op, operands) {
-        var args = array_slice(arguments);
-        if (messages) {
-            messages.push(args);
-            if (op === "when" && operands[1]) { // progress operand
-                progressListeners.push(operands[1]);
-            }
-        } else {
-            nextTick(function () {
-                resolvedPromise.promiseDispatch.apply(resolvedPromise, args);
-            });
-        }
-    };
-
-    // XXX deprecated
-    promise.valueOf = function () {
-        if (messages) {
-            return promise;
-        }
-        var nearerValue = nearer(resolvedPromise);
-        if (isPromise(nearerValue)) {
-            resolvedPromise = nearerValue; // shorten chain
-        }
-        return nearerValue;
-    };
-
-    promise.inspect = function () {
-        if (!resolvedPromise) {
-            return { state: "pending" };
-        }
-        return resolvedPromise.inspect();
-    };
-
-    if (Q.longStackSupport && hasStacks) {
-        try {
-            throw new Error();
-        } catch (e) {
-            // NOTE: don't try to use `Error.captureStackTrace` or transfer the
-            // accessor around; that causes memory leaks as per GH-111. Just
-            // reify the stack trace as a string ASAP.
-            //
-            // At the same time, cut off the first line; it's always just
-            // "[object Promise]\n", as per the `toString`.
-            promise.stack = e.stack.substring(e.stack.indexOf("\n") + 1);
-        }
-    }
-
-    // NOTE: we do the checks for `resolvedPromise` in each method, instead of
-    // consolidating them into `become`, since otherwise we'd create new
-    // promises with the lines `become(whatever(value))`. See e.g. GH-252.
-
-    function become(newPromise) {
-        resolvedPromise = newPromise;
-        promise.source = newPromise;
-
-        array_reduce(messages, function (undefined, message) {
-            nextTick(function () {
-                newPromise.promiseDispatch.apply(newPromise, message);
-            });
-        }, void 0);
-
-        messages = void 0;
-        progressListeners = void 0;
-    }
-
-    deferred.promise = promise;
-    deferred.resolve = function (value) {
-        if (resolvedPromise) {
-            return;
-        }
-
-        become(Q(value));
-    };
-
-    deferred.fulfill = function (value) {
-        if (resolvedPromise) {
-            return;
-        }
-
-        become(fulfill(value));
-    };
-    deferred.reject = function (reason) {
-        if (resolvedPromise) {
-            return;
-        }
-
-        become(reject(reason));
-    };
-    deferred.notify = function (progress) {
-        if (resolvedPromise) {
-            return;
-        }
-
-        array_reduce(progressListeners, function (undefined, progressListener) {
-            nextTick(function () {
-                progressListener(progress);
-            });
-        }, void 0);
-    };
-
-    return deferred;
-}
-
-/**
- * Creates a Node-style callback that will resolve or reject the deferred
- * promise.
- * @returns a nodeback
- */
-defer.prototype.makeNodeResolver = function () {
-    var self = this;
-    return function (error, value) {
-        if (error) {
-            self.reject(error);
-        } else if (arguments.length > 2) {
-            self.resolve(array_slice(arguments, 1));
-        } else {
-            self.resolve(value);
-        }
-    };
-};
-
-/**
- * @param resolver {Function} a function that returns nothing and accepts
- * the resolve, reject, and notify functions for a deferred.
- * @returns a promise that may be resolved with the given resolve and reject
- * functions, or rejected by a thrown exception in resolver
- */
-Q.Promise = promise; // ES6
-Q.promise = promise;
-function promise(resolver) {
-    if (typeof resolver !== "function") {
-        throw new TypeError("resolver must be a function.");
-    }
-    var deferred = defer();
-    try {
-        resolver(deferred.resolve, deferred.reject, deferred.notify);
-    } catch (reason) {
-        deferred.reject(reason);
-    }
-    return deferred.promise;
-}
-
-promise.race = race; // ES6
-promise.all = all; // ES6
-promise.reject = reject; // ES6
-promise.resolve = Q; // ES6
-
-// XXX experimental.  This method is a way to denote that a local value is
-// serializable and should be immediately dispatched to a remote upon request,
-// instead of passing a reference.
-Q.passByCopy = function (object) {
-    //freeze(object);
-    //passByCopies.set(object, true);
-    return object;
-};
-
-Promise.prototype.passByCopy = function () {
-    //freeze(object);
-    //passByCopies.set(object, true);
-    return this;
-};
-
-/**
- * If two promises eventually fulfill to the same value, promises that value,
- * but otherwise rejects.
- * @param x {Any*}
- * @param y {Any*}
- * @returns {Any*} a promise for x and y if they are the same, but a rejection
- * otherwise.
- *
- */
-Q.join = function (x, y) {
-    return Q(x).join(y);
-};
-
-Promise.prototype.join = function (that) {
-    return Q([this, that]).spread(function (x, y) {
-        if (x === y) {
-            // TODO: "===" should be Object.is or equiv
-            return x;
-        } else {
-            throw new Error("Can't join: not the same: " + x + " " + y);
-        }
-    });
-};
-
-/**
- * Returns a promise for the first of an array of promises to become fulfilled.
- * @param answers {Array[Any*]} promises to race
- * @returns {Any*} the first promise to be fulfilled
- */
-Q.race = race;
-function race(answerPs) {
-    return promise(function(resolve, reject) {
-        // Switch to this once we can assume at least ES5
-        // answerPs.forEach(function(answerP) {
-        //     Q(answerP).then(resolve, reject);
-        // });
-        // Use this in the meantime
-        for (var i = 0, len = answerPs.length; i < len; i++) {
-            Q(answerPs[i]).then(resolve, reject);
-        }
-    });
-}
-
-Promise.prototype.race = function () {
-    return this.then(Q.race);
-};
-
-/**
- * Constructs a Promise with a promise descriptor object and optional fallback
- * function.  The descriptor contains methods like when(rejected), get(name),
- * set(name, value), post(name, args), and delete(name), which all
- * return either a value, a promise for a value, or a rejection.  The fallback
- * accepts the operation name, a resolver, and any further arguments that would
- * have been forwarded to the appropriate method above had a method been
- * provided with the proper name.  The API makes no guarantees about the nature
- * of the returned object, apart from that it is usable whereever promises are
- * bought and sold.
- */
-Q.makePromise = Promise;
-function Promise(descriptor, fallback, inspect) {
-    if (fallback === void 0) {
-        fallback = function (op) {
-            return reject(new Error(
-                "Promise does not support operation: " + op
-            ));
-        };
-    }
-    if (inspect === void 0) {
-        inspect = function () {
-            return {state: "unknown"};
-        };
-    }
-
-    var promise = object_create(Promise.prototype);
-
-    promise.promiseDispatch = function (resolve, op, args) {
-        var result;
-        try {
-            if (descriptor[op]) {
-                result = descriptor[op].apply(promise, args);
-            } else {
-                result = fallback.call(promise, op, args);
-            }
-        } catch (exception) {
-            result = reject(exception);
-        }
-        if (resolve) {
-            resolve(result);
-        }
-    };
-
-    promise.inspect = inspect;
-
-    // XXX deprecated `valueOf` and `exception` support
-    if (inspect) {
-        var inspected = inspect();
-        if (inspected.state === "rejected") {
-            promise.exception = inspected.reason;
-        }
-
-        promise.valueOf = function () {
-            var inspected = inspect();
-            if (inspected.state === "pending" ||
-                inspected.state === "rejected") {
-                return promise;
-            }
-            return inspected.value;
-        };
-    }
-
-    return promise;
-}
-
-Promise.prototype.toString = function () {
-    return "[object Promise]";
-};
-
-Promise.prototype.then = function (fulfilled, rejected, progressed) {
-    var self = this;
-    var deferred = defer();
-    var done = false;   // ensure the untrusted promise makes at most a
-                        // single call to one of the callbacks
-
-    function _fulfilled(value) {
-        try {
-            return typeof fulfilled === "function" ? fulfilled(value) : value;
-        } catch (exception) {
-            return reject(exception);
-        }
-    }
-
-    function _rejected(exception) {
-        if (typeof rejected === "function") {
-            makeStackTraceLong(exception, self);
-            try {
-                return rejected(exception);
-            } catch (newException) {
-                return reject(newException);
-            }
-        }
-        return reject(exception);
-    }
-
-    function _progressed(value) {
-        return typeof progressed === "function" ? progressed(value) : value;
-    }
-
-    nextTick(function () {
-        self.promiseDispatch(function (value) {
-            if (done) {
-                return;
-            }
-            done = true;
-
-            deferred.resolve(_fulfilled(value));
-        }, "when", [function (exception) {
-            if (done) {
-                return;
-            }
-            done = true;
-
-            deferred.resolve(_rejected(exception));
-        }]);
-    });
-
-    // Progress propagator need to be attached in the current tick.
-    self.promiseDispatch(void 0, "when", [void 0, function (value) {
-        var newValue;
-        var threw = false;
-        try {
-            newValue = _progressed(value);
-        } catch (e) {
-            threw = true;
-            if (Q.onerror) {
-                Q.onerror(e);
-            } else {
-                throw e;
-            }
-        }
-
-        if (!threw) {
-            deferred.notify(newValue);
-        }
-    }]);
-
-    return deferred.promise;
-};
-
-/**
- * Registers an observer on a promise.
- *
- * Guarantees:
- *
- * 1. that fulfilled and rejected will be called only once.
- * 2. that either the fulfilled callback or the rejected callback will be
- *    called, but not both.
- * 3. that fulfilled and rejected will not be called in this turn.
- *
- * @param value      promise or immediate reference to observe
- * @param fulfilled  function to be called with the fulfilled value
- * @param rejected   function to be called with the rejection exception
- * @param progressed function to be called on any progress notifications
- * @return promise for the return value from the invoked callback
- */
-Q.when = when;
-function when(value, fulfilled, rejected, progressed) {
-    return Q(value).then(fulfilled, rejected, progressed);
-}
-
-Promise.prototype.thenResolve = function (value) {
-    return this.then(function () { return value; });
-};
-
-Q.thenResolve = function (promise, value) {
-    return Q(promise).thenResolve(value);
-};
-
-Promise.prototype.thenReject = function (reason) {
-    return this.then(function () { throw reason; });
-};
-
-Q.thenReject = function (promise, reason) {
-    return Q(promise).thenReject(reason);
-};
-
-/**
- * If an object is not a promise, it is as "near" as possible.
- * If a promise is rejected, it is as "near" as possible too.
- * If it’s a fulfilled promise, the fulfillment value is nearer.
- * If it’s a deferred promise and the deferred has been resolved, the
- * resolution is "nearer".
- * @param object
- * @returns most resolved (nearest) form of the object
- */
-
-// XXX should we re-do this?
-Q.nearer = nearer;
-function nearer(value) {
-    if (isPromise(value)) {
-        var inspected = value.inspect();
-        if (inspected.state === "fulfilled") {
-            return inspected.value;
-        }
-    }
-    return value;
-}
-
-/**
- * @returns whether the given object is a promise.
- * Otherwise it is a fulfilled value.
- */
-Q.isPromise = isPromise;
-function isPromise(object) {
-    return isObject(object) &&
-        typeof object.promiseDispatch === "function" &&
-        typeof object.inspect === "function";
-}
-
-Q.isPromiseAlike = isPromiseAlike;
-function isPromiseAlike(object) {
-    return isObject(object) && typeof object.then === "function";
-}
-
-/**
- * @returns whether the given object is a pending promise, meaning not
- * fulfilled or rejected.
- */
-Q.isPending = isPending;
-function isPending(object) {
-    return isPromise(object) && object.inspect().state === "pending";
-}
-
-Promise.prototype.isPending = function () {
-    return this.inspect().state === "pending";
-};
-
-/**
- * @returns whether the given object is a value or fulfilled
- * promise.
- */
-Q.isFulfilled = isFulfilled;
-function isFulfilled(object) {
-    return !isPromise(object) || object.inspect().state === "fulfilled";
-}
-
-Promise.prototype.isFulfilled = function () {
-    return this.inspect().state === "fulfilled";
-};
-
-/**
- * @returns whether the given object is a rejected promise.
- */
-Q.isRejected = isRejected;
-function isRejected(object) {
-    return isPromise(object) && object.inspect().state === "rejected";
-}
-
-Promise.prototype.isRejected = function () {
-    return this.inspect().state === "rejected";
-};
-
-//// BEGIN UNHANDLED REJECTION TRACKING
-
-// This promise library consumes exceptions thrown in handlers so they can be
-// handled by a subsequent promise.  The exceptions get added to this array when
-// they are created, and removed when they are handled.  Note that in ES6 or
-// shimmed environments, this would naturally be a `Set`.
-var unhandledReasons = [];
-var unhandledRejections = [];
-var trackUnhandledRejections = true;
-
-function resetUnhandledRejections() {
-    unhandledReasons.length = 0;
-    unhandledRejections.length = 0;
-
-    if (!trackUnhandledRejections) {
-        trackUnhandledRejections = true;
-    }
-}
-
-function trackRejection(promise, reason) {
-    if (!trackUnhandledRejections) {
-        return;
-    }
-
-    unhandledRejections.push(promise);
-    if (reason && typeof reason.stack !== "undefined") {
-        unhandledReasons.push(reason.stack);
-    } else {
-        unhandledReasons.push("(no stack) " + reason);
-    }
-}
-
-function untrackRejection(promise) {
-    if (!trackUnhandledRejections) {
-        return;
-    }
-
-    var at = array_indexOf(unhandledRejections, promise);
-    if (at !== -1) {
-        unhandledRejections.splice(at, 1);
-        unhandledReasons.splice(at, 1);
-    }
-}
-
-Q.resetUnhandledRejections = resetUnhandledRejections;
-
-Q.getUnhandledReasons = function () {
-    // Make a copy so that consumers can't interfere with our internal state.
-    return unhandledReasons.slice();
-};
-
-Q.stopUnhandledRejectionTracking = function () {
-    resetUnhandledRejections();
-    trackUnhandledRejections = false;
-};
-
-resetUnhandledRejections();
-
-//// END UNHANDLED REJECTION TRACKING
-
-/**
- * Constructs a rejected promise.
- * @param reason value describing the failure
- */
-Q.reject = reject;
-function reject(reason) {
-    var rejection = Promise({
-        "when": function (rejected) {
-            // note that the error has been handled
-            if (rejected) {
-                untrackRejection(this);
-            }
-            return rejected ? rejected(reason) : this;
-        }
-    }, function fallback() {
-        return this;
-    }, function inspect() {
-        return { state: "rejected", reason: reason };
-    });
-
-    // Note that the reason has not been handled.
-    trackRejection(rejection, reason);
-
-    return rejection;
-}
-
-/**
- * Constructs a fulfilled promise for an immediate reference.
- * @param value immediate reference
- */
-Q.fulfill = fulfill;
-function fulfill(value) {
-    return Promise({
-        "when": function () {
-            return value;
-        },
-        "get": function (name) {
-            return value[name];
-        },
-        "set": function (name, rhs) {
-            value[name] = rhs;
-        },
-        "delete": function (name) {
-            delete value[name];
-        },
-        "post": function (name, args) {
-            // Mark Miller proposes that post with no name should apply a
-            // promised function.
-            if (name === null || name === void 0) {
-                return value.apply(void 0, args);
-            } else {
-                return value[name].apply(value, args);
-            }
-        },
-        "apply": function (thisp, args) {
-            return value.apply(thisp, args);
-        },
-        "keys": function () {
-            return object_keys(value);
-        }
-    }, void 0, function inspect() {
-        return { state: "fulfilled", value: value };
-    });
-}
-
-/**
- * Converts thenables to Q promises.
- * @param promise thenable promise
- * @returns a Q promise
- */
-function coerce(promise) {
-    var deferred = defer();
-    nextTick(function () {
-        try {
-            promise.then(deferred.resolve, deferred.reject, deferred.notify);
-        } catch (exception) {
-            deferred.reject(exception);
-        }
-    });
-    return deferred.promise;
-}
-
-/**
- * Annotates an object such that it will never be
- * transferred away from this process over any promise
- * communication channel.
- * @param object
- * @returns promise a wrapping of that object that
- * additionally responds to the "isDef" message
- * without a rejection.
- */
-Q.master = master;
-function master(object) {
-    return Promise({
-        "isDef": function () {}
-    }, function fallback(op, args) {
-        return dispatch(object, op, args);
-    }, function () {
-        return Q(object).inspect();
-    });
-}
-
-/**
- * Spreads the values of a promised array of arguments into the
- * fulfillment callback.
- * @param fulfilled callback that receives variadic arguments from the
- * promised array
- * @param rejected callback that receives the exception if the promise
- * is rejected.
- * @returns a promise for the return value or thrown exception of
- * either callback.
- */
-Q.spread = spread;
-function spread(value, fulfilled, rejected) {
-    return Q(value).spread(fulfilled, rejected);
-}
-
-Promise.prototype.spread = function (fulfilled, rejected) {
-    return this.all().then(function (array) {
-        return fulfilled.apply(void 0, array);
-    }, rejected);
-};
-
-/**
- * The async function is a decorator for generator functions, turning
- * them into asynchronous generators.  Although generators are only part
- * of the newest ECMAScript 6 drafts, this code does not cause syntax
- * errors in older engines.  This code should continue to work and will
- * in fact improve over time as the language improves.
- *
- * ES6 generators are currently part of V8 version 3.19 with the
- * --harmony-generators runtime flag enabled.  SpiderMonkey has had them
- * for longer, but under an older Python-inspired form.  This function
- * works on both kinds of generators.
- *
- * Decorates a generator function such that:
- *  - it may yield promises
- *  - execution will continue when that promise is fulfilled
- *  - the value of the yield expression will be the fulfilled value
- *  - it returns a promise for the return value (when the generator
- *    stops iterating)
- *  - the decorated function returns a promise for the return value
- *    of the generator or the first rejected promise among those
- *    yielded.
- *  - if an error is thrown in the generator, it propagates through
- *    every following yield until it is caught, or until it escapes
- *    the generator function altogether, and is translated into a
- *    rejection for the promise returned by the decorated generator.
- */
-Q.async = async;
-function async(makeGenerator) {
-    return function () {
-        // when verb is "send", arg is a value
-        // when verb is "throw", arg is an exception
-        function continuer(verb, arg) {
-            var result;
-
-            // Until V8 3.19 / Chromium 29 is released, SpiderMonkey is the only
-            // engine that has a deployed base of browsers that support generators.
-            // However, SM's generators use the Python-inspired semantics of
-            // outdated ES6 drafts.  We would like to support ES6, but we'd also
-            // like to make it possible to use generators in deployed browsers, so
-            // we also support Python-style generators.  At some point we can remove
-            // this block.
-
-            if (typeof StopIteration === "undefined") {
-                // ES6 Generators
-                try {
-                    result = generator[verb](arg);
-                } catch (exception) {
-                    return reject(exception);
-                }
-                if (result.done) {
-                    return result.value;
-                } else {
-                    return when(result.value, callback, errback);
-                }
-            } else {
-                // SpiderMonkey Generators
-                // FIXME: Remove this case when SM does ES6 generators.
-                try {
-                    result = generator[verb](arg);
-                } catch (exception) {
-                    if (isStopIteration(exception)) {
-                        return exception.value;
-                    } else {
-                        return reject(exception);
-                    }
-                }
-                return when(result, callback, errback);
-            }
-        }
-        var generator = makeGenerator.apply(this, arguments);
-        var callback = continuer.bind(continuer, "next");
-        var errback = continuer.bind(continuer, "throw");
-        return callback();
-    };
-}
-
-/**
- * The spawn function is a small wrapper around async that immediately
- * calls the generator and also ends the promise chain, so that any
- * unhandled errors are thrown instead of forwarded to the error
- * handler. This is useful because it's extremely common to run
- * generators at the top-level to work with libraries.
- */
-Q.spawn = spawn;
-function spawn(makeGenerator) {
-    Q.done(Q.async(makeGenerator)());
-}
-
-// FIXME: Remove this interface once ES6 generators are in SpiderMonkey.
-/**
- * Throws a ReturnValue exception to stop an asynchronous generator.
- *
- * This interface is a stop-gap measure to support generator return
- * values in older Firefox/SpiderMonkey.  In browsers that support ES6
- * generators like Chromium 29, just use "return" in your generator
- * functions.
- *
- * @param value the return value for the surrounding generator
- * @throws ReturnValue exception with the value.
- * @example
- * // ES6 style
- * Q.async(function* () {
- *      var foo = yield getFooPromise();
- *      var bar = yield getBarPromise();
- *      return foo + bar;
- * })
- * // Older SpiderMonkey style
- * Q.async(function () {
- *      var foo = yield getFooPromise();
- *      var bar = yield getBarPromise();
- *      Q.return(foo + bar);
- * })
- */
-Q["return"] = _return;
-function _return(value) {
-    throw new QReturnValue(value);
-}
-
-/**
- * The promised function decorator ensures that any promise arguments
- * are settled and passed as values (`this` is also settled and passed
- * as a value).  It will also ensure that the result of a function is
- * always a promise.
- *
- * @example
- * var add = Q.promised(function (a, b) {
- *     return a + b;
- * });
- * add(Q(a), Q(B));
- *
- * @param {function} callback The function to decorate
- * @returns {function} a function that has been decorated.
- */
-Q.promised = promised;
-function promised(callback) {
-    return function () {
-        return spread([this, all(arguments)], function (self, args) {
-            return callback.apply(self, args);
-        });
-    };
-}
-
-/**
- * sends a message to a value in a future turn
- * @param object* the recipient
- * @param op the name of the message operation, e.g., "when",
- * @param args further arguments to be forwarded to the operation
- * @returns result {Promise} a promise for the result of the operation
- */
-Q.dispatch = dispatch;
-function dispatch(object, op, args) {
-    return Q(object).dispatch(op, args);
-}
-
-Promise.prototype.dispatch = function (op, args) {
-    var self = this;
-    var deferred = defer();
-    nextTick(function () {
-        self.promiseDispatch(deferred.resolve, op, args);
-    });
-    return deferred.promise;
-};
-
-/**
- * Gets the value of a property in a future turn.
- * @param object    promise or immediate reference for target object
- * @param name      name of property to get
- * @return promise for the property value
- */
-Q.get = function (object, key) {
-    return Q(object).dispatch("get", [key]);
-};
-
-Promise.prototype.get = function (key) {
-    return this.dispatch("get", [key]);
-};
-
-/**
- * Sets the value of a property in a future turn.
- * @param object    promise or immediate reference for object object
- * @param name      name of property to set
- * @param value     new value of property
- * @return promise for the return value
- */
-Q.set = function (object, key, value) {
-    return Q(object).dispatch("set", [key, value]);
-};
-
-Promise.prototype.set = function (key, value) {
-    return this.dispatch("set", [key, value]);
-};
-
-/**
- * Deletes a property in a future turn.
- * @param object    promise or immediate reference for target object
- * @param name      name of property to delete
- * @return promise for the return value
- */
-Q.del = // XXX legacy
-Q["delete"] = function (object, key) {
-    return Q(object).dispatch("delete", [key]);
-};
-
-Promise.prototype.del = // XXX legacy
-Promise.prototype["delete"] = function (key) {
-    return this.dispatch("delete", [key]);
-};
-
-/**
- * Invokes a method in a future turn.
- * @param object    promise or immediate reference for target object
- * @param name      name of method to invoke
- * @param value     a value to post, typically an array of
- *                  invocation arguments for promises that
- *                  are ultimately backed with `resolve` values,
- *                  as opposed to those backed with URLs
- *                  wherein the posted value can be any
- *                  JSON serializable object.
- * @return promise for the return value
- */
-// bound locally because it is used by other methods
-Q.mapply = // XXX As proposed by "Redsandro"
-Q.post = function (object, name, args) {
-    return Q(object).dispatch("post", [name, args]);
-};
-
-Promise.prototype.mapply = // XXX As proposed by "Redsandro"
-Promise.prototype.post = function (name, args) {
-    return this.dispatch("post", [name, args]);
-};
-
-/**
- * Invokes a method in a future turn.
- * @param object    promise or immediate reference for target object
- * @param name      name of method to invoke
- * @param ...args   array of invocation arguments
- * @return promise for the return value
- */
-Q.send = // XXX Mark Miller's proposed parlance
-Q.mcall = // XXX As proposed by "Redsandro"
-Q.invoke = function (object, name /*...args*/) {
-    return Q(object).dispatch("post", [name, array_slice(arguments, 2)]);
-};
-
-Promise.prototype.send = // XXX Mark Miller's proposed parlance
-Promise.prototype.mcall = // XXX As proposed by "Redsandro"
-Promise.prototype.invoke = function (name /*...args*/) {
-    return this.dispatch("post", [name, array_slice(arguments, 1)]);
-};
-
-/**
- * Applies the promised function in a future turn.
- * @param object    promise or immediate reference for target function
- * @param args      array of application arguments
- */
-Q.fapply = function (object, args) {
-    return Q(object).dispatch("apply", [void 0, args]);
-};
-
-Promise.prototype.fapply = function (args) {
-    return this.dispatch("apply", [void 0, args]);
-};
-
-/**
- * Calls the promised function in a future turn.
- * @param object    promise or immediate reference for target function
- * @param ...args   array of application arguments
- */
-Q["try"] =
-Q.fcall = function (object /* ...args*/) {
-    return Q(object).dispatch("apply", [void 0, array_slice(arguments, 1)]);
-};
-
-Promise.prototype.fcall = function (/*...args*/) {
-    return this.dispatch("apply", [void 0, array_slice(arguments)]);
-};
-
-/**
- * Binds the promised function, transforming return values into a fulfilled
- * promise and thrown errors into a rejected one.
- * @param object    promise or immediate reference for target function
- * @param ...args   array of application arguments
- */
-Q.fbind = function (object /*...args*/) {
-    var promise = Q(object);
-    var args = array_slice(arguments, 1);
-    return function fbound() {
-        return promise.dispatch("apply", [
-            this,
-            args.concat(array_slice(arguments))
-        ]);
-    };
-};
-Promise.prototype.fbind = function (/*...args*/) {
-    var promise = this;
-    var args = array_slice(arguments);
-    return function fbound() {
-        return promise.dispatch("apply", [
-            this,
-            args.concat(array_slice(arguments))
-        ]);
-    };
-};
-
-/**
- * Requests the names of the owned properties of a promised
- * object in a future turn.
- * @param object    promise or immediate reference for target object
- * @return promise for the keys of the eventually settled object
- */
-Q.keys = function (object) {
-    return Q(object).dispatch("keys", []);
-};
-
-Promise.prototype.keys = function () {
-    return this.dispatch("keys", []);
-};
-
-/**
- * Turns an array of promises into a promise for an array.  If any of
- * the promises gets rejected, the whole array is rejected immediately.
- * @param {Array*} an array (or promise for an array) of values (or
- * promises for values)
- * @returns a promise for an array of the corresponding values
- */
-// By Mark Miller
-// http://wiki.ecmascript.org/doku.php?id=strawman:concurrency&rev=1308776521#allfulfilled
-Q.all = all;
-function all(promises) {
-    return when(promises, function (promises) {
-        var countDown = 0;
-        var deferred = defer();
-        array_reduce(promises, function (undefined, promise, index) {
-            var snapshot;
-            if (
-                isPromise(promise) &&
-                (snapshot = promise.inspect()).state === "fulfilled"
-            ) {
-                promises[index] = snapshot.value;
-            } else {
-                ++countDown;
-                when(
-                    promise,
-                    function (value) {
-                        promises[index] = value;
-                        if (--countDown === 0) {
-                            deferred.resolve(promises);
-                        }
-                    },
-                    deferred.reject,
-                    function (progress) {
-                        deferred.notify({ index: index, value: progress });
-                    }
-                );
-            }
-        }, void 0);
-        if (countDown === 0) {
-            deferred.resolve(promises);
-        }
-        return deferred.promise;
-    });
-}
-
-Promise.prototype.all = function () {
-    return all(this);
-};
-
-/**
- * Waits for all promises to be settled, either fulfilled or
- * rejected.  This is distinct from `all` since that would stop
- * waiting at the first rejection.  The promise returned by
- * `allResolved` will never be rejected.
- * @param promises a promise for an array (or an array) of promises
- * (or values)
- * @return a promise for an array of promises
- */
-Q.allResolved = deprecate(allResolved, "allResolved", "allSettled");
-function allResolved(promises) {
-    return when(promises, function (promises) {
-        promises = array_map(promises, Q);
-        return when(all(array_map(promises, function (promise) {
-            return when(promise, noop, noop);
-        })), function () {
-            return promises;
-        });
-    });
-}
-
-Promise.prototype.allResolved = function () {
-    return allResolved(this);
-};
-
-/**
- * @see Promise#allSettled
- */
-Q.allSettled = allSettled;
-function allSettled(promises) {
-    return Q(promises).allSettled();
-}
-
-/**
- * Turns an array of promises into a promise for an array of their states (as
- * returned by `inspect`) when they have all settled.
- * @param {Array[Any*]} values an array (or promise for an array) of values (or
- * promises for values)
- * @returns {Array[State]} an array of states for the respective values.
- */
-Promise.prototype.allSettled = function () {
-    return this.then(function (promises) {
-        return all(array_map(promises, function (promise) {
-            promise = Q(promise);
-            function regardless() {
-                return promise.inspect();
-            }
-            return promise.then(regardless, regardless);
-        }));
-    });
-};
-
-/**
- * Captures the failure of a promise, giving an oportunity to recover
- * with a callback.  If the given promise is fulfilled, the returned
- * promise is fulfilled.
- * @param {Any*} promise for something
- * @param {Function} callback to fulfill the returned promise if the
- * given promise is rejected
- * @returns a promise for the return value of the callback
- */
-Q.fail = // XXX legacy
-Q["catch"] = function (object, rejected) {
-    return Q(object).then(void 0, rejected);
-};
-
-Promise.prototype.fail = // XXX legacy
-Promise.prototype["catch"] = function (rejected) {
-    return this.then(void 0, rejected);
-};
-
-/**
- * Attaches a listener that can respond to progress notifications from a
- * promise's originating deferred. This listener receives the exact arguments
- * passed to ``deferred.notify``.
- * @param {Any*} promise for something
- * @param {Function} callback to receive any progress notifications
- * @returns the given promise, unchanged
- */
-Q.progress = progress;
-function progress(object, progressed) {
-    return Q(object).then(void 0, void 0, progressed);
-}
-
-Promise.prototype.progress = function (progressed) {
-    return this.then(void 0, void 0, progressed);
-};
-
-/**
- * Provides an opportunity to observe the settling of a promise,
- * regardless of whether the promise is fulfilled or rejected.  Forwards
- * the resolution to the returned promise when the callback is done.
- * The callback can return a promise to defer completion.
- * @param {Any*} promise
- * @param {Function} callback to observe the resolution of the given
- * promise, takes no arguments.
- * @returns a promise for the resolution of the given promise when
- * ``fin`` is done.
- */
-Q.fin = // XXX legacy
-Q["finally"] = function (object, callback) {
-    return Q(object)["finally"](callback);
-};
-
-Promise.prototype.fin = // XXX legacy
-Promise.prototype["finally"] = function (callback) {
-    callback = Q(callback);
-    return this.then(function (value) {
-        return callback.fcall().then(function () {
-            return value;
-        });
-    }, function (reason) {
-        // TODO attempt to recycle the rejection with "this".
-        return callback.fcall().then(function () {
-            throw reason;
-        });
-    });
-};
-
-/**
- * Terminates a chain of promises, forcing rejections to be
- * thrown as exceptions.
- * @param {Any*} promise at the end of a chain of promises
- * @returns nothing
- */
-Q.done = function (object, fulfilled, rejected, progress) {
-    return Q(object).done(fulfilled, rejected, progress);
-};
-
-Promise.prototype.done = function (fulfilled, rejected, progress) {
-    var onUnhandledError = function (error) {
-        // forward to a future turn so that ``when``
-        // does not catch it and turn it into a rejection.
-        nextTick(function () {
-            makeStackTraceLong(error, promise);
-            if (Q.onerror) {
-                Q.onerror(error);
-            } else {
-                throw error;
-            }
-        });
-    };
-
-    // Avoid unnecessary `nextTick`ing via an unnecessary `when`.
-    var promise = fulfilled || rejected || progress ?
-        this.then(fulfilled, rejected, progress) :
-        this;
-
-    if (typeof process === "object" && process && process.domain) {
-        onUnhandledError = process.domain.bind(onUnhandledError);
-    }
-
-    promise.then(void 0, onUnhandledError);
-};
-
-/**
- * Causes a promise to be rejected if it does not get fulfilled before
- * some milliseconds time out.
- * @param {Any*} promise
- * @param {Number} milliseconds timeout
- * @param {String} custom error message (optional)
- * @returns a promise for the resolution of the given promise if it is
- * fulfilled before the timeout, otherwise rejected.
- */
-Q.timeout = function (object, ms, message) {
-    return Q(object).timeout(ms, message);
-};
-
-Promise.prototype.timeout = function (ms, message) {
-    var deferred = defer();
-    var timeoutId = setTimeout(function () {
-        deferred.reject(new Error(message || "Timed out after " + ms + " ms"));
-    }, ms);
-
-    this.then(function (value) {
-        clearTimeout(timeoutId);
-        deferred.resolve(value);
-    }, function (exception) {
-        clearTimeout(timeoutId);
-        deferred.reject(exception);
-    }, deferred.notify);
-
-    return deferred.promise;
-};
-
-/**
- * Returns a promise for the given value (or promised value), some
- * milliseconds after it resolved. Passes rejections immediately.
- * @param {Any*} promise
- * @param {Number} milliseconds
- * @returns a promise for the resolution of the given promise after milliseconds
- * time has elapsed since the resolution of the given promise.
- * If the given promise rejects, that is passed immediately.
- */
-Q.delay = function (object, timeout) {
-    if (timeout === void 0) {
-        timeout = object;
-        object = void 0;
-    }
-    return Q(object).delay(timeout);
-};
-
-Promise.prototype.delay = function (timeout) {
-    return this.then(function (value) {
-        var deferred = defer();
-        setTimeout(function () {
-            deferred.resolve(value);
-        }, timeout);
-        return deferred.promise;
-    });
-};
-
-/**
- * Passes a continuation to a Node function, which is called with the given
- * arguments provided as an array, and returns a promise.
- *
- *      Q.nfapply(FS.readFile, [__filename])
- *      .then(function (content) {
- *      })
- *
- */
-Q.nfapply = function (callback, args) {
-    return Q(callback).nfapply(args);
-};
-
-Promise.prototype.nfapply = function (args) {
-    var deferred = defer();
-    var nodeArgs = array_slice(args);
-    nodeArgs.push(deferred.makeNodeResolver());
-    this.fapply(nodeArgs).fail(deferred.reject);
-    return deferred.promise;
-};
-
-/**
- * Passes a continuation to a Node function, which is called with the given
- * arguments provided individually, and returns a promise.
- * @example
- * Q.nfcall(FS.readFile, __filename)
- * .then(function (content) {
- * })
- *
- */
-Q.nfcall = function (callback /*...args*/) {
-    var args = array_slice(arguments, 1);
-    return Q(callback).nfapply(args);
-};
-
-Promise.prototype.nfcall = function (/*...args*/) {
-    var nodeArgs = array_slice(arguments);
-    var deferred = defer();
-    nodeArgs.push(deferred.makeNodeResolver());
-    this.fapply(nodeArgs).fail(deferred.reject);
-    return deferred.promise;
-};
-
-/**
- * Wraps a NodeJS continuation passing function and returns an equivalent
- * version that returns a promise.
- * @example
- * Q.nfbind(FS.readFile, __filename)("utf-8")
- * .then(console.log)
- * .done()
- */
-Q.nfbind =
-Q.denodeify = function (callback /*...args*/) {
-    var baseArgs = array_slice(arguments, 1);
-    return function () {
-        var nodeArgs = baseArgs.concat(array_slice(arguments));
-        var deferred = defer();
-        nodeArgs.push(deferred.makeNodeResolver());
-        Q(callback).fapply(nodeArgs).fail(deferred.reject);
-        return deferred.promise;
-    };
-};
-
-Promise.prototype.nfbind =
-Promise.prototype.denodeify = function (/*...args*/) {
-    var args = array_slice(arguments);
-    args.unshift(this);
-    return Q.denodeify.apply(void 0, args);
-};
-
-Q.nbind = function (callback, thisp /*...args*/) {
-    var baseArgs = array_slice(arguments, 2);
-    return function () {
-        var nodeArgs = baseArgs.concat(array_slice(arguments));
-        var deferred = defer();
-        nodeArgs.push(deferred.makeNodeResolver());
-        function bound() {
-            return callback.apply(thisp, arguments);
-        }
-        Q(bound).fapply(nodeArgs).fail(deferred.reject);
-        return deferred.promise;
-    };
-};
-
-Promise.prototype.nbind = function (/*thisp, ...args*/) {
-    var args = array_slice(arguments, 0);
-    args.unshift(this);
-    return Q.nbind.apply(void 0, args);
-};
-
-/**
- * Calls a method of a Node-style object that accepts a Node-style
- * callback with a given array of arguments, plus a provided callback.
- * @param object an object that has the named method
- * @param {String} name name of the method of object
- * @param {Array} args arguments to pass to the method; the callback
- * will be provided by Q and appended to these arguments.
- * @returns a promise for the value or error
- */
-Q.nmapply = // XXX As proposed by "Redsandro"
-Q.npost = function (object, name, args) {
-    return Q(object).npost(name, args);
-};
-
-Promise.prototype.nmapply = // XXX As proposed by "Redsandro"
-Promise.prototype.npost = function (name, args) {
-    var nodeArgs = array_slice(args || []);
-    var deferred = defer();
-    nodeArgs.push(deferred.makeNodeResolver());
-    this.dispatch("post", [name, nodeArgs]).fail(deferred.reject);
-    return deferred.promise;
-};
-
-/**
- * Calls a method of a Node-style object that accepts a Node-style
- * callback, forwarding the given variadic arguments, plus a provided
- * callback argument.
- * @param object an object that has the named method
- * @param {String} name name of the method of object
- * @param ...args arguments to pass to the method; the callback will
- * be provided by Q and appended to these arguments.
- * @returns a promise for the value or error
- */
-Q.nsend = // XXX Based on Mark Miller's proposed "send"
-Q.nmcall = // XXX Based on "Redsandro's" proposal
-Q.ninvoke = function (object, name /*...args*/) {
-    var nodeArgs = array_slice(arguments, 2);
-    var deferred = defer();
-    nodeArgs.push(deferred.makeNodeResolver());
-    Q(object).dispatch("post", [name, nodeArgs]).fail(deferred.reject);
-    return deferred.promise;
-};
-
-Promise.prototype.nsend = // XXX Based on Mark Miller's proposed "send"
-Promise.prototype.nmcall = // XXX Based on "Redsandro's" proposal
-Promise.prototype.ninvoke = function (name /*...args*/) {
-    var nodeArgs = array_slice(arguments, 1);
-    var deferred = defer();
-    nodeArgs.push(deferred.makeNodeResolver());
-    this.dispatch("post", [name, nodeArgs]).fail(deferred.reject);
-    return deferred.promise;
-};
-
-/**
- * If a function would like to support both Node continuation-passing-style and
- * promise-returning-style, it can end its internal promise chain with
- * `nodeify(nodeback)`, forwarding the optional nodeback argument.  If the user
- * elects to use a nodeback, the result will be sent there.  If they do not
- * pass a nodeback, they will receive the result promise.
- * @param object a result (or a promise for a result)
- * @param {Function} nodeback a Node.js-style callback
- * @returns either the promise or nothing
- */
-Q.nodeify = nodeify;
-function nodeify(object, nodeback) {
-    return Q(object).nodeify(nodeback);
-}
-
-Promise.prototype.nodeify = function (nodeback) {
-    if (nodeback) {
-        this.then(function (value) {
-            nextTick(function () {
-                nodeback(null, value);
-            });
-        }, function (error) {
-            nextTick(function () {
-                nodeback(error);
-            });
-        });
-    } else {
-        return this;
-    }
-};
-
-// All code before this point will be filtered from stack traces.
-var qEndingLine = captureLine();
-
-return Q;
-
-});
diff --git a/bin/node_modules/q/queue.js b/bin/node_modules/q/queue.js
deleted file mode 100644
index 1505fd0..0000000
--- a/bin/node_modules/q/queue.js
+++ /dev/null
@@ -1,35 +0,0 @@
-
-var Q = require("./q");
-
-module.exports = Queue;
-function Queue() {
-    var ends = Q.defer();
-    var closed = Q.defer();
-    return {
-        put: function (value) {
-            var next = Q.defer();
-            ends.resolve({
-                head: value,
-                tail: next.promise
-            });
-            ends.resolve = next.resolve;
-        },
-        get: function () {
-            var result = ends.promise.get("head");
-            ends.promise = ends.promise.get("tail");
-            return result.fail(function (error) {
-                closed.resolve(error);
-                throw error;
-            });
-        },
-        closed: closed.promise,
-        close: function (error) {
-            error = error || new Error("Can't get value from closed queue");
-            var end = {head: Q.reject(error)};
-            end.tail = end;
-            ends.resolve(end);
-            return closed.promise;
-        }
-    };
-}
-
diff --git a/bin/node_modules/shelljs/LICENSE b/bin/node_modules/shelljs/LICENSE
deleted file mode 100644
index 1b35ee9..0000000
--- a/bin/node_modules/shelljs/LICENSE
+++ /dev/null
@@ -1,26 +0,0 @@
-Copyright (c) 2012, Artur Adib <aadib@mozilla.com>
-All rights reserved.
-
-You may use this project under the terms of the New BSD license as follows:
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-    * Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above copyright
-      notice, this list of conditions and the following disclaimer in the
-      documentation and/or other materials provided with the distribution.
-    * Neither the name of Artur Adib nor the
-      names of the contributors may be used to endorse or promote products
-      derived from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
-ARE DISCLAIMED. IN NO EVENT SHALL ARTUR ADIB BE LIABLE FOR ANY
-DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 
-THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/bin/node_modules/shelljs/package.json b/bin/node_modules/shelljs/package.json
deleted file mode 100644
index 674a1ff..0000000
--- a/bin/node_modules/shelljs/package.json
+++ /dev/null
@@ -1,48 +0,0 @@
-{
-  "name": "shelljs",
-  "version": "0.1.4",
-  "author": {
-    "name": "Artur Adib",
-    "email": "aadib@mozilla.com"
-  },
-  "description": "Portable Unix shell commands for Node.js",
-  "keywords": [
-    "unix",
-    "shell",
-    "makefile",
-    "make",
-    "jake",
-    "synchronous"
-  ],
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/arturadib/shelljs.git"
-  },
-  "homepage": "http://github.com/arturadib/shelljs",
-  "main": "./shell.js",
-  "scripts": {
-    "test": "node scripts/run-tests"
-  },
-  "bin": {
-    "shjs": "./bin/shjs"
-  },
-  "dependencies": {},
-  "devDependencies": {
-    "jshint": "~1.1.0"
-  },
-  "optionalDependencies": {},
-  "engines": {
-    "node": "*"
-  },
-  "readme": "# ShellJS - Unix shell commands for Node.js [![Build Status](https://secure.travis-ci.org/arturadib/shelljs.png)](http://travis-ci.org/arturadib/shelljs)\n\nShellJS is a portable **(Windows/Linux/OS X)** implementation of Unix shell commands on top of the Node.js API. You can use it to eliminate your shell script's dependency on Unix while still keeping its familiar and powerful commands. You can also install it globally so you can run it from outside Node projects - say goodbye to those gnarly Bash scripts!\n\nThe project is [unit-tested](http://travis-ci.org/arturadib/shelljs) and battled-tested in projects like:\n\n+ [PDF.js](http://github.com/mozilla/pdf.js) - Firefox's next-gen PDF reader\n+ [Firebug](http://getfirebug.com/) - Firefox's infamous debugger\n+ [JSHint](http://jshint.com) - Most popular JavaScript linter\n+ [Zepto](http://zeptojs.com) - jQuery-compatible JavaScript library for modern browsers\n+ [Yeoman](http://yeoman.io/) - Web application stack and development tool\n+ [Deployd.com](http://deployd.com) - Open source PaaS for quick API backend generation\n\nand [many more](https://npmjs.org/browse/depended/shelljs).\n\n## Installing\n\nVia npm:\n\n```bash\n$ npm install [-g] shelljs\n```\n\nIf the global option `-g` is specified, the binary `shjs` will be installed. This makes it possible to\nrun ShellJS scripts much like any shell script from the command line, i.e. without requiring a `node_modules` folder:\n\n```bash\n$ shjs my_script\n```\n\nYou can also just copy `shell.js` into your project's directory, and `require()` accordingly.\n\n\n## Examples\n\n### JavaScript\n\n```javascript\nrequire('shelljs/global');\n\nif (!which('git')) {\n  echo('Sorry, this script requires git');\n  exit(1);\n}\n\n// Copy files to release dir\nmkdir('-p', 'out/Release');\ncp('-R', 'stuff/*', 'out/Release');\n\n// Replace macros in each .js file\ncd('lib');\nls('*.js').forEach(function(file) {\n  sed('-i', 'BUILD_VERSION', 'v0.1.2', file);\n  sed('-i', /.*REMOVE_THIS_LINE.*\\n/, '', file);\n  sed('-i', /.*REPLACE_LINE_WITH_MACRO.*\\n/, cat('macro.js'), file);\n});\ncd('..');\n\n// Run external tool synchronously\nif (exec('git commit -am \"Auto-commit\"').code !== 0) {\n  echo('Error: Git commit failed');\n  exit(1);\n}\n```\n\n### CoffeeScript\n\n```coffeescript\nrequire 'shelljs/global'\n\nif not which 'git'\n  echo 'Sorry, this script requires git'\n  exit 1\n\n# Copy files to release dir\nmkdir '-p', 'out/Release'\ncp '-R', 'stuff/*', 'out/Release'\n\n# Replace macros in each .js file\ncd 'lib'\nfor file in ls '*.js'\n  sed '-i', 'BUILD_VERSION', 'v0.1.2', file\n  sed '-i', /.*REMOVE_THIS_LINE.*\\n/, '', file\n  sed '-i', /.*REPLACE_LINE_WITH_MACRO.*\\n/, cat 'macro.js', file\ncd '..'\n\n# Run external tool synchronously\nif (exec 'git commit -am \"Auto-commit\"').code != 0\n  echo 'Error: Git commit failed'\n  exit 1\n```\n\n## Global vs. Local\n\nThe example above uses the convenience script `shelljs/global` to reduce verbosity. If polluting your global namespace is not desirable, simply require `shelljs`.\n\nExample:\n\n```javascript\nvar shell = require('shelljs');\nshell.echo('hello world');\n```\n\n## Make tool\n\nA convenience script `shelljs/make` is also provided to mimic the behavior of a Unix Makefile. In this case all shell objects are global, and command line arguments will cause the script to execute only the corresponding function in the global `target` object. To avoid redundant calls, target functions are executed only once per script.\n\nExample (CoffeeScript):\n\n```coffeescript\nrequire 'shelljs/make'\n\ntarget.all = ->\n  target.bundle()\n  target.docs()\n\ntarget.bundle = ->\n  cd __dirname\n  mkdir 'build'\n  cd 'lib'\n  (cat '*.js').to '../build/output.js'\n\ntarget.docs = ->\n  cd __dirname\n  mkdir 'docs'\n  cd 'lib'\n  for file in ls '*.js'\n    text = grep '//@', file     # extract special comments\n    text.replace '//@', ''      # remove comment tags\n    text.to 'docs/my_docs.md'\n```\n\nTo run the target `all`, call the above script without arguments: `$ node make`. To run the target `docs`: `$ node make docs`, and so on.\n\n\n\n<!-- \n\n  DO NOT MODIFY BEYOND THIS POINT - IT'S AUTOMATICALLY GENERATED\n\n-->\n\n\n## Command reference\n\n\nAll commands run synchronously, unless otherwise stated.\n\n\n### cd('dir')\nChanges to directory `dir` for the duration of the script\n\n### pwd()\nReturns the current directory.\n\n### ls([options ,] path [,path ...])\n### ls([options ,] path_array)\nAvailable options:\n\n+ `-R`: recursive\n+ `-A`: all files (include files beginning with `.`, except for `.` and `..`)\n\nExamples:\n\n```javascript\nls('projs/*.js');\nls('-R', '/users/me', '/tmp');\nls('-R', ['/users/me', '/tmp']); // same as above\n```\n\nReturns array of files in the given path, or in current directory if no path provided.\n\n### find(path [,path ...])\n### find(path_array)\nExamples:\n\n```javascript\nfind('src', 'lib');\nfind(['src', 'lib']); // same as above\nfind('.').filter(function(file) { return file.match(/\\.js$/); });\n```\n\nReturns array of all files (however deep) in the given paths.\n\nThe main difference from `ls('-R', path)` is that the resulting file names\ninclude the base directories, e.g. `lib/resources/file1` instead of just `file1`.\n\n### cp([options ,] source [,source ...], dest)\n### cp([options ,] source_array, dest)\nAvailable options:\n\n+ `-f`: force\n+ `-r, -R`: recursive\n\nExamples:\n\n```javascript\ncp('file1', 'dir1');\ncp('-Rf', '/tmp/*', '/usr/local/*', '/home/tmp');\ncp('-Rf', ['/tmp/*', '/usr/local/*'], '/home/tmp'); // same as above\n```\n\nCopies files. The wildcard `*` is accepted.\n\n### rm([options ,] file [, file ...])\n### rm([options ,] file_array)\nAvailable options:\n\n+ `-f`: force\n+ `-r, -R`: recursive\n\nExamples:\n\n```javascript\nrm('-rf', '/tmp/*');\nrm('some_file.txt', 'another_file.txt');\nrm(['some_file.txt', 'another_file.txt']); // same as above\n```\n\nRemoves files. The wildcard `*` is accepted.\n\n### mv(source [, source ...], dest')\n### mv(source_array, dest')\nAvailable options:\n\n+ `f`: force\n\nExamples:\n\n```javascript\nmv('-f', 'file', 'dir/');\nmv('file1', 'file2', 'dir/');\nmv(['file1', 'file2'], 'dir/'); // same as above\n```\n\nMoves files. The wildcard `*` is accepted.\n\n### mkdir([options ,] dir [, dir ...])\n### mkdir([options ,] dir_array)\nAvailable options:\n\n+ `p`: full path (will create intermediate dirs if necessary)\n\nExamples:\n\n```javascript\nmkdir('-p', '/tmp/a/b/c/d', '/tmp/e/f/g');\nmkdir('-p', ['/tmp/a/b/c/d', '/tmp/e/f/g']); // same as above\n```\n\nCreates directories.\n\n### test(expression)\nAvailable expression primaries:\n\n+ `'-b', 'path'`: true if path is a block device\n+ `'-c', 'path'`: true if path is a character device\n+ `'-d', 'path'`: true if path is a directory\n+ `'-e', 'path'`: true if path exists\n+ `'-f', 'path'`: true if path is a regular file\n+ `'-L', 'path'`: true if path is a symbolic link\n+ `'-p', 'path'`: true if path is a pipe (FIFO)\n+ `'-S', 'path'`: true if path is a socket\n\nExamples:\n\n```javascript\nif (test('-d', path)) { /* do something with dir */ };\nif (!test('-f', path)) continue; // skip if it's a regular file\n```\n\nEvaluates expression using the available primaries and returns corresponding value.\n\n### cat(file [, file ...])\n### cat(file_array)\n\nExamples:\n\n```javascript\nvar str = cat('file*.txt');\nvar str = cat('file1', 'file2');\nvar str = cat(['file1', 'file2']); // same as above\n```\n\nReturns a string containing the given file, or a concatenated string\ncontaining the files if more than one file is given (a new line character is\nintroduced between each file). Wildcard `*` accepted.\n\n### 'string'.to(file)\n\nExamples:\n\n```javascript\ncat('input.txt').to('output.txt');\n```\n\nAnalogous to the redirection operator `>` in Unix, but works with JavaScript strings (such as\nthose returned by `cat`, `grep`, etc). _Like Unix redirections, `to()` will overwrite any existing file!_\n\n### sed([options ,] search_regex, replace_str, file)\nAvailable options:\n\n+ `-i`: Replace contents of 'file' in-place. _Note that no backups will be created!_\n\nExamples:\n\n```javascript\nsed('-i', 'PROGRAM_VERSION', 'v0.1.3', 'source.js');\nsed(/.*DELETE_THIS_LINE.*\\n/, '', 'source.js');\n```\n\nReads an input string from `file` and performs a JavaScript `replace()` on the input\nusing the given search regex and replacement string. Returns the new string after replacement.\n\n### grep([options ,] regex_filter, file [, file ...])\n### grep([options ,] regex_filter, file_array)\nAvailable options:\n\n+ `-v`: Inverse the sense of the regex and print the lines not matching the criteria.\n\nExamples:\n\n```javascript\ngrep('-v', 'GLOBAL_VARIABLE', '*.js');\ngrep('GLOBAL_VARIABLE', '*.js');\n```\n\nReads input string from given files and returns a string containing all lines of the\nfile that match the given `regex_filter`. Wildcard `*` accepted.\n\n### which(command)\n\nExamples:\n\n```javascript\nvar nodeExec = which('node');\n```\n\nSearches for `command` in the system's PATH. On Windows looks for `.exe`, `.cmd`, and `.bat` extensions.\nReturns string containing the absolute path to the command.\n\n### echo(string [,string ...])\n\nExamples:\n\n```javascript\necho('hello world');\nvar str = echo('hello world');\n```\n\nPrints string to stdout, and returns string with additional utility methods\nlike `.to()`.\n\n### dirs([options | '+N' | '-N'])\n\nAvailable options:\n\n+ `-c`: Clears the directory stack by deleting all of the elements.\n\nArguments:\n\n+ `+N`: Displays the Nth directory (counting from the left of the list printed by dirs when invoked without options), starting with zero.\n+ `-N`: Displays the Nth directory (counting from the right of the list printed by dirs when invoked without options), starting with zero.\n\nDisplay the list of currently remembered directories. Returns an array of paths in the stack, or a single path if +N or -N was specified.\n\nSee also: pushd, popd\n\n### pushd([options,] [dir | '-N' | '+N'])\n\nAvailable options:\n\n+ `-n`: Suppresses the normal change of directory when adding directories to the stack, so that only the stack is manipulated.\n\nArguments:\n\n+ `dir`: Makes the current working directory be the top of the stack, and then executes the equivalent of `cd dir`.\n+ `+N`: Brings the Nth directory (counting from the left of the list printed by dirs, starting with zero) to the top of the list by rotating the stack.\n+ `-N`: Brings the Nth directory (counting from the right of the list printed by dirs, starting with zero) to the top of the list by rotating the stack.\n\nExamples:\n\n```javascript\n// process.cwd() === '/usr'\npushd('/etc'); // Returns /etc /usr\npushd('+1');   // Returns /usr /etc\n```\n\nSave the current directory on the top of the directory stack and then cd to `dir`. With no arguments, pushd exchanges the top two directories. Returns an array of paths in the stack.\n\n### popd([options,] ['-N' | '+N'])\n\nAvailable options:\n\n+ `-n`: Suppresses the normal change of directory when removing directories from the stack, so that only the stack is manipulated.\n\nArguments:\n\n+ `+N`: Removes the Nth directory (counting from the left of the list printed by dirs), starting with zero.\n+ `-N`: Removes the Nth directory (counting from the right of the list printed by dirs), starting with zero.\n\nExamples:\n\n```javascript\necho(process.cwd()); // '/usr'\npushd('/etc');       // '/etc /usr'\necho(process.cwd()); // '/etc'\npopd();              // '/usr'\necho(process.cwd()); // '/usr'\n```\n\nWhen no arguments are given, popd removes the top directory from the stack and performs a cd to the new top directory. The elements are numbered from 0 starting at the first directory listed with dirs; i.e., popd is equivalent to popd +0. Returns an array of paths in the stack.\n\n### exit(code)\nExits the current process with the given exit code.\n\n### env['VAR_NAME']\nObject containing environment variables (both getter and setter). Shortcut to process.env.\n\n### exec(command [, options] [, callback])\nAvailable options (all `false` by default):\n\n+ `async`: Asynchronous execution. Defaults to true if a callback is provided.\n+ `silent`: Do not echo program output to console.\n\nExamples:\n\n```javascript\nvar version = exec('node --version', {silent:true}).output;\n\nvar child = exec('some_long_running_process', {async:true});\nchild.stdout.on('data', function(data) {\n  /* ... do something with data ... */\n});\n\nexec('some_long_running_process', function(code, output) {\n  console.log('Exit code:', code);\n  console.log('Program output:', output);\n});\n```\n\nExecutes the given `command` _synchronously_, unless otherwise specified.\nWhen in synchronous mode returns the object `{ code:..., output:... }`, containing the program's\n`output` (stdout + stderr)  and its exit `code`. Otherwise returns the child process object, and\nthe `callback` gets the arguments `(code, output)`.\n\n**Note:** For long-lived processes, it's best to run `exec()` asynchronously as\nthe current synchronous implementation uses a lot of CPU. This should be getting\nfixed soon.\n\n### chmod(octal_mode || octal_string, file)\n### chmod(symbolic_mode, file)\n\nAvailable options:\n\n+ `-v`: output a diagnostic for every file processed\n+ `-c`: like verbose but report only when a change is made\n+ `-R`: change files and directories recursively\n\nExamples:\n\n```javascript\nchmod(755, '/Users/brandon');\nchmod('755', '/Users/brandon'); // same as above \nchmod('u+x', '/Users/brandon');\n```\n\nAlters the permissions of a file or directory by either specifying the\nabsolute permissions in octal form or expressing the changes in symbols.\nThis command tries to mimic the POSIX behavior as much as possible.\nNotable exceptions:\n\n+ In symbolic modes, 'a-r' and '-r' are identical.  No consideration is\n  given to the umask.\n+ There is no \"quiet\" option since default behavior is to run silent.\n\n## Configuration\n\n\n### config.silent\nExample:\n\n```javascript\nvar silentState = config.silent; // save old silent state\nconfig.silent = true;\n/* ... */\nconfig.silent = silentState; // restore old silent state\n```\n\nSuppresses all command output if `true`, except for `echo()` calls.\nDefault is `false`.\n\n### config.fatal\nExample:\n\n```javascript\nconfig.fatal = true;\ncp('this_file_does_not_exist', '/dev/null'); // dies here\n/* more commands... */\n```\n\nIf `true` the script will die on errors. Default is `false`.\n\n## Non-Unix commands\n\n\n### tempdir()\nSearches and returns string containing a writeable, platform-dependent temporary directory.\nFollows Python's [tempfile algorithm](http://docs.python.org/library/tempfile.html#tempfile.tempdir).\n\n### error()\nTests if error occurred in the last command. Returns `null` if no error occurred,\notherwise returns string explaining the error\n",
-  "readmeFilename": "README.md",
-  "bugs": {
-    "url": "https://github.com/arturadib/shelljs/issues"
-  },
-  "_id": "shelljs@0.1.4",
-  "dist": {
-    "shasum": "7a8aeaa3dc3c0be2e59d83168e83b4c4bc4dac95"
-  },
-  "_from": "shelljs@0.1.4",
-  "_resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.1.4.tgz"
-}
diff --git a/bin/node_modules/shelljs/shell.js b/bin/node_modules/shelljs/shell.js
deleted file mode 100644
index 4190aa3..0000000
--- a/bin/node_modules/shelljs/shell.js
+++ /dev/null
@@ -1,1901 +0,0 @@
-//
-// ShellJS
-// Unix shell commands on top of Node's API
-//
-// Copyright (c) 2012 Artur Adib
-// http://github.com/arturadib/shelljs
-//
-
-var fs = require('fs'),
-    path = require('path'),
-    util = require('util'),
-    vm = require('vm'),
-    child = require('child_process'),
-    os = require('os');
-
-// Node shims for < v0.7
-fs.existsSync = fs.existsSync || path.existsSync;
-
-var config = {
-  silent: false,
-  fatal: false
-};
-
-var state = {
-      error: null,
-      currentCmd: 'shell.js',
-      tempDir: null
-    },
-    platform = os.type().match(/^Win/) ? 'win' : 'unix';
-
-
-//@
-//@ All commands run synchronously, unless otherwise stated.
-//@
-
-
-//@
-//@ ### cd('dir')
-//@ Changes to directory `dir` for the duration of the script
-function _cd(options, dir) {
-  if (!dir)
-    error('directory not specified');
-
-  if (!fs.existsSync(dir))
-    error('no such file or directory: ' + dir);
-
-  if (!fs.statSync(dir).isDirectory())
-    error('not a directory: ' + dir);
-
-  process.chdir(dir);
-}
-exports.cd = wrap('cd', _cd);
-
-//@
-//@ ### pwd()
-//@ Returns the current directory.
-function _pwd(options) {
-  var pwd = path.resolve(process.cwd());
-  return ShellString(pwd);
-}
-exports.pwd = wrap('pwd', _pwd);
-
-
-//@
-//@ ### ls([options ,] path [,path ...])
-//@ ### ls([options ,] path_array)
-//@ Available options:
-//@
-//@ + `-R`: recursive
-//@ + `-A`: all files (include files beginning with `.`, except for `.` and `..`)
-//@
-//@ Examples:
-//@
-//@ ```javascript
-//@ ls('projs/*.js');
-//@ ls('-R', '/users/me', '/tmp');
-//@ ls('-R', ['/users/me', '/tmp']); // same as above
-//@ ```
-//@
-//@ Returns array of files in the given path, or in current directory if no path provided.
-function _ls(options, paths) {
-  options = parseOptions(options, {
-    'R': 'recursive',
-    'A': 'all',
-    'a': 'all_deprecated'
-  });
-
-  if (options.all_deprecated) {
-    // We won't support the -a option as it's hard to image why it's useful
-    // (it includes '.' and '..' in addition to '.*' files)
-    // For backwards compatibility we'll dump a deprecated message and proceed as before
-    log('ls: Option -a is deprecated. Use -A instead');
-    options.all = true;
-  }
-
-  if (!paths)
-    paths = ['.'];
-  else if (typeof paths === 'object')
-    paths = paths; // assume array
-  else if (typeof paths === 'string')
-    paths = [].slice.call(arguments, 1);
-
-  var list = [];
-
-  // Conditionally pushes file to list - returns true if pushed, false otherwise
-  // (e.g. prevents hidden files to be included unless explicitly told so)
-  function pushFile(file, query) {
-    // hidden file?
-    if (path.basename(file)[0] === '.') {
-      // not explicitly asking for hidden files?
-      if (!options.all && !(path.basename(query)[0] === '.' && path.basename(query).length > 1))
-        return false;
-    }
-
-    if (platform === 'win')
-      file = file.replace(/\\/g, '/');
-
-    list.push(file);
-    return true;
-  }
-
-  paths.forEach(function(p) {
-    if (fs.existsSync(p)) {
-      var stats = fs.statSync(p);
-      // Simple file?
-      if (stats.isFile()) {
-        pushFile(p, p);
-        return; // continue
-      }
-
-      // Simple dir?
-      if (stats.isDirectory()) {
-        // Iterate over p contents
-        fs.readdirSync(p).forEach(function(file) {
-          if (!pushFile(file, p))
-            return;
-
-          // Recursive?
-          if (options.recursive) {
-            var oldDir = _pwd();
-            _cd('', p);
-            if (fs.statSync(file).isDirectory())
-              list = list.concat(_ls('-R'+(options.all?'A':''), file+'/*'));
-            _cd('', oldDir);
-          }
-        });
-        return; // continue
-      }
-    }
-
-    // p does not exist - possible wildcard present
-
-    var basename = path.basename(p);
-    var dirname = path.dirname(p);
-    // Wildcard present on an existing dir? (e.g. '/tmp/*.js')
-    if (basename.search(/\*/) > -1 && fs.existsSync(dirname) && fs.statSync(dirname).isDirectory) {
-      // Escape special regular expression chars
-      var regexp = basename.replace(/(\^|\$|\(|\)|<|>|\[|\]|\{|\}|\.|\+|\?)/g, '\\$1');
-      // Translates wildcard into regex
-      regexp = '^' + regexp.replace(/\*/g, '.*') + '$';
-      // Iterate over directory contents
-      fs.readdirSync(dirname).forEach(function(file) {
-        if (file.match(new RegExp(regexp))) {
-          if (!pushFile(path.normalize(dirname+'/'+file), basename))
-            return;
-
-          // Recursive?
-          if (options.recursive) {
-            var pp = dirname + '/' + file;
-            if (fs.lstatSync(pp).isDirectory())
-              list = list.concat(_ls('-R'+(options.all?'A':''), pp+'/*'));
-          } // recursive
-        } // if file matches
-      }); // forEach
-      return;
-    }
-
-    error('no such file or directory: ' + p, true);
-  });
-
-  return list;
-}
-exports.ls = wrap('ls', _ls);
-
-
-//@
-//@ ### find(path [,path ...])
-//@ ### find(path_array)
-//@ Examples:
-//@
-//@ ```javascript
-//@ find('src', 'lib');
-//@ find(['src', 'lib']); // same as above
-//@ find('.').filter(function(file) { return file.match(/\.js$/); });
-//@ ```
-//@
-//@ Returns array of all files (however deep) in the given paths.
-//@
-//@ The main difference from `ls('-R', path)` is that the resulting file names
-//@ include the base directories, e.g. `lib/resources/file1` instead of just `file1`.
-function _find(options, paths) {
-  if (!paths)
-    error('no path specified');
-  else if (typeof paths === 'object')
-    paths = paths; // assume array
-  else if (typeof paths === 'string')
-    paths = [].slice.call(arguments, 1);
-
-  var list = [];
-
-  function pushFile(file) {
-    if (platform === 'win')
-      file = file.replace(/\\/g, '/');
-    list.push(file);
-  }
-
-  // why not simply do ls('-R', paths)? because the output wouldn't give the base dirs
-  // to get the base dir in the output, we need instead ls('-R', 'dir/*') for every directory
-
-  paths.forEach(function(file) {
-    pushFile(file);
-
-    if (fs.statSync(file).isDirectory()) {
-      _ls('-RA', file+'/*').forEach(function(subfile) {
-        pushFile(subfile);
-      });
-    }
-  });
-
-  return list;
-}
-exports.find = wrap('find', _find);
-
-
-//@
-//@ ### cp([options ,] source [,source ...], dest)
-//@ ### cp([options ,] source_array, dest)
-//@ Available options:
-//@
-//@ + `-f`: force
-//@ + `-r, -R`: recursive
-//@
-//@ Examples:
-//@
-//@ ```javascript
-//@ cp('file1', 'dir1');
-//@ cp('-Rf', '/tmp/*', '/usr/local/*', '/home/tmp');
-//@ cp('-Rf', ['/tmp/*', '/usr/local/*'], '/home/tmp'); // same as above
-//@ ```
-//@
-//@ Copies files. The wildcard `*` is accepted.
-function _cp(options, sources, dest) {
-  options = parseOptions(options, {
-    'f': 'force',
-    'R': 'recursive',
-    'r': 'recursive'
-  });
-
-  // Get sources, dest
-  if (arguments.length < 3) {
-    error('missing <source> and/or <dest>');
-  } else if (arguments.length > 3) {
-    sources = [].slice.call(arguments, 1, arguments.length - 1);
-    dest = arguments[arguments.length - 1];
-  } else if (typeof sources === 'string') {
-    sources = [sources];
-  } else if ('length' in sources) {
-    sources = sources; // no-op for array
-  } else {
-    error('invalid arguments');
-  }
-
-  var exists = fs.existsSync(dest),
-      stats = exists && fs.statSync(dest);
-
-  // Dest is not existing dir, but multiple sources given
-  if ((!exists || !stats.isDirectory()) && sources.length > 1)
-    error('dest is not a directory (too many sources)');
-
-  // Dest is an existing file, but no -f given
-  if (exists && stats.isFile() && !options.force)
-    error('dest file already exists: ' + dest);
-
-  if (options.recursive) {
-    // Recursive allows the shortcut syntax "sourcedir/" for "sourcedir/*"
-    // (see Github issue #15)
-    sources.forEach(function(src, i) {
-      if (src[src.length - 1] === '/')
-        sources[i] += '*';
-    });
-
-    // Create dest
-    try {
-      fs.mkdirSync(dest, parseInt('0777', 8));
-    } catch (e) {
-      // like Unix's cp, keep going even if we can't create dest dir
-    }
-  }
-
-  sources = expand(sources);
-
-  sources.forEach(function(src) {
-    if (!fs.existsSync(src)) {
-      error('no such file or directory: '+src, true);
-      return; // skip file
-    }
-
-    // If here, src exists
-    if (fs.statSync(src).isDirectory()) {
-      if (!options.recursive) {
-        // Non-Recursive
-        log(src + ' is a directory (not copied)');
-      } else {
-        // Recursive
-        // 'cp /a/source dest' should create 'source' in 'dest'
-        var newDest = path.join(dest, path.basename(src)),
-            checkDir = fs.statSync(src);
-        try {
-          fs.mkdirSync(newDest, checkDir.mode);
-        } catch (e) {
-          //if the directory already exists, that's okay
-          if (e.code !== 'EEXIST') throw e;
-        }
-
-        cpdirSyncRecursive(src, newDest, {force: options.force});
-      }
-      return; // done with dir
-    }
-
-    // If here, src is a file
-
-    // When copying to '/path/dir':
-    //    thisDest = '/path/dir/file1'
-    var thisDest = dest;
-    if (fs.existsSync(dest) && fs.statSync(dest).isDirectory())
-      thisDest = path.normalize(dest + '/' + path.basename(src));
-
-    if (fs.existsSync(thisDest) && !options.force) {
-      error('dest file already exists: ' + thisDest, true);
-      return; // skip file
-    }
-
-    copyFileSync(src, thisDest);
-  }); // forEach(src)
-}
-exports.cp = wrap('cp', _cp);
-
-//@
-//@ ### rm([options ,] file [, file ...])
-//@ ### rm([options ,] file_array)
-//@ Available options:
-//@
-//@ + `-f`: force
-//@ + `-r, -R`: recursive
-//@
-//@ Examples:
-//@
-//@ ```javascript
-//@ rm('-rf', '/tmp/*');
-//@ rm('some_file.txt', 'another_file.txt');
-//@ rm(['some_file.txt', 'another_file.txt']); // same as above
-//@ ```
-//@
-//@ Removes files. The wildcard `*` is accepted.
-function _rm(options, files) {
-  options = parseOptions(options, {
-    'f': 'force',
-    'r': 'recursive',
-    'R': 'recursive'
-  });
-  if (!files)
-    error('no paths given');
-
-  if (typeof files === 'string')
-    files = [].slice.call(arguments, 1);
-  // if it's array leave it as it is
-
-  files = expand(files);
-
-  files.forEach(function(file) {
-    if (!fs.existsSync(file)) {
-      // Path does not exist, no force flag given
-      if (!options.force)
-        error('no such file or directory: '+file, true);
-
-      return; // skip file
-    }
-
-    // If here, path exists
-
-    var stats = fs.statSync(file);
-    // Remove simple file
-    if (stats.isFile()) {
-
-      // Do not check for file writing permissions
-      if (options.force) {
-        _unlinkSync(file);
-        return;
-      }
-
-      if (isWriteable(file))
-        _unlinkSync(file);
-      else
-        error('permission denied: '+file, true);
-
-      return;
-    } // simple file
-
-    // Path is an existing directory, but no -r flag given
-    if (stats.isDirectory() && !options.recursive) {
-      error('path is a directory', true);
-      return; // skip path
-    }
-
-    // Recursively remove existing directory
-    if (stats.isDirectory() && options.recursive) {
-      rmdirSyncRecursive(file, options.force);
-    }
-  }); // forEach(file)
-} // rm
-exports.rm = wrap('rm', _rm);
-
-//@
-//@ ### mv(source [, source ...], dest')
-//@ ### mv(source_array, dest')
-//@ Available options:
-//@
-//@ + `f`: force
-//@
-//@ Examples:
-//@
-//@ ```javascript
-//@ mv('-f', 'file', 'dir/');
-//@ mv('file1', 'file2', 'dir/');
-//@ mv(['file1', 'file2'], 'dir/'); // same as above
-//@ ```
-//@
-//@ Moves files. The wildcard `*` is accepted.
-function _mv(options, sources, dest) {
-  options = parseOptions(options, {
-    'f': 'force'
-  });
-
-  // Get sources, dest
-  if (arguments.length < 3) {
-    error('missing <source> and/or <dest>');
-  } else if (arguments.length > 3) {
-    sources = [].slice.call(arguments, 1, arguments.length - 1);
-    dest = arguments[arguments.length - 1];
-  } else if (typeof sources === 'string') {
-    sources = [sources];
-  } else if ('length' in sources) {
-    sources = sources; // no-op for array
-  } else {
-    error('invalid arguments');
-  }
-
-  sources = expand(sources);
-
-  var exists = fs.existsSync(dest),
-      stats = exists && fs.statSync(dest);
-
-  // Dest is not existing dir, but multiple sources given
-  if ((!exists || !stats.isDirectory()) && sources.length > 1)
-    error('dest is not a directory (too many sources)');
-
-  // Dest is an existing file, but no -f given
-  if (exists && stats.isFile() && !options.force)
-    error('dest file already exists: ' + dest);
-
-  sources.forEach(function(src) {
-    if (!fs.existsSync(src)) {
-      error('no such file or directory: '+src, true);
-      return; // skip file
-    }
-
-    // If here, src exists
-
-    // When copying to '/path/dir':
-    //    thisDest = '/path/dir/file1'
-    var thisDest = dest;
-    if (fs.existsSync(dest) && fs.statSync(dest).isDirectory())
-      thisDest = path.normalize(dest + '/' + path.basename(src));
-
-    if (fs.existsSync(thisDest) && !options.force) {
-      error('dest file already exists: ' + thisDest, true);
-      return; // skip file
-    }
-
-    if (path.resolve(src) === path.dirname(path.resolve(thisDest))) {
-      error('cannot move to self: '+src, true);
-      return; // skip file
-    }
-
-    fs.renameSync(src, thisDest);
-  }); // forEach(src)
-} // mv
-exports.mv = wrap('mv', _mv);
-
-//@
-//@ ### mkdir([options ,] dir [, dir ...])
-//@ ### mkdir([options ,] dir_array)
-//@ Available options:
-//@
-//@ + `p`: full path (will create intermediate dirs if necessary)
-//@
-//@ Examples:
-//@
-//@ ```javascript
-//@ mkdir('-p', '/tmp/a/b/c/d', '/tmp/e/f/g');
-//@ mkdir('-p', ['/tmp/a/b/c/d', '/tmp/e/f/g']); // same as above
-//@ ```
-//@
-//@ Creates directories.
-function _mkdir(options, dirs) {
-  options = parseOptions(options, {
-    'p': 'fullpath'
-  });
-  if (!dirs)
-    error('no paths given');
-
-  if (typeof dirs === 'string')
-    dirs = [].slice.call(arguments, 1);
-  // if it's array leave it as it is
-
-  dirs.forEach(function(dir) {
-    if (fs.existsSync(dir)) {
-      if (!options.fullpath)
-          error('path already exists: ' + dir, true);
-      return; // skip dir
-    }
-
-    // Base dir does not exist, and no -p option given
-    var baseDir = path.dirname(dir);
-    if (!fs.existsSync(baseDir) && !options.fullpath) {
-      error('no such file or directory: ' + baseDir, true);
-      return; // skip dir
-    }
-
-    if (options.fullpath)
-      mkdirSyncRecursive(dir);
-    else
-      fs.mkdirSync(dir, parseInt('0777', 8));
-  });
-} // mkdir
-exports.mkdir = wrap('mkdir', _mkdir);
-
-//@
-//@ ### test(expression)
-//@ Available expression primaries:
-//@
-//@ + `'-b', 'path'`: true if path is a block device
-//@ + `'-c', 'path'`: true if path is a character device
-//@ + `'-d', 'path'`: true if path is a directory
-//@ + `'-e', 'path'`: true if path exists
-//@ + `'-f', 'path'`: true if path is a regular file
-//@ + `'-L', 'path'`: true if path is a symbolic link
-//@ + `'-p', 'path'`: true if path is a pipe (FIFO)
-//@ + `'-S', 'path'`: true if path is a socket
-//@
-//@ Examples:
-//@
-//@ ```javascript
-//@ if (test('-d', path)) { /* do something with dir */ };
-//@ if (!test('-f', path)) continue; // skip if it's a regular file
-//@ ```
-//@
-//@ Evaluates expression using the available primaries and returns corresponding value.
-function _test(options, path) {
-  if (!path)
-    error('no path given');
-
-  // hack - only works with unary primaries
-  options = parseOptions(options, {
-    'b': 'block',
-    'c': 'character',
-    'd': 'directory',
-    'e': 'exists',
-    'f': 'file',
-    'L': 'link',
-    'p': 'pipe',
-    'S': 'socket'
-  });
-
-  var canInterpret = false;
-  for (var key in options)
-    if (options[key] === true) {
-      canInterpret = true;
-      break;
-    }
-
-  if (!canInterpret)
-    error('could not interpret expression');
-
-  if (options.link) {
-    try {
-      return fs.lstatSync(path).isSymbolicLink();
-    } catch(e) {
-      return false;
-    }
-  }
-
-  if (!fs.existsSync(path))
-    return false;
-
-  if (options.exists)
-    return true;
-
-  var stats = fs.statSync(path);
-
-  if (options.block)
-    return stats.isBlockDevice();
-
-  if (options.character)
-    return stats.isCharacterDevice();
-
-  if (options.directory)
-    return stats.isDirectory();
-
-  if (options.file)
-    return stats.isFile();
-
-  if (options.pipe)
-    return stats.isFIFO();
-
-  if (options.socket)
-    return stats.isSocket();
-} // test
-exports.test = wrap('test', _test);
-
-
-//@
-//@ ### cat(file [, file ...])
-//@ ### cat(file_array)
-//@
-//@ Examples:
-//@
-//@ ```javascript
-//@ var str = cat('file*.txt');
-//@ var str = cat('file1', 'file2');
-//@ var str = cat(['file1', 'file2']); // same as above
-//@ ```
-//@
-//@ Returns a string containing the given file, or a concatenated string
-//@ containing the files if more than one file is given (a new line character is
-//@ introduced between each file). Wildcard `*` accepted.
-function _cat(options, files) {
-  var cat = '';
-
-  if (!files)
-    error('no paths given');
-
-  if (typeof files === 'string')
-    files = [].slice.call(arguments, 1);
-  // if it's array leave it as it is
-
-  files = expand(files);
-
-  files.forEach(function(file) {
-    if (!fs.existsSync(file))
-      error('no such file or directory: ' + file);
-
-    cat += fs.readFileSync(file, 'utf8') + '\n';
-  });
-
-  if (cat[cat.length-1] === '\n')
-    cat = cat.substring(0, cat.length-1);
-
-  return ShellString(cat);
-}
-exports.cat = wrap('cat', _cat);
-
-//@
-//@ ### 'string'.to(file)
-//@
-//@ Examples:
-//@
-//@ ```javascript
-//@ cat('input.txt').to('output.txt');
-//@ ```
-//@
-//@ Analogous to the redirection operator `>` in Unix, but works with JavaScript strings (such as
-//@ those returned by `cat`, `grep`, etc). _Like Unix redirections, `to()` will overwrite any existing file!_
-function _to(options, file) {
-  if (!file)
-    error('wrong arguments');
-
-  if (!fs.existsSync( path.dirname(file) ))
-      error('no such file or directory: ' + path.dirname(file));
-
-  try {
-    fs.writeFileSync(file, this.toString(), 'utf8');
-  } catch(e) {
-    error('could not write to file (code '+e.code+'): '+file, true);
-  }
-}
-// In the future, when Proxies are default, we can add methods like `.to()` to primitive strings.
-// For now, this is a dummy function to bookmark places we need such strings
-function ShellString(str) {
-  return str;
-}
-String.prototype.to = wrap('to', _to);
-
-//@
-//@ ### sed([options ,] search_regex, replace_str, file)
-//@ Available options:
-//@
-//@ + `-i`: Replace contents of 'file' in-place. _Note that no backups will be created!_
-//@
-//@ Examples:
-//@
-//@ ```javascript
-//@ sed('-i', 'PROGRAM_VERSION', 'v0.1.3', 'source.js');
-//@ sed(/.*DELETE_THIS_LINE.*\n/, '', 'source.js');
-//@ ```
-//@
-//@ Reads an input string from `file` and performs a JavaScript `replace()` on the input
-//@ using the given search regex and replacement string. Returns the new string after replacement.
-function _sed(options, regex, replacement, file) {
-  options = parseOptions(options, {
-    'i': 'inplace'
-  });
-
-  if (typeof replacement === 'string')
-    replacement = replacement; // no-op
-  else if (typeof replacement === 'number')
-    replacement = replacement.toString(); // fallback
-  else
-    error('invalid replacement string');
-
-  if (!file)
-    error('no file given');
-
-  if (!fs.existsSync(file))
-    error('no such file or directory: ' + file);
-
-  var result = fs.readFileSync(file, 'utf8').replace(regex, replacement);
-  if (options.inplace)
-    fs.writeFileSync(file, result, 'utf8');
-
-  return ShellString(result);
-}
-exports.sed = wrap('sed', _sed);
-
-//@
-//@ ### grep([options ,] regex_filter, file [, file ...])
-//@ ### grep([options ,] regex_filter, file_array)
-//@ Available options:
-//@
-//@ + `-v`: Inverse the sense of the regex and print the lines not matching the criteria.
-//@
-//@ Examples:
-//@
-//@ ```javascript
-//@ grep('-v', 'GLOBAL_VARIABLE', '*.js');
-//@ grep('GLOBAL_VARIABLE', '*.js');
-//@ ```
-//@
-//@ Reads input string from given files and returns a string containing all lines of the
-//@ file that match the given `regex_filter`. Wildcard `*` accepted.
-function _grep(options, regex, files) {
-  options = parseOptions(options, {
-    'v': 'inverse'
-  });
-
-  if (!files)
-    error('no paths given');
-
-  if (typeof files === 'string')
-    files = [].slice.call(arguments, 2);
-  // if it's array leave it as it is
-
-  files = expand(files);
-
-  var grep = '';
-  files.forEach(function(file) {
-    if (!fs.existsSync(file)) {
-      error('no such file or directory: ' + file, true);
-      return;
-    }
-
-    var contents = fs.readFileSync(file, 'utf8'),
-        lines = contents.split(/\r*\n/);
-    lines.forEach(function(line) {
-      var matched = line.match(regex);
-      if ((options.inverse && !matched) || (!options.inverse && matched))
-        grep += line + '\n';
-    });
-  });
-
-  return ShellString(grep);
-}
-exports.grep = wrap('grep', _grep);
-
-
-//@
-//@ ### which(command)
-//@
-//@ Examples:
-//@
-//@ ```javascript
-//@ var nodeExec = which('node');
-//@ ```
-//@
-//@ Searches for `command` in the system's PATH. On Windows looks for `.exe`, `.cmd`, and `.bat` extensions.
-//@ Returns string containing the absolute path to the command.
-function _which(options, cmd) {
-  if (!cmd)
-    error('must specify command');
-
-  var pathEnv = process.env.path || process.env.Path || process.env.PATH,
-      pathArray = splitPath(pathEnv),
-      where = null;
-
-  // No relative/absolute paths provided?
-  if (cmd.search(/\//) === -1) {
-    // Search for command in PATH
-    pathArray.forEach(function(dir) {
-      if (where)
-        return; // already found it
-
-      var attempt = path.resolve(dir + '/' + cmd);
-      if (fs.existsSync(attempt)) {
-        where = attempt;
-        return;
-      }
-
-      if (platform === 'win') {
-        var baseAttempt = attempt;
-        attempt = baseAttempt + '.exe';
-        if (fs.existsSync(attempt)) {
-          where = attempt;
-          return;
-        }
-        attempt = baseAttempt + '.cmd';
-        if (fs.existsSync(attempt)) {
-          where = attempt;
-          return;
-        }
-        attempt = baseAttempt + '.bat';
-        if (fs.existsSync(attempt)) {
-          where = attempt;
-          return;
-        }
-      } // if 'win'
-    });
-  }
-
-  // Command not found anywhere?
-  if (!fs.existsSync(cmd) && !where)
-    return null;
-
-  where = where || path.resolve(cmd);
-
-  return ShellString(where);
-}
-exports.which = wrap('which', _which);
-
-//@
-//@ ### echo(string [,string ...])
-//@
-//@ Examples:
-//@
-//@ ```javascript
-//@ echo('hello world');
-//@ var str = echo('hello world');
-//@ ```
-//@
-//@ Prints string to stdout, and returns string with additional utility methods
-//@ like `.to()`.
-function _echo() {
-  var messages = [].slice.call(arguments, 0);
-  console.log.apply(this, messages);
-  return ShellString(messages.join(' '));
-}
-exports.echo = _echo; // don't wrap() as it could parse '-options'
-
-// Pushd/popd/dirs internals
-var _dirStack = [];
-
-function _isStackIndex(index) {
-  return (/^[\-+]\d+$/).test(index);
-}
-
-function _parseStackIndex(index) {
-  if (_isStackIndex(index)) {
-    if (Math.abs(index) < _dirStack.length + 1) { // +1 for pwd
-      return (/^-/).test(index) ? Number(index) - 1 : Number(index);
-    } else {
-      error(index + ': directory stack index out of range');
-    }
-  } else {
-    error(index + ': invalid number');
-  }
-}
-
-function _actualDirStack() {
-  return [process.cwd()].concat(_dirStack);
-}
-
-//@
-//@ ### dirs([options | '+N' | '-N'])
-//@
-//@ Available options:
-//@
-//@ + `-c`: Clears the directory stack by deleting all of the elements.
-//@
-//@ Arguments:
-//@
-//@ + `+N`: Displays the Nth directory (counting from the left of the list printed by dirs when invoked without options), starting with zero.
-//@ + `-N`: Displays the Nth directory (counting from the right of the list printed by dirs when invoked without options), starting with zero.
-//@
-//@ Display the list of currently remembered directories. Returns an array of paths in the stack, or a single path if +N or -N was specified.
-//@
-//@ See also: pushd, popd
-function _dirs(options, index) {
-  if (_isStackIndex(options)) {
-    index = options;
-    options = '';
-  }
-
-  options = parseOptions(options, {
-    'c' : 'clear'
-  });
-
-  if (options['clear']) {
-    _dirStack = [];
-    return _dirStack;
-  }
-
-  var stack = _actualDirStack();
-
-  if (index) {
-    index = _parseStackIndex(index);
-
-    if (index < 0) {
-      index = stack.length + index;
-    }
-
-    log(stack[index]);
-    return stack[index];
-  }
-
-  log(stack.join(' '));
-
-  return stack;
-}
-exports.dirs = wrap("dirs", _dirs);
-
-//@
-//@ ### pushd([options,] [dir | '-N' | '+N'])
-//@
-//@ Available options:
-//@
-//@ + `-n`: Suppresses the normal change of directory when adding directories to the stack, so that only the stack is manipulated.
-//@
-//@ Arguments:
-//@
-//@ + `dir`: Makes the current working directory be the top of the stack, and then executes the equivalent of `cd dir`.
-//@ + `+N`: Brings the Nth directory (counting from the left of the list printed by dirs, starting with zero) to the top of the list by rotating the stack.
-//@ + `-N`: Brings the Nth directory (counting from the right of the list printed by dirs, starting with zero) to the top of the list by rotating the stack.
-//@
-//@ Examples:
-//@
-//@ ```javascript
-//@ // process.cwd() === '/usr'
-//@ pushd('/etc'); // Returns /etc /usr
-//@ pushd('+1');   // Returns /usr /etc
-//@ ```
-//@
-//@ Save the current directory on the top of the directory stack and then cd to `dir`. With no arguments, pushd exchanges the top two directories. Returns an array of paths in the stack.
-function _pushd(options, dir) {
-  if (_isStackIndex(options)) {
-    dir = options;
-    options = '';
-  }
-
-  options = parseOptions(options, {
-    'n' : 'no-cd'
-  });
-
-  var dirs = _actualDirStack();
-
-  if (dir === '+0') {
-    return dirs; // +0 is a noop
-  } else if (!dir) {
-    if (dirs.length > 1) {
-      dirs = dirs.splice(1, 1).concat(dirs);
-    } else {
-      return error('no other directory');
-    }
-  } else if (_isStackIndex(dir)) {
-    var n = _parseStackIndex(dir);
-    dirs = dirs.slice(n).concat(dirs.slice(0, n));
-  } else {
-    if (options['no-cd']) {
-      dirs.splice(1, 0, dir);
-    } else {
-      dirs.unshift(dir);
-    }
-  }
-
-  if (options['no-cd']) {
-    dirs = dirs.slice(1);
-  } else {
-    dir = path.resolve(dirs.shift());
-    _cd('', dir);
-  }
-
-  _dirStack = dirs;
-  return _dirs('');
-}
-exports.pushd = wrap('pushd', _pushd);
-
-//@
-//@ ### popd([options,] ['-N' | '+N'])
-//@
-//@ Available options:
-//@
-//@ + `-n`: Suppresses the normal change of directory when removing directories from the stack, so that only the stack is manipulated.
-//@
-//@ Arguments:
-//@
-//@ + `+N`: Removes the Nth directory (counting from the left of the list printed by dirs), starting with zero.
-//@ + `-N`: Removes the Nth directory (counting from the right of the list printed by dirs), starting with zero.
-//@
-//@ Examples:
-//@
-//@ ```javascript
-//@ echo(process.cwd()); // '/usr'
-//@ pushd('/etc');       // '/etc /usr'
-//@ echo(process.cwd()); // '/etc'
-//@ popd();              // '/usr'
-//@ echo(process.cwd()); // '/usr'
-//@ ```
-//@
-//@ When no arguments are given, popd removes the top directory from the stack and performs a cd to the new top directory. The elements are numbered from 0 starting at the first directory listed with dirs; i.e., popd is equivalent to popd +0. Returns an array of paths in the stack.
-function _popd(options, index) {
-  if (_isStackIndex(options)) {
-    index = options;
-    options = '';
-  }
-
-  options = parseOptions(options, {
-    'n' : 'no-cd'
-  });
-
-  if (!_dirStack.length) {
-    return error('directory stack empty');
-  }
-
-  index = _parseStackIndex(index || '+0');
-
-  if (options['no-cd'] || index > 0 || _dirStack.length + index === 0) {
-    index = index > 0 ? index - 1 : index;
-    _dirStack.splice(index, 1);
-  } else {
-    var dir = path.resolve(_dirStack.shift());
-    _cd('', dir);
-  }
-
-  return _dirs('');
-}
-exports.popd = wrap("popd", _popd);
-
-//@
-//@ ### exit(code)
-//@ Exits the current process with the given exit code.
-exports.exit = process.exit;
-
-//@
-//@ ### env['VAR_NAME']
-//@ Object containing environment variables (both getter and setter). Shortcut to process.env.
-exports.env = process.env;
-
-//@
-//@ ### exec(command [, options] [, callback])
-//@ Available options (all `false` by default):
-//@
-//@ + `async`: Asynchronous execution. Defaults to true if a callback is provided.
-//@ + `silent`: Do not echo program output to console.
-//@
-//@ Examples:
-//@
-//@ ```javascript
-//@ var version = exec('node --version', {silent:true}).output;
-//@
-//@ var child = exec('some_long_running_process', {async:true});
-//@ child.stdout.on('data', function(data) {
-//@   /* ... do something with data ... */
-//@ });
-//@
-//@ exec('some_long_running_process', function(code, output) {
-//@   console.log('Exit code:', code);
-//@   console.log('Program output:', output);
-//@ });
-//@ ```
-//@
-//@ Executes the given `command` _synchronously_, unless otherwise specified.
-//@ When in synchronous mode returns the object `{ code:..., output:... }`, containing the program's
-//@ `output` (stdout + stderr)  and its exit `code`. Otherwise returns the child process object, and
-//@ the `callback` gets the arguments `(code, output)`.
-//@
-//@ **Note:** For long-lived processes, it's best to run `exec()` asynchronously as
-//@ the current synchronous implementation uses a lot of CPU. This should be getting
-//@ fixed soon.
-function _exec(command, options, callback) {
-  if (!command)
-    error('must specify command');
-
-  // Callback is defined instead of options.
-  if (typeof options === 'function') {
-    callback = options;
-    options = { async: true };
-  }
-
-  // Callback is defined with options.
-  if (typeof options === 'object' && typeof callback === 'function') {
-    options.async = true;
-  }
-
-  options = extend({
-    silent: config.silent,
-    async: false
-  }, options);
-
-  if (options.async)
-    return execAsync(command, options, callback);
-  else
-    return execSync(command, options);
-}
-exports.exec = wrap('exec', _exec, {notUnix:true});
-
-var PERMS = (function (base) {
-  return {
-    OTHER_EXEC  : base.EXEC,
-    OTHER_WRITE : base.WRITE,
-    OTHER_READ  : base.READ,
-
-    GROUP_EXEC  : base.EXEC  << 3,
-    GROUP_WRITE : base.WRITE << 3,
-    GROUP_READ  : base.READ << 3,
-
-    OWNER_EXEC  : base.EXEC << 6,
-    OWNER_WRITE : base.WRITE << 6,
-    OWNER_READ  : base.READ << 6,
-
-    // Literal octal numbers are apparently not allowed in "strict" javascript.  Using parseInt is
-    // the preferred way, else a jshint warning is thrown.
-    STICKY      : parseInt('01000', 8),
-    SETGID      : parseInt('02000', 8),
-    SETUID      : parseInt('04000', 8),
-
-    TYPE_MASK   : parseInt('0770000', 8)
-  };
-})({
-  EXEC  : 1,
-  WRITE : 2,
-  READ  : 4
-});
-
-
-//@
-//@ ### chmod(octal_mode || octal_string, file)
-//@ ### chmod(symbolic_mode, file)
-//@
-//@ Available options:
-//@
-//@ + `-v`: output a diagnostic for every file processed//@
-//@ + `-c`: like verbose but report only when a change is made//@
-//@ + `-R`: change files and directories recursively//@
-//@
-//@ Examples:
-//@
-//@ ```javascript
-//@ chmod(755, '/Users/brandon');
-//@ chmod('755', '/Users/brandon'); // same as above
-//@ chmod('u+x', '/Users/brandon');
-//@ ```
-//@
-//@ Alters the permissions of a file or directory by either specifying the
-//@ absolute permissions in octal form or expressing the changes in symbols.
-//@ This command tries to mimic the POSIX behavior as much as possible.
-//@ Notable exceptions:
-//@
-//@ + In symbolic modes, 'a-r' and '-r' are identical.  No consideration is
-//@   given to the umask.
-//@ + There is no "quiet" option since default behavior is to run silent.
-function _chmod(options, mode, filePattern) {
-  if (!filePattern) {
-    if (options.length > 0 && options.charAt(0) === '-') {
-      // Special case where the specified file permissions started with - to subtract perms, which
-      // get picked up by the option parser as command flags.
-      // If we are down by one argument and options starts with -, shift everything over.
-      filePattern = mode;
-      mode = options;
-      options = '';
-    }
-    else {
-      error('You must specify a file.');
-    }
-  }
-
-  options = parseOptions(options, {
-    'R': 'recursive',
-    'c': 'changes',
-    'v': 'verbose'
-  });
-
-  if (typeof filePattern === 'string') {
-    filePattern = [ filePattern ];
-  }
-
-  var files;
-
-  if (options.recursive) {
-    files = [];
-    expand(filePattern).forEach(function addFile(expandedFile) {
-      var stat = fs.lstatSync(expandedFile);
-
-      if (!stat.isSymbolicLink()) {
-        files.push(expandedFile);
-
-        if (stat.isDirectory()) {  // intentionally does not follow symlinks.
-          fs.readdirSync(expandedFile).forEach(function (child) {
-            addFile(expandedFile + '/' + child);
-          });
-        }
-      }
-    });
-  }
-  else {
-    files = expand(filePattern);
-  }
-
-  files.forEach(function innerChmod(file) {
-    file = path.resolve(file);
-    if (!fs.existsSync(file)) {
-      error('File not found: ' + file);
-    }
-
-    // When recursing, don't follow symlinks.
-    if (options.recursive && fs.lstatSync(file).isSymbolicLink()) {
-      return;
-    }
-
-    var perms = fs.statSync(file).mode;
-    var type = perms & PERMS.TYPE_MASK;
-
-    var newPerms = perms;
-
-    if (isNaN(parseInt(mode, 8))) {
-      // parse options
-      mode.split(',').forEach(function (symbolicMode) {
-        /*jshint regexdash:true */
-        var pattern = /([ugoa]*)([=\+-])([rwxXst]*)/i;
-        var matches = pattern.exec(symbolicMode);
-
-        if (matches) {
-          var applyTo = matches[1];
-          var operator = matches[2];
-          var change = matches[3];
-
-          var changeOwner = applyTo.indexOf('u') != -1 || applyTo === 'a' || applyTo === '';
-          var changeGroup = applyTo.indexOf('g') != -1 || applyTo === 'a' || applyTo === '';
-          var changeOther = applyTo.indexOf('o') != -1 || applyTo === 'a' || applyTo === '';
-
-          var changeRead   = change.indexOf('r') != -1;
-          var changeWrite  = change.indexOf('w') != -1;
-          var changeExec   = change.indexOf('x') != -1;
-          var changeSticky = change.indexOf('t') != -1;
-          var changeSetuid = change.indexOf('s') != -1;
-
-          var mask = 0;
-          if (changeOwner) {
-            mask |= (changeRead ? PERMS.OWNER_READ : 0) + (changeWrite ? PERMS.OWNER_WRITE : 0) + (changeExec ? PERMS.OWNER_EXEC : 0) + (changeSetuid ? PERMS.SETUID : 0);
-          }
-          if (changeGroup) {
-            mask |= (changeRead ? PERMS.GROUP_READ : 0) + (changeWrite ? PERMS.GROUP_WRITE : 0) + (changeExec ? PERMS.GROUP_EXEC : 0) + (changeSetuid ? PERMS.SETGID : 0);
-          }
-          if (changeOther) {
-            mask |= (changeRead ? PERMS.OTHER_READ : 0) + (changeWrite ? PERMS.OTHER_WRITE : 0) + (changeExec ? PERMS.OTHER_EXEC : 0);
-          }
-
-          // Sticky bit is special - it's not tied to user, group or other.
-          if (changeSticky) {
-            mask |= PERMS.STICKY;
-          }
-
-          switch (operator) {
-            case '+':
-              newPerms |= mask;
-              break;
-
-            case '-':
-              newPerms &= ~mask;
-              break;
-
-            case '=':
-              newPerms = type + mask;
-
-              // According to POSIX, when using = to explicitly set the permissions, setuid and setgid can never be cleared.
-              if (fs.statSync(file).isDirectory()) {
-                newPerms |= (PERMS.SETUID + PERMS.SETGID) & perms;
-              }
-              break;
-          }
-
-          if (options.verbose) {
-            log(file + ' -> ' + newPerms.toString(8));
-          }
-
-          if (perms != newPerms) {
-            if (!options.verbose && options.changes) {
-              log(file + ' -> ' + newPerms.toString(8));
-            }
-            fs.chmodSync(file, newPerms);
-          }
-        }
-        else {
-          error('Invalid symbolic mode change: ' + symbolicMode);
-        }
-      });
-    }
-    else {
-      // they gave us a full number
-      newPerms = type + parseInt(mode, 8);
-
-      // POSIX rules are that setuid and setgid can only be added using numeric form, but not cleared.
-      if (fs.statSync(file).isDirectory()) {
-        newPerms |= (PERMS.SETUID + PERMS.SETGID) & perms;
-      }
-
-      fs.chmodSync(file, newPerms);
-    }
-  });
-}
-exports.chmod = wrap('chmod', _chmod);
-
-
-//@
-//@ ## Configuration
-//@
-
-
-
-exports.config = config;
-
-//@
-//@ ### config.silent
-//@ Example:
-//@
-//@ ```javascript
-//@ var silentState = config.silent; // save old silent state
-//@ config.silent = true;
-//@ /* ... */
-//@ config.silent = silentState; // restore old silent state
-//@ ```
-//@
-//@ Suppresses all command output if `true`, except for `echo()` calls.
-//@ Default is `false`.
-
-//@
-//@ ### config.fatal
-//@ Example:
-//@
-//@ ```javascript
-//@ config.fatal = true;
-//@ cp('this_file_does_not_exist', '/dev/null'); // dies here
-//@ /* more commands... */
-//@ ```
-//@
-//@ If `true` the script will die on errors. Default is `false`.
-
-
-
-
-//@
-//@ ## Non-Unix commands
-//@
-
-
-
-
-
-
-//@
-//@ ### tempdir()
-//@ Searches and returns string containing a writeable, platform-dependent temporary directory.
-//@ Follows Python's [tempfile algorithm](http://docs.python.org/library/tempfile.html#tempfile.tempdir).
-exports.tempdir = wrap('tempdir', tempDir);
-
-
-//@
-//@ ### error()
-//@ Tests if error occurred in the last command. Returns `null` if no error occurred,
-//@ otherwise returns string explaining the error
-exports.error = function() {
-  return state.error;
-};
-
-
-
-
-
-////////////////////////////////////////////////////////////////////////////////////////////////
-//
-// Auxiliary functions (internal use only)
-//
-
-function log() {
-  if (!config.silent)
-    console.log.apply(this, arguments);
-}
-
-function deprecate(what, msg) {
-  console.log('*** ShellJS.'+what+': This function is deprecated.', msg);
-}
-
-function write(msg) {
-  if (!config.silent)
-    process.stdout.write(msg);
-}
-
-// Shows error message. Throws unless _continue or config.fatal are true
-function error(msg, _continue) {
-  if (state.error === null)
-    state.error = '';
-  state.error += state.currentCmd + ': ' + msg + '\n';
-
-  log(state.error);
-
-  if (config.fatal)
-    process.exit(1);
-
-  if (!_continue)
-    throw '';
-}
-
-// Returns {'alice': true, 'bob': false} when passed:
-//   parseOptions('-a', {'a':'alice', 'b':'bob'});
-function parseOptions(str, map) {
-  if (!map)
-    error('parseOptions() internal error: no map given');
-
-  // All options are false by default
-  var options = {};
-  for (var letter in map)
-    options[map[letter]] = false;
-
-  if (!str)
-    return options; // defaults
-
-  if (typeof str !== 'string')
-    error('parseOptions() internal error: wrong str');
-
-  // e.g. match[1] = 'Rf' for str = '-Rf'
-  var match = str.match(/^\-(.+)/);
-  if (!match)
-    return options;
-
-  // e.g. chars = ['R', 'f']
-  var chars = match[1].split('');
-
-  chars.forEach(function(c) {
-    if (c in map)
-      options[map[c]] = true;
-    else
-      error('option not recognized: '+c);
-  });
-
-  return options;
-}
-
-// Common wrapper for all Unix-like commands
-function wrap(cmd, fn, options) {
-  return function() {
-    var retValue = null;
-
-    state.currentCmd = cmd;
-    state.error = null;
-
-    try {
-      var args = [].slice.call(arguments, 0);
-
-      if (options && options.notUnix) {
-        retValue = fn.apply(this, args);
-      } else {
-        if (args.length === 0 || typeof args[0] !== 'string' || args[0][0] !== '-')
-          args.unshift(''); // only add dummy option if '-option' not already present
-        retValue = fn.apply(this, args);
-      }
-    } catch (e) {
-      if (!state.error) {
-        // If state.error hasn't been set it's an error thrown by Node, not us - probably a bug...
-        console.log('shell.js: internal error');
-        console.log(e.stack || e);
-        process.exit(1);
-      }
-      if (config.fatal)
-        throw e;
-    }
-
-    state.currentCmd = 'shell.js';
-    return retValue;
-  };
-} // wrap
-
-// Buffered file copy, synchronous
-// (Using readFileSync() + writeFileSync() could easily cause a memory overflow
-//  with large files)
-function copyFileSync(srcFile, destFile) {
-  if (!fs.existsSync(srcFile))
-    error('copyFileSync: no such file or directory: ' + srcFile);
-
-  var BUF_LENGTH = 64*1024,
-      buf = new Buffer(BUF_LENGTH),
-      bytesRead = BUF_LENGTH,
-      pos = 0,
-      fdr = null,
-      fdw = null;
-
-  try {
-    fdr = fs.openSync(srcFile, 'r');
-  } catch(e) {
-    error('copyFileSync: could not read src file ('+srcFile+')');
-  }
-
-  try {
-    fdw = fs.openSync(destFile, 'w');
-  } catch(e) {
-    error('copyFileSync: could not write to dest file (code='+e.code+'):'+destFile);
-  }
-
-  while (bytesRead === BUF_LENGTH) {
-    bytesRead = fs.readSync(fdr, buf, 0, BUF_LENGTH, pos);
-    fs.writeSync(fdw, buf, 0, bytesRead);
-    pos += bytesRead;
-  }
-
-  fs.closeSync(fdr);
-  fs.closeSync(fdw);
-}
-
-// Recursively copies 'sourceDir' into 'destDir'
-// Adapted from https://github.com/ryanmcgrath/wrench-js
-//
-// Copyright (c) 2010 Ryan McGrath
-// Copyright (c) 2012 Artur Adib
-//
-// Licensed under the MIT License
-// http://www.opensource.org/licenses/mit-license.php
-function cpdirSyncRecursive(sourceDir, destDir, opts) {
-  if (!opts) opts = {};
-
-  /* Create the directory where all our junk is moving to; read the mode of the source directory and mirror it */
-  var checkDir = fs.statSync(sourceDir);
-  try {
-    fs.mkdirSync(destDir, checkDir.mode);
-  } catch (e) {
-    //if the directory already exists, that's okay
-    if (e.code !== 'EEXIST') throw e;
-  }
-
-  var files = fs.readdirSync(sourceDir);
-
-  for(var i = 0; i < files.length; i++) {
-    var currFile = fs.lstatSync(sourceDir + "/" + files[i]);
-
-    if (currFile.isDirectory()) {
-      /* recursion this thing right on back. */
-      cpdirSyncRecursive(sourceDir + "/" + files[i], destDir + "/" + files[i], opts);
-    } else if (currFile.isSymbolicLink()) {
-      var symlinkFull = fs.readlinkSync(sourceDir + "/" + files[i]);
-      fs.symlinkSync(symlinkFull, destDir + "/" + files[i]);
-    } else {
-      /* At this point, we've hit a file actually worth copying... so copy it on over. */
-      if (fs.existsSync(destDir + "/" + files[i]) && !opts.force) {
-        log('skipping existing file: ' + files[i]);
-      } else {
-        copyFileSync(sourceDir + "/" + files[i], destDir + "/" + files[i]);
-      }
-    }
-
-  } // for files
-} // cpdirSyncRecursive
-
-// Recursively removes 'dir'
-// Adapted from https://github.com/ryanmcgrath/wrench-js
-//
-// Copyright (c) 2010 Ryan McGrath
-// Copyright (c) 2012 Artur Adib
-//
-// Licensed under the MIT License
-// http://www.opensource.org/licenses/mit-license.php
-function rmdirSyncRecursive(dir, force) {
-  var files;
-
-  files = fs.readdirSync(dir);
-
-  // Loop through and delete everything in the sub-tree after checking it
-  for(var i = 0; i < files.length; i++) {
-    var file = dir + "/" + files[i],
-        currFile = fs.lstatSync(file);
-
-    if(currFile.isDirectory()) { // Recursive function back to the beginning
-      rmdirSyncRecursive(file, force);
-    }
-
-    else if(currFile.isSymbolicLink()) { // Unlink symlinks
-      if (force || isWriteable(file)) {
-        try {
-          _unlinkSync(file);
-        } catch (e) {
-          error('could not remove file (code '+e.code+'): ' + file, true);
-        }
-      }
-    }
-
-    else // Assume it's a file - perhaps a try/catch belongs here?
-      if (force || isWriteable(file)) {
-        try {
-          _unlinkSync(file);
-        } catch (e) {
-          error('could not remove file (code '+e.code+'): ' + file, true);
-        }
-      }
-  }
-
-  // Now that we know everything in the sub-tree has been deleted, we can delete the main directory.
-  // Huzzah for the shopkeep.
-
-  var result;
-  try {
-    result = fs.rmdirSync(dir);
-  } catch(e) {
-    error('could not remove directory (code '+e.code+'): ' + dir, true);
-  }
-
-  return result;
-} // rmdirSyncRecursive
-
-// Recursively creates 'dir'
-function mkdirSyncRecursive(dir) {
-  var baseDir = path.dirname(dir);
-
-  // Base dir exists, no recursion necessary
-  if (fs.existsSync(baseDir)) {
-    fs.mkdirSync(dir, parseInt('0777', 8));
-    return;
-  }
-
-  // Base dir does not exist, go recursive
-  mkdirSyncRecursive(baseDir);
-
-  // Base dir created, can create dir
-  fs.mkdirSync(dir, parseInt('0777', 8));
-}
-
-// e.g. 'shelljs_a5f185d0443ca...'
-function randomFileName() {
-  function randomHash(count) {
-    if (count === 1)
-      return parseInt(16*Math.random(), 10).toString(16);
-    else {
-      var hash = '';
-      for (var i=0; i<count; i++)
-        hash += randomHash(1);
-      return hash;
-    }
-  }
-
-  return 'shelljs_'+randomHash(20);
-}
-
-// Returns false if 'dir' is not a writeable directory, 'dir' otherwise
-function writeableDir(dir) {
-  if (!dir || !fs.existsSync(dir))
-    return false;
-
-  if (!fs.statSync(dir).isDirectory())
-    return false;
-
-  var testFile = dir+'/'+randomFileName();
-  try {
-    fs.writeFileSync(testFile, ' ');
-    _unlinkSync(testFile);
-    return dir;
-  } catch (e) {
-    return false;
-  }
-}
-
-// Cross-platform method for getting an available temporary directory.
-// Follows the algorithm of Python's tempfile.tempdir
-// http://docs.python.org/library/tempfile.html#tempfile.tempdir
-function tempDir() {
-  if (state.tempDir)
-    return state.tempDir; // from cache
-
-  state.tempDir = writeableDir(process.env['TMPDIR']) ||
-                  writeableDir(process.env['TEMP']) ||
-                  writeableDir(process.env['TMP']) ||
-                  writeableDir(process.env['Wimp$ScrapDir']) || // RiscOS
-                  writeableDir('C:\\TEMP') || // Windows
-                  writeableDir('C:\\TMP') || // Windows
-                  writeableDir('\\TEMP') || // Windows
-                  writeableDir('\\TMP') || // Windows
-                  writeableDir('/tmp') ||
-                  writeableDir('/var/tmp') ||
-                  writeableDir('/usr/tmp') ||
-                  writeableDir('.'); // last resort
-
-  return state.tempDir;
-}
-
-// Wrapper around exec() to enable echoing output to console in real time
-function execAsync(cmd, opts, callback) {
-  var output = '';
-
-  var options = extend({
-    silent: config.silent
-  }, opts);
-
-  var c = child.exec(cmd, {env: process.env, maxBuffer: 20*1024*1024}, function(err) {
-    if (callback)
-      callback(err ? err.code : 0, output);
-  });
-
-  c.stdout.on('data', function(data) {
-    output += data;
-    if (!options.silent)
-      process.stdout.write(data);
-  });
-
-  c.stderr.on('data', function(data) {
-    output += data;
-    if (!options.silent)
-      process.stdout.write(data);
-  });
-
-  return c;
-}
-
-// Hack to run child_process.exec() synchronously (sync avoids callback hell)
-// Uses a custom wait loop that checks for a flag file, created when the child process is done.
-// (Can't do a wait loop that checks for internal Node variables/messages as
-// Node is single-threaded; callbacks and other internal state changes are done in the
-// event loop).
-function execSync(cmd, opts) {
-  var stdoutFile = path.resolve(tempDir()+'/'+randomFileName()),
-      codeFile = path.resolve(tempDir()+'/'+randomFileName()),
-      scriptFile = path.resolve(tempDir()+'/'+randomFileName()),
-      sleepFile = path.resolve(tempDir()+'/'+randomFileName());
-
-  var options = extend({
-    silent: config.silent
-  }, opts);
-
-  var previousStdoutContent = '';
-  // Echoes stdout changes from running process, if not silent
-  function updateStdout() {
-    if (options.silent || !fs.existsSync(stdoutFile))
-      return;
-
-    var stdoutContent = fs.readFileSync(stdoutFile, 'utf8');
-    // No changes since last time?
-    if (stdoutContent.length <= previousStdoutContent.length)
-      return;
-
-    process.stdout.write(stdoutContent.substr(previousStdoutContent.length));
-    previousStdoutContent = stdoutContent;
-  }
-
-  function escape(str) {
-    return (str+'').replace(/([\\"'])/g, "\\$1").replace(/\0/g, "\\0");
-  }
-
-  cmd += ' > '+stdoutFile+' 2>&1'; // works on both win/unix
-
-  var script =
-   "var child = require('child_process')," +
-   "     fs = require('fs');" +
-   "child.exec('"+escape(cmd)+"', {env: process.env, maxBuffer: 20*1024*1024}, function(err) {" +
-   "  fs.writeFileSync('"+escape(codeFile)+"', err ? err.code.toString() : '0');" +
-   "});";
-
-  if (fs.existsSync(scriptFile)) _unlinkSync(scriptFile);
-  if (fs.existsSync(stdoutFile)) _unlinkSync(stdoutFile);
-  if (fs.existsSync(codeFile)) _unlinkSync(codeFile);
-
-  fs.writeFileSync(scriptFile, script);
-  child.exec('"'+process.execPath+'" '+scriptFile, {
-    env: process.env,
-    cwd: exports.pwd(),
-    maxBuffer: 20*1024*1024
-  });
-
-  // The wait loop
-  // sleepFile is used as a dummy I/O op to mitigate unnecessary CPU usage
-  // (tried many I/O sync ops, writeFileSync() seems to be only one that is effective in reducing
-  // CPU usage, though apparently not so much on Windows)
-  while (!fs.existsSync(codeFile)) { updateStdout(); fs.writeFileSync(sleepFile, 'a'); }
-  while (!fs.existsSync(stdoutFile)) { updateStdout(); fs.writeFileSync(sleepFile, 'a'); }
-
-  // At this point codeFile exists, but it's not necessarily flushed yet.
-  // Keep reading it until it is.
-  var code = parseInt('', 10);
-  while (isNaN(code)) {
-    code = parseInt(fs.readFileSync(codeFile, 'utf8'), 10);
-  }
-
-  var stdout = fs.readFileSync(stdoutFile, 'utf8');
-
-  // No biggie if we can't erase the files now -- they're in a temp dir anyway
-  try { _unlinkSync(scriptFile); } catch(e) {}
-  try { _unlinkSync(stdoutFile); } catch(e) {}
-  try { _unlinkSync(codeFile); } catch(e) {}
-  try { _unlinkSync(sleepFile); } catch(e) {}
-
-  // True if successful, false if not
-  var obj = {
-    code: code,
-    output: stdout
-  };
-  return obj;
-} // execSync()
-
-// Expands wildcards with matching file names. For a given array of file names 'list', returns
-// another array containing all file names as per ls(list[i]).
-// For example:
-//   expand(['file*.js']) = ['file1.js', 'file2.js', ...]
-//   (if the files 'file1.js', 'file2.js', etc, exist in the current dir)
-function expand(list) {
-  var expanded = [];
-  list.forEach(function(listEl) {
-    // Wildcard present?
-    if (listEl.search(/\*/) > -1) {
-      _ls('', listEl).forEach(function(file) {
-        expanded.push(file);
-      });
-    } else {
-      expanded.push(listEl);
-    }
-  });
-  return expanded;
-}
-
-// Cross-platform method for splitting environment PATH variables
-function splitPath(p) {
-  if (!p)
-    return [];
-
-  if (platform === 'win')
-    return p.split(';');
-  else
-    return p.split(':');
-}
-
-// extend(target_obj, source_obj1 [, source_obj2 ...])
-// Shallow extend, e.g.:
-//    extend({A:1}, {b:2}, {c:3}) returns {A:1, b:2, c:3}
-function extend(target) {
-  var sources = [].slice.call(arguments, 1);
-  sources.forEach(function(source) {
-    for (var key in source)
-      target[key] = source[key];
-  });
-
-  return target;
-}
-
-// Normalizes _unlinkSync() across platforms to match Unix behavior, i.e.
-// file can be unlinked even if it's read-only, see joyent/node#3006
-function _unlinkSync(file) {
-  try {
-    fs.unlinkSync(file);
-  } catch(e) {
-    // Try to override file permission
-    if (e.code === 'EPERM') {
-      fs.chmodSync(file, '0666');
-      fs.unlinkSync(file);
-    } else {
-      throw e;
-    }
-  }
-}
-
-// Hack to determine if file has write permissions for current user
-// Avoids having to check user, group, etc, but it's probably slow
-function isWriteable(file) {
-  var writePermission = true;
-  try {
-    var __fd = fs.openSync(file, 'a');
-    fs.closeSync(__fd);
-  } catch(e) {
-    writePermission = false;
-  }
-
-  return writePermission;
-}
diff --git a/bin/node_modules/underscore/LICENSE b/bin/node_modules/underscore/LICENSE
deleted file mode 100644
index ad0e71b..0000000
--- a/bin/node_modules/underscore/LICENSE
+++ /dev/null
@@ -1,23 +0,0 @@
-Copyright (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative
-Reporters & Editors
-
-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/bin/node_modules/underscore/README.md b/bin/node_modules/underscore/README.md
deleted file mode 100644
index c2ba259..0000000
--- a/bin/node_modules/underscore/README.md
+++ /dev/null
@@ -1,22 +0,0 @@
-                       __
-                      /\ \                                                         __
-     __  __    ___    \_\ \     __   _ __   ____    ___    ___   _ __    __       /\_\    ____
-    /\ \/\ \ /' _ `\  /'_  \  /'__`\/\  __\/ ,__\  / ___\ / __`\/\  __\/'__`\     \/\ \  /',__\
-    \ \ \_\ \/\ \/\ \/\ \ \ \/\  __/\ \ \//\__, `\/\ \__//\ \ \ \ \ \//\  __/  __  \ \ \/\__, `\
-     \ \____/\ \_\ \_\ \___,_\ \____\\ \_\\/\____/\ \____\ \____/\ \_\\ \____\/\_\ _\ \ \/\____/
-      \/___/  \/_/\/_/\/__,_ /\/____/ \/_/ \/___/  \/____/\/___/  \/_/ \/____/\/_//\ \_\ \/___/
-                                                                                  \ \____/
-                                                                                   \/___/
-
-Underscore.js is a utility-belt library for JavaScript that provides
-support for the usual functional suspects (each, map, reduce, filter...)
-without extending any core JavaScript objects.
-
-For Docs, License, Tests, and pre-packed downloads, see:
-http://underscorejs.org
-
-Underscore is an open-sourced component of DocumentCloud:
-https://github.com/documentcloud
-
-Many thanks to our contributors:
-https://github.com/jashkenas/underscore/contributors
diff --git a/bin/node_modules/underscore/package.json b/bin/node_modules/underscore/package.json
deleted file mode 100644
index 4538cd8..0000000
--- a/bin/node_modules/underscore/package.json
+++ /dev/null
@@ -1,70 +0,0 @@
-{
-  "name": "underscore",
-  "description": "JavaScript's functional programming helper library.",
-  "homepage": "http://underscorejs.org",
-  "keywords": [
-    "util",
-    "functional",
-    "server",
-    "client",
-    "browser"
-  ],
-  "author": {
-    "name": "Jeremy Ashkenas",
-    "email": "jeremy@documentcloud.org"
-  },
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/jashkenas/underscore.git"
-  },
-  "main": "underscore.js",
-  "version": "1.8.3",
-  "devDependencies": {
-    "docco": "*",
-    "eslint": "0.6.x",
-    "karma": "~0.12.31",
-    "karma-qunit": "~0.1.4",
-    "qunit-cli": "~0.2.0",
-    "uglify-js": "2.4.x"
-  },
-  "scripts": {
-    "test": "npm run test-node && npm run lint",
-    "lint": "eslint underscore.js test/*.js",
-    "test-node": "qunit-cli test/*.js",
-    "test-browser": "npm i karma-phantomjs-launcher && ./node_modules/karma/bin/karma start",
-    "build": "uglifyjs underscore.js -c \"evaluate=false\" --comments \"/    .*/\" -m --source-map underscore-min.map -o underscore-min.js",
-    "doc": "docco underscore.js"
-  },
-  "license": "MIT",
-  "files": [
-    "underscore.js",
-    "underscore-min.js",
-    "underscore-min.map",
-    "LICENSE"
-  ],
-  "gitHead": "e4743ab712b8ab42ad4ccb48b155034d02394e4d",
-  "bugs": {
-    "url": "https://github.com/jashkenas/underscore/issues"
-  },
-  "_id": "underscore@1.8.3",
-  "_shasum": "4f3fb53b106e6097fcf9cb4109f2a5e9bdfa5022",
-  "_from": "underscore@",
-  "_npmVersion": "1.4.28",
-  "_npmUser": {
-    "name": "jashkenas",
-    "email": "jashkenas@gmail.com"
-  },
-  "maintainers": [
-    {
-      "name": "jashkenas",
-      "email": "jashkenas@gmail.com"
-    }
-  ],
-  "dist": {
-    "shasum": "4f3fb53b106e6097fcf9cb4109f2a5e9bdfa5022",
-    "tarball": "http://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz"
-  },
-  "directories": {},
-  "_resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz",
-  "readme": "ERROR: No README data found!"
-}
diff --git a/bin/node_modules/underscore/underscore-min.js b/bin/node_modules/underscore/underscore-min.js
deleted file mode 100644
index f01025b..0000000
--- a/bin/node_modules/underscore/underscore-min.js
+++ /dev/null
@@ -1,6 +0,0 @@
-//     Underscore.js 1.8.3
-//     http://underscorejs.org
-//     (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
-//     Underscore may be freely distributed under the MIT license.
-(function(){function n(n){function t(t,r,e,u,i,o){for(;i>=0&&o>i;i+=n){var a=u?u[i]:i;e=r(e,t[a],a,t)}return e}return function(r,e,u,i){e=b(e,i,4);var o=!k(r)&&m.keys(r),a=(o||r).length,c=n>0?0:a-1;return arguments.length<3&&(u=r[o?o[c]:c],c+=n),t(r,e,u,o,c,a)}}function t(n){return function(t,r,e){r=x(r,e);for(var u=O(t),i=n>0?0:u-1;i>=0&&u>i;i+=n)if(r(t[i],i,t))return i;return-1}}function r(n,t,r){return function(e,u,i){var o=0,a=O(e);if("number"==typeof i)n>0?o=i>=0?i:Math.max(i+a,o):a=i>=0?Math.min(i+1,a):i+a+1;else if(r&&i&&a)return i=r(e,u),e[i]===u?i:-1;if(u!==u)return i=t(l.call(e,o,a),m.isNaN),i>=0?i+o:-1;for(i=n>0?o:a-1;i>=0&&a>i;i+=n)if(e[i]===u)return i;return-1}}function e(n,t){var r=I.length,e=n.constructor,u=m.isFunction(e)&&e.prototype||a,i="constructor";for(m.has(n,i)&&!m.contains(t,i)&&t.push(i);r--;)i=I[r],i in n&&n[i]!==u[i]&&!m.contains(t,i)&&t.push(i)}var u=this,i=u._,o=Array.prototype,a=Object.prototype,c=Function.prototype,f=o.push,l=o.slice,s=a.toString,p=a.hasOwnProperty,h=Array.isArray,v=Object.keys,g=c.bind,y=Object.create,d=function(){},m=function(n){return n instanceof m?n:this instanceof m?void(this._wrapped=n):new m(n)};"undefined"!=typeof exports?("undefined"!=typeof module&&module.exports&&(exports=module.exports=m),exports._=m):u._=m,m.VERSION="1.8.3";var b=function(n,t,r){if(t===void 0)return n;switch(null==r?3:r){case 1:return function(r){return n.call(t,r)};case 2:return function(r,e){return n.call(t,r,e)};case 3:return function(r,e,u){return n.call(t,r,e,u)};case 4:return function(r,e,u,i){return n.call(t,r,e,u,i)}}return function(){return n.apply(t,arguments)}},x=function(n,t,r){return null==n?m.identity:m.isFunction(n)?b(n,t,r):m.isObject(n)?m.matcher(n):m.property(n)};m.iteratee=function(n,t){return x(n,t,1/0)};var _=function(n,t){return function(r){var e=arguments.length;if(2>e||null==r)return r;for(var u=1;e>u;u++)for(var i=arguments[u],o=n(i),a=o.length,c=0;a>c;c++){var f=o[c];t&&r[f]!==void 0||(r[f]=i[f])}return r}},j=function(n){if(!m.isObject(n))return{};if(y)return y(n);d.prototype=n;var t=new d;return d.prototype=null,t},w=function(n){return function(t){return null==t?void 0:t[n]}},A=Math.pow(2,53)-1,O=w("length"),k=function(n){var t=O(n);return"number"==typeof t&&t>=0&&A>=t};m.each=m.forEach=function(n,t,r){t=b(t,r);var e,u;if(k(n))for(e=0,u=n.length;u>e;e++)t(n[e],e,n);else{var i=m.keys(n);for(e=0,u=i.length;u>e;e++)t(n[i[e]],i[e],n)}return n},m.map=m.collect=function(n,t,r){t=x(t,r);for(var e=!k(n)&&m.keys(n),u=(e||n).length,i=Array(u),o=0;u>o;o++){var a=e?e[o]:o;i[o]=t(n[a],a,n)}return i},m.reduce=m.foldl=m.inject=n(1),m.reduceRight=m.foldr=n(-1),m.find=m.detect=function(n,t,r){var e;return e=k(n)?m.findIndex(n,t,r):m.findKey(n,t,r),e!==void 0&&e!==-1?n[e]:void 0},m.filter=m.select=function(n,t,r){var e=[];return t=x(t,r),m.each(n,function(n,r,u){t(n,r,u)&&e.push(n)}),e},m.reject=function(n,t,r){return m.filter(n,m.negate(x(t)),r)},m.every=m.all=function(n,t,r){t=x(t,r);for(var e=!k(n)&&m.keys(n),u=(e||n).length,i=0;u>i;i++){var o=e?e[i]:i;if(!t(n[o],o,n))return!1}return!0},m.some=m.any=function(n,t,r){t=x(t,r);for(var e=!k(n)&&m.keys(n),u=(e||n).length,i=0;u>i;i++){var o=e?e[i]:i;if(t(n[o],o,n))return!0}return!1},m.contains=m.includes=m.include=function(n,t,r,e){return k(n)||(n=m.values(n)),("number"!=typeof r||e)&&(r=0),m.indexOf(n,t,r)>=0},m.invoke=function(n,t){var r=l.call(arguments,2),e=m.isFunction(t);return m.map(n,function(n){var u=e?t:n[t];return null==u?u:u.apply(n,r)})},m.pluck=function(n,t){return m.map(n,m.property(t))},m.where=function(n,t){return m.filter(n,m.matcher(t))},m.findWhere=function(n,t){return m.find(n,m.matcher(t))},m.max=function(n,t,r){var e,u,i=-1/0,o=-1/0;if(null==t&&null!=n){n=k(n)?n:m.values(n);for(var a=0,c=n.length;c>a;a++)e=n[a],e>i&&(i=e)}else t=x(t,r),m.each(n,function(n,r,e){u=t(n,r,e),(u>o||u===-1/0&&i===-1/0)&&(i=n,o=u)});return i},m.min=function(n,t,r){var e,u,i=1/0,o=1/0;if(null==t&&null!=n){n=k(n)?n:m.values(n);for(var a=0,c=n.length;c>a;a++)e=n[a],i>e&&(i=e)}else t=x(t,r),m.each(n,function(n,r,e){u=t(n,r,e),(o>u||1/0===u&&1/0===i)&&(i=n,o=u)});return i},m.shuffle=function(n){for(var t,r=k(n)?n:m.values(n),e=r.length,u=Array(e),i=0;e>i;i++)t=m.random(0,i),t!==i&&(u[i]=u[t]),u[t]=r[i];return u},m.sample=function(n,t,r){return null==t||r?(k(n)||(n=m.values(n)),n[m.random(n.length-1)]):m.shuffle(n).slice(0,Math.max(0,t))},m.sortBy=function(n,t,r){return t=x(t,r),m.pluck(m.map(n,function(n,r,e){return{value:n,index:r,criteria:t(n,r,e)}}).sort(function(n,t){var r=n.criteria,e=t.criteria;if(r!==e){if(r>e||r===void 0)return 1;if(e>r||e===void 0)return-1}return n.index-t.index}),"value")};var F=function(n){return function(t,r,e){var u={};return r=x(r,e),m.each(t,function(e,i){var o=r(e,i,t);n(u,e,o)}),u}};m.groupBy=F(function(n,t,r){m.has(n,r)?n[r].push(t):n[r]=[t]}),m.indexBy=F(function(n,t,r){n[r]=t}),m.countBy=F(function(n,t,r){m.has(n,r)?n[r]++:n[r]=1}),m.toArray=function(n){return n?m.isArray(n)?l.call(n):k(n)?m.map(n,m.identity):m.values(n):[]},m.size=function(n){return null==n?0:k(n)?n.length:m.keys(n).length},m.partition=function(n,t,r){t=x(t,r);var e=[],u=[];return m.each(n,function(n,r,i){(t(n,r,i)?e:u).push(n)}),[e,u]},m.first=m.head=m.take=function(n,t,r){return null==n?void 0:null==t||r?n[0]:m.initial(n,n.length-t)},m.initial=function(n,t,r){return l.call(n,0,Math.max(0,n.length-(null==t||r?1:t)))},m.last=function(n,t,r){return null==n?void 0:null==t||r?n[n.length-1]:m.rest(n,Math.max(0,n.length-t))},m.rest=m.tail=m.drop=function(n,t,r){return l.call(n,null==t||r?1:t)},m.compact=function(n){return m.filter(n,m.identity)};var S=function(n,t,r,e){for(var u=[],i=0,o=e||0,a=O(n);a>o;o++){var c=n[o];if(k(c)&&(m.isArray(c)||m.isArguments(c))){t||(c=S(c,t,r));var f=0,l=c.length;for(u.length+=l;l>f;)u[i++]=c[f++]}else r||(u[i++]=c)}return u};m.flatten=function(n,t){return S(n,t,!1)},m.without=function(n){return m.difference(n,l.call(arguments,1))},m.uniq=m.unique=function(n,t,r,e){m.isBoolean(t)||(e=r,r=t,t=!1),null!=r&&(r=x(r,e));for(var u=[],i=[],o=0,a=O(n);a>o;o++){var c=n[o],f=r?r(c,o,n):c;t?(o&&i===f||u.push(c),i=f):r?m.contains(i,f)||(i.push(f),u.push(c)):m.contains(u,c)||u.push(c)}return u},m.union=function(){return m.uniq(S(arguments,!0,!0))},m.intersection=function(n){for(var t=[],r=arguments.length,e=0,u=O(n);u>e;e++){var i=n[e];if(!m.contains(t,i)){for(var o=1;r>o&&m.contains(arguments[o],i);o++);o===r&&t.push(i)}}return t},m.difference=function(n){var t=S(arguments,!0,!0,1);return m.filter(n,function(n){return!m.contains(t,n)})},m.zip=function(){return m.unzip(arguments)},m.unzip=function(n){for(var t=n&&m.max(n,O).length||0,r=Array(t),e=0;t>e;e++)r[e]=m.pluck(n,e);return r},m.object=function(n,t){for(var r={},e=0,u=O(n);u>e;e++)t?r[n[e]]=t[e]:r[n[e][0]]=n[e][1];return r},m.findIndex=t(1),m.findLastIndex=t(-1),m.sortedIndex=function(n,t,r,e){r=x(r,e,1);for(var u=r(t),i=0,o=O(n);o>i;){var a=Math.floor((i+o)/2);r(n[a])<u?i=a+1:o=a}return i},m.indexOf=r(1,m.findIndex,m.sortedIndex),m.lastIndexOf=r(-1,m.findLastIndex),m.range=function(n,t,r){null==t&&(t=n||0,n=0),r=r||1;for(var e=Math.max(Math.ceil((t-n)/r),0),u=Array(e),i=0;e>i;i++,n+=r)u[i]=n;return u};var E=function(n,t,r,e,u){if(!(e instanceof t))return n.apply(r,u);var i=j(n.prototype),o=n.apply(i,u);return m.isObject(o)?o:i};m.bind=function(n,t){if(g&&n.bind===g)return g.apply(n,l.call(arguments,1));if(!m.isFunction(n))throw new TypeError("Bind must be called on a function");var r=l.call(arguments,2),e=function(){return E(n,e,t,this,r.concat(l.call(arguments)))};return e},m.partial=function(n){var t=l.call(arguments,1),r=function(){for(var e=0,u=t.length,i=Array(u),o=0;u>o;o++)i[o]=t[o]===m?arguments[e++]:t[o];for(;e<arguments.length;)i.push(arguments[e++]);return E(n,r,this,this,i)};return r},m.bindAll=function(n){var t,r,e=arguments.length;if(1>=e)throw new Error("bindAll must be passed function names");for(t=1;e>t;t++)r=arguments[t],n[r]=m.bind(n[r],n);return n},m.memoize=function(n,t){var r=function(e){var u=r.cache,i=""+(t?t.apply(this,arguments):e);return m.has(u,i)||(u[i]=n.apply(this,arguments)),u[i]};return r.cache={},r},m.delay=function(n,t){var r=l.call(arguments,2);return setTimeout(function(){return n.apply(null,r)},t)},m.defer=m.partial(m.delay,m,1),m.throttle=function(n,t,r){var e,u,i,o=null,a=0;r||(r={});var c=function(){a=r.leading===!1?0:m.now(),o=null,i=n.apply(e,u),o||(e=u=null)};return function(){var f=m.now();a||r.leading!==!1||(a=f);var l=t-(f-a);return e=this,u=arguments,0>=l||l>t?(o&&(clearTimeout(o),o=null),a=f,i=n.apply(e,u),o||(e=u=null)):o||r.trailing===!1||(o=setTimeout(c,l)),i}},m.debounce=function(n,t,r){var e,u,i,o,a,c=function(){var f=m.now()-o;t>f&&f>=0?e=setTimeout(c,t-f):(e=null,r||(a=n.apply(i,u),e||(i=u=null)))};return function(){i=this,u=arguments,o=m.now();var f=r&&!e;return e||(e=setTimeout(c,t)),f&&(a=n.apply(i,u),i=u=null),a}},m.wrap=function(n,t){return m.partial(t,n)},m.negate=function(n){return function(){return!n.apply(this,arguments)}},m.compose=function(){var n=arguments,t=n.length-1;return function(){for(var r=t,e=n[t].apply(this,arguments);r--;)e=n[r].call(this,e);return e}},m.after=function(n,t){return function(){return--n<1?t.apply(this,arguments):void 0}},m.before=function(n,t){var r;return function(){return--n>0&&(r=t.apply(this,arguments)),1>=n&&(t=null),r}},m.once=m.partial(m.before,2);var M=!{toString:null}.propertyIsEnumerable("toString"),I=["valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"];m.keys=function(n){if(!m.isObject(n))return[];if(v)return v(n);var t=[];for(var r in n)m.has(n,r)&&t.push(r);return M&&e(n,t),t},m.allKeys=function(n){if(!m.isObject(n))return[];var t=[];for(var r in n)t.push(r);return M&&e(n,t),t},m.values=function(n){for(var t=m.keys(n),r=t.length,e=Array(r),u=0;r>u;u++)e[u]=n[t[u]];return e},m.mapObject=function(n,t,r){t=x(t,r);for(var e,u=m.keys(n),i=u.length,o={},a=0;i>a;a++)e=u[a],o[e]=t(n[e],e,n);return o},m.pairs=function(n){for(var t=m.keys(n),r=t.length,e=Array(r),u=0;r>u;u++)e[u]=[t[u],n[t[u]]];return e},m.invert=function(n){for(var t={},r=m.keys(n),e=0,u=r.length;u>e;e++)t[n[r[e]]]=r[e];return t},m.functions=m.methods=function(n){var t=[];for(var r in n)m.isFunction(n[r])&&t.push(r);return t.sort()},m.extend=_(m.allKeys),m.extendOwn=m.assign=_(m.keys),m.findKey=function(n,t,r){t=x(t,r);for(var e,u=m.keys(n),i=0,o=u.length;o>i;i++)if(e=u[i],t(n[e],e,n))return e},m.pick=function(n,t,r){var e,u,i={},o=n;if(null==o)return i;m.isFunction(t)?(u=m.allKeys(o),e=b(t,r)):(u=S(arguments,!1,!1,1),e=function(n,t,r){return t in r},o=Object(o));for(var a=0,c=u.length;c>a;a++){var f=u[a],l=o[f];e(l,f,o)&&(i[f]=l)}return i},m.omit=function(n,t,r){if(m.isFunction(t))t=m.negate(t);else{var e=m.map(S(arguments,!1,!1,1),String);t=function(n,t){return!m.contains(e,t)}}return m.pick(n,t,r)},m.defaults=_(m.allKeys,!0),m.create=function(n,t){var r=j(n);return t&&m.extendOwn(r,t),r},m.clone=function(n){return m.isObject(n)?m.isArray(n)?n.slice():m.extend({},n):n},m.tap=function(n,t){return t(n),n},m.isMatch=function(n,t){var r=m.keys(t),e=r.length;if(null==n)return!e;for(var u=Object(n),i=0;e>i;i++){var o=r[i];if(t[o]!==u[o]||!(o in u))return!1}return!0};var N=function(n,t,r,e){if(n===t)return 0!==n||1/n===1/t;if(null==n||null==t)return n===t;n instanceof m&&(n=n._wrapped),t instanceof m&&(t=t._wrapped);var u=s.call(n);if(u!==s.call(t))return!1;switch(u){case"[object RegExp]":case"[object String]":return""+n==""+t;case"[object Number]":return+n!==+n?+t!==+t:0===+n?1/+n===1/t:+n===+t;case"[object Date]":case"[object Boolean]":return+n===+t}var i="[object Array]"===u;if(!i){if("object"!=typeof n||"object"!=typeof t)return!1;var o=n.constructor,a=t.constructor;if(o!==a&&!(m.isFunction(o)&&o instanceof o&&m.isFunction(a)&&a instanceof a)&&"constructor"in n&&"constructor"in t)return!1}r=r||[],e=e||[];for(var c=r.length;c--;)if(r[c]===n)return e[c]===t;if(r.push(n),e.push(t),i){if(c=n.length,c!==t.length)return!1;for(;c--;)if(!N(n[c],t[c],r,e))return!1}else{var f,l=m.keys(n);if(c=l.length,m.keys(t).length!==c)return!1;for(;c--;)if(f=l[c],!m.has(t,f)||!N(n[f],t[f],r,e))return!1}return r.pop(),e.pop(),!0};m.isEqual=function(n,t){return N(n,t)},m.isEmpty=function(n){return null==n?!0:k(n)&&(m.isArray(n)||m.isString(n)||m.isArguments(n))?0===n.length:0===m.keys(n).length},m.isElement=function(n){return!(!n||1!==n.nodeType)},m.isArray=h||function(n){return"[object Array]"===s.call(n)},m.isObject=function(n){var t=typeof n;return"function"===t||"object"===t&&!!n},m.each(["Arguments","Function","String","Number","Date","RegExp","Error"],function(n){m["is"+n]=function(t){return s.call(t)==="[object "+n+"]"}}),m.isArguments(arguments)||(m.isArguments=function(n){return m.has(n,"callee")}),"function"!=typeof/./&&"object"!=typeof Int8Array&&(m.isFunction=function(n){return"function"==typeof n||!1}),m.isFinite=function(n){return isFinite(n)&&!isNaN(parseFloat(n))},m.isNaN=function(n){return m.isNumber(n)&&n!==+n},m.isBoolean=function(n){return n===!0||n===!1||"[object Boolean]"===s.call(n)},m.isNull=function(n){return null===n},m.isUndefined=function(n){return n===void 0},m.has=function(n,t){return null!=n&&p.call(n,t)},m.noConflict=function(){return u._=i,this},m.identity=function(n){return n},m.constant=function(n){return function(){return n}},m.noop=function(){},m.property=w,m.propertyOf=function(n){return null==n?function(){}:function(t){return n[t]}},m.matcher=m.matches=function(n){return n=m.extendOwn({},n),function(t){return m.isMatch(t,n)}},m.times=function(n,t,r){var e=Array(Math.max(0,n));t=b(t,r,1);for(var u=0;n>u;u++)e[u]=t(u);return e},m.random=function(n,t){return null==t&&(t=n,n=0),n+Math.floor(Math.random()*(t-n+1))},m.now=Date.now||function(){return(new Date).getTime()};var B={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#x27;","`":"&#x60;"},T=m.invert(B),R=function(n){var t=function(t){return n[t]},r="(?:"+m.keys(n).join("|")+")",e=RegExp(r),u=RegExp(r,"g");return function(n){return n=null==n?"":""+n,e.test(n)?n.replace(u,t):n}};m.escape=R(B),m.unescape=R(T),m.result=function(n,t,r){var e=null==n?void 0:n[t];return e===void 0&&(e=r),m.isFunction(e)?e.call(n):e};var q=0;m.uniqueId=function(n){var t=++q+"";return n?n+t:t},m.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var K=/(.)^/,z={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},D=/\\|'|\r|\n|\u2028|\u2029/g,L=function(n){return"\\"+z[n]};m.template=function(n,t,r){!t&&r&&(t=r),t=m.defaults({},t,m.templateSettings);var e=RegExp([(t.escape||K).source,(t.interpolate||K).source,(t.evaluate||K).source].join("|")+"|$","g"),u=0,i="__p+='";n.replace(e,function(t,r,e,o,a){return i+=n.slice(u,a).replace(D,L),u=a+t.length,r?i+="'+\n((__t=("+r+"))==null?'':_.escape(__t))+\n'":e?i+="'+\n((__t=("+e+"))==null?'':__t)+\n'":o&&(i+="';\n"+o+"\n__p+='"),t}),i+="';\n",t.variable||(i="with(obj||{}){\n"+i+"}\n"),i="var __t,__p='',__j=Array.prototype.join,"+"print=function(){__p+=__j.call(arguments,'');};\n"+i+"return __p;\n";try{var o=new Function(t.variable||"obj","_",i)}catch(a){throw a.source=i,a}var c=function(n){return o.call(this,n,m)},f=t.variable||"obj";return c.source="function("+f+"){\n"+i+"}",c},m.chain=function(n){var t=m(n);return t._chain=!0,t};var P=function(n,t){return n._chain?m(t).chain():t};m.mixin=function(n){m.each(m.functions(n),function(t){var r=m[t]=n[t];m.prototype[t]=function(){var n=[this._wrapped];return f.apply(n,arguments),P(this,r.apply(m,n))}})},m.mixin(m),m.each(["pop","push","reverse","shift","sort","splice","unshift"],function(n){var t=o[n];m.prototype[n]=function(){var r=this._wrapped;return t.apply(r,arguments),"shift"!==n&&"splice"!==n||0!==r.length||delete r[0],P(this,r)}}),m.each(["concat","join","slice"],function(n){var t=o[n];m.prototype[n]=function(){return P(this,t.apply(this._wrapped,arguments))}}),m.prototype.value=function(){return this._wrapped},m.prototype.valueOf=m.prototype.toJSON=m.prototype.value,m.prototype.toString=function(){return""+this._wrapped},"function"==typeof define&&define.amd&&define("underscore",[],function(){return m})}).call(this);
-//# sourceMappingURL=underscore-min.map
\ No newline at end of file
diff --git a/bin/node_modules/underscore/underscore-min.map b/bin/node_modules/underscore/underscore-min.map
deleted file mode 100644
index cf356bf..0000000
--- a/bin/node_modules/underscore/underscore-min.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"underscore-min.js","sources":["underscore.js"],"names":["createReduce","dir","iterator","obj","iteratee","memo","keys","index","length","currentKey","context","optimizeCb","isArrayLike","_","arguments","createPredicateIndexFinder","array","predicate","cb","getLength","createIndexFinder","predicateFind","sortedIndex","item","idx","i","Math","max","min","slice","call","isNaN","collectNonEnumProps","nonEnumIdx","nonEnumerableProps","constructor","proto","isFunction","prototype","ObjProto","prop","has","contains","push","root","this","previousUnderscore","ArrayProto","Array","Object","FuncProto","Function","toString","hasOwnProperty","nativeIsArray","isArray","nativeKeys","nativeBind","bind","nativeCreate","create","Ctor","_wrapped","exports","module","VERSION","func","argCount","value","other","collection","accumulator","apply","identity","isObject","matcher","property","Infinity","createAssigner","keysFunc","undefinedOnly","source","l","key","baseCreate","result","MAX_ARRAY_INDEX","pow","each","forEach","map","collect","results","reduce","foldl","inject","reduceRight","foldr","find","detect","findIndex","findKey","filter","select","list","reject","negate","every","all","some","any","includes","include","fromIndex","guard","values","indexOf","invoke","method","args","isFunc","pluck","where","attrs","findWhere","computed","lastComputed","shuffle","rand","set","shuffled","random","sample","n","sortBy","criteria","sort","left","right","a","b","group","behavior","groupBy","indexBy","countBy","toArray","size","partition","pass","fail","first","head","take","initial","last","rest","tail","drop","compact","flatten","input","shallow","strict","startIndex","output","isArguments","j","len","without","difference","uniq","unique","isSorted","isBoolean","seen","union","intersection","argsLength","zip","unzip","object","findLastIndex","low","high","mid","floor","lastIndexOf","range","start","stop","step","ceil","executeBound","sourceFunc","boundFunc","callingContext","self","TypeError","bound","concat","partial","boundArgs","position","bindAll","Error","memoize","hasher","cache","address","delay","wait","setTimeout","defer","throttle","options","timeout","previous","later","leading","now","remaining","clearTimeout","trailing","debounce","immediate","timestamp","callNow","wrap","wrapper","compose","after","times","before","once","hasEnumBug","propertyIsEnumerable","allKeys","mapObject","pairs","invert","functions","methods","names","extend","extendOwn","assign","pick","oiteratee","omit","String","defaults","props","clone","tap","interceptor","isMatch","eq","aStack","bStack","className","areArrays","aCtor","bCtor","pop","isEqual","isEmpty","isString","isElement","nodeType","type","name","Int8Array","isFinite","parseFloat","isNumber","isNull","isUndefined","noConflict","constant","noop","propertyOf","matches","accum","Date","getTime","escapeMap","&","<",">","\"","'","`","unescapeMap","createEscaper","escaper","match","join","testRegexp","RegExp","replaceRegexp","string","test","replace","escape","unescape","fallback","idCounter","uniqueId","prefix","id","templateSettings","evaluate","interpolate","noMatch","escapes","\\","\r","\n","
","
","escapeChar","template","text","settings","oldSettings","offset","variable","render","e","data","argument","chain","instance","_chain","mixin","valueOf","toJSON","define","amd"],"mappings":";;;;CAKC,WA4KC,QAASA,GAAaC,GAGpB,QAASC,GAASC,EAAKC,EAAUC,EAAMC,EAAMC,EAAOC,GAClD,KAAOD,GAAS,GAAaC,EAARD,EAAgBA,GAASN,EAAK,CACjD,GAAIQ,GAAaH,EAAOA,EAAKC,GAASA,CACtCF,GAAOD,EAASC,EAAMF,EAAIM,GAAaA,EAAYN,GAErD,MAAOE,GAGT,MAAO,UAASF,EAAKC,EAAUC,EAAMK,GACnCN,EAAWO,EAAWP,EAAUM,EAAS,EACzC,IAAIJ,IAAQM,EAAYT,IAAQU,EAAEP,KAAKH,GACnCK,GAAUF,GAAQH,GAAKK,OACvBD,EAAQN,EAAM,EAAI,EAAIO,EAAS,CAMnC,OAJIM,WAAUN,OAAS,IACrBH,EAAOF,EAAIG,EAAOA,EAAKC,GAASA,GAChCA,GAASN,GAEJC,EAASC,EAAKC,EAAUC,EAAMC,EAAMC,EAAOC,IA+ZtD,QAASO,GAA2Bd,GAClC,MAAO,UAASe,EAAOC,EAAWP,GAChCO,EAAYC,EAAGD,EAAWP,EAG1B,KAFA,GAAIF,GAASW,EAAUH,GACnBT,EAAQN,EAAM,EAAI,EAAIO,EAAS,EAC5BD,GAAS,GAAaC,EAARD,EAAgBA,GAASN,EAC5C,GAAIgB,EAAUD,EAAMT,GAAQA,EAAOS,GAAQ,MAAOT,EAEpD,QAAQ,GAsBZ,QAASa,GAAkBnB,EAAKoB,EAAeC,GAC7C,MAAO,UAASN,EAAOO,EAAMC,GAC3B,GAAIC,GAAI,EAAGjB,EAASW,EAAUH,EAC9B,IAAkB,gBAAPQ,GACLvB,EAAM,EACNwB,EAAID,GAAO,EAAIA,EAAME,KAAKC,IAAIH,EAAMhB,EAAQiB,GAE5CjB,EAASgB,GAAO,EAAIE,KAAKE,IAAIJ,EAAM,EAAGhB,GAAUgB,EAAMhB,EAAS,MAE9D,IAAIc,GAAeE,GAAOhB,EAE/B,MADAgB,GAAMF,EAAYN,EAAOO,GAClBP,EAAMQ,KAASD,EAAOC,GAAO,CAEtC,IAAID,IAASA,EAEX,MADAC,GAAMH,EAAcQ,EAAMC,KAAKd,EAAOS,EAAGjB,GAASK,EAAEkB,OAC7CP,GAAO,EAAIA,EAAMC,GAAK,CAE/B,KAAKD,EAAMvB,EAAM,EAAIwB,EAAIjB,EAAS,EAAGgB,GAAO,GAAWhB,EAANgB,EAAcA,GAAOvB,EACpE,GAAIe,EAAMQ,KAASD,EAAM,MAAOC,EAElC,QAAQ,GAqPZ,QAASQ,GAAoB7B,EAAKG,GAChC,GAAI2B,GAAaC,EAAmB1B,OAChC2B,EAAchC,EAAIgC,YAClBC,EAASvB,EAAEwB,WAAWF,IAAgBA,EAAYG,WAAcC,EAGhEC,EAAO,aAGX,KAFI3B,EAAE4B,IAAItC,EAAKqC,KAAU3B,EAAE6B,SAASpC,EAAMkC,IAAOlC,EAAKqC,KAAKH,GAEpDP,KACLO,EAAON,EAAmBD,GACtBO,IAAQrC,IAAOA,EAAIqC,KAAUJ,EAAMI,KAAU3B,EAAE6B,SAASpC,EAAMkC,IAChElC,EAAKqC,KAAKH,GA74BhB,GAAII,GAAOC,KAGPC,EAAqBF,EAAK/B,EAG1BkC,EAAaC,MAAMV,UAAWC,EAAWU,OAAOX,UAAWY,EAAYC,SAASb,UAIlFK,EAAmBI,EAAWJ,KAC9Bd,EAAmBkB,EAAWlB,MAC9BuB,EAAmBb,EAASa,SAC5BC,EAAmBd,EAASc,eAK5BC,EAAqBN,MAAMO,QAC3BC,EAAqBP,OAAO3C,KAC5BmD,EAAqBP,EAAUQ,KAC/BC,EAAqBV,OAAOW,OAG1BC,EAAO,aAGPhD,EAAI,SAASV,GACf,MAAIA,aAAeU,GAAUV,EACvB0C,eAAgBhC,QACtBgC,KAAKiB,SAAW3D,GADiB,GAAIU,GAAEV,GAOlB,oBAAZ4D,UACa,mBAAXC,SAA0BA,OAAOD,UAC1CA,QAAUC,OAAOD,QAAUlD,GAE7BkD,QAAQlD,EAAIA,GAEZ+B,EAAK/B,EAAIA,EAIXA,EAAEoD,QAAU,OAKZ,IAAItD,GAAa,SAASuD,EAAMxD,EAASyD,GACvC,GAAIzD,QAAiB,GAAG,MAAOwD,EAC/B,QAAoB,MAAZC,EAAmB,EAAIA,GAC7B,IAAK,GAAG,MAAO,UAASC,GACtB,MAAOF,GAAKpC,KAAKpB,EAAS0D,GAE5B,KAAK,GAAG,MAAO,UAASA,EAAOC,GAC7B,MAAOH,GAAKpC,KAAKpB,EAAS0D,EAAOC,GAEnC,KAAK,GAAG,MAAO,UAASD,EAAO7D,EAAO+D,GACpC,MAAOJ,GAAKpC,KAAKpB,EAAS0D,EAAO7D,EAAO+D,GAE1C,KAAK,GAAG,MAAO,UAASC,EAAaH,EAAO7D,EAAO+D,GACjD,MAAOJ,GAAKpC,KAAKpB,EAAS6D,EAAaH,EAAO7D,EAAO+D,IAGzD,MAAO,YACL,MAAOJ,GAAKM,MAAM9D,EAASI,aAO3BI,EAAK,SAASkD,EAAO1D,EAASyD,GAChC,MAAa,OAATC,EAAsBvD,EAAE4D,SACxB5D,EAAEwB,WAAW+B,GAAezD,EAAWyD,EAAO1D,EAASyD,GACvDtD,EAAE6D,SAASN,GAAevD,EAAE8D,QAAQP,GACjCvD,EAAE+D,SAASR,GAEpBvD,GAAET,SAAW,SAASgE,EAAO1D,GAC3B,MAAOQ,GAAGkD,EAAO1D,EAASmE,KAI5B,IAAIC,GAAiB,SAASC,EAAUC,GACtC,MAAO,UAAS7E,GACd,GAAIK,GAASM,UAAUN,MACvB,IAAa,EAATA,GAAqB,MAAPL,EAAa,MAAOA,EACtC,KAAK,GAAII,GAAQ,EAAWC,EAARD,EAAgBA,IAIlC,IAAK,GAHD0E,GAASnE,UAAUP,GACnBD,EAAOyE,EAASE,GAChBC,EAAI5E,EAAKE,OACJiB,EAAI,EAAOyD,EAAJzD,EAAOA,IAAK,CAC1B,GAAI0D,GAAM7E,EAAKmB,EACVuD,IAAiB7E,EAAIgF,SAAc,KAAGhF,EAAIgF,GAAOF,EAAOE,IAGjE,MAAOhF,KAKPiF,EAAa,SAAS9C,GACxB,IAAKzB,EAAE6D,SAASpC,GAAY,QAC5B,IAAIqB,EAAc,MAAOA,GAAarB,EACtCuB,GAAKvB,UAAYA,CACjB,IAAI+C,GAAS,GAAIxB,EAEjB,OADAA,GAAKvB,UAAY,KACV+C,GAGLT,EAAW,SAASO,GACtB,MAAO,UAAShF,GACd,MAAc,OAAPA,MAAmB,GAAIA,EAAIgF,KAQlCG,EAAkB5D,KAAK6D,IAAI,EAAG,IAAM,EACpCpE,EAAYyD,EAAS,UACrBhE,EAAc,SAAS0D,GACzB,GAAI9D,GAASW,EAAUmD,EACvB,OAAwB,gBAAV9D,IAAsBA,GAAU,GAAe8E,GAAV9E,EASrDK,GAAE2E,KAAO3E,EAAE4E,QAAU,SAAStF,EAAKC,EAAUM,GAC3CN,EAAWO,EAAWP,EAAUM,EAChC,IAAIe,GAAGjB,CACP,IAAII,EAAYT,GACd,IAAKsB,EAAI,EAAGjB,EAASL,EAAIK,OAAYA,EAAJiB,EAAYA,IAC3CrB,EAASD,EAAIsB,GAAIA,EAAGtB,OAEjB,CACL,GAAIG,GAAOO,EAAEP,KAAKH,EAClB,KAAKsB,EAAI,EAAGjB,EAASF,EAAKE,OAAYA,EAAJiB,EAAYA,IAC5CrB,EAASD,EAAIG,EAAKmB,IAAKnB,EAAKmB,GAAItB,GAGpC,MAAOA,IAITU,EAAE6E,IAAM7E,EAAE8E,QAAU,SAASxF,EAAKC,EAAUM,GAC1CN,EAAWc,EAAGd,EAAUM,EAIxB,KAAK,GAHDJ,IAAQM,EAAYT,IAAQU,EAAEP,KAAKH,GACnCK,GAAUF,GAAQH,GAAKK,OACvBoF,EAAU5C,MAAMxC,GACXD,EAAQ,EAAWC,EAARD,EAAgBA,IAAS,CAC3C,GAAIE,GAAaH,EAAOA,EAAKC,GAASA,CACtCqF,GAAQrF,GAASH,EAASD,EAAIM,GAAaA,EAAYN,GAEzD,MAAOyF,IA+BT/E,EAAEgF,OAAShF,EAAEiF,MAAQjF,EAAEkF,OAAS/F,EAAa,GAG7Ca,EAAEmF,YAAcnF,EAAEoF,MAAQjG,GAAc,GAGxCa,EAAEqF,KAAOrF,EAAEsF,OAAS,SAAShG,EAAKc,EAAWP,GAC3C,GAAIyE,EAMJ,OAJEA,GADEvE,EAAYT,GACRU,EAAEuF,UAAUjG,EAAKc,EAAWP,GAE5BG,EAAEwF,QAAQlG,EAAKc,EAAWP,GAE9ByE,QAAa,IAAKA,KAAS,EAAUhF,EAAIgF,GAA7C,QAKFtE,EAAEyF,OAASzF,EAAE0F,OAAS,SAASpG,EAAKc,EAAWP,GAC7C,GAAIkF,KAKJ,OAJA3E,GAAYC,EAAGD,EAAWP,GAC1BG,EAAE2E,KAAKrF,EAAK,SAASiE,EAAO7D,EAAOiG,GAC7BvF,EAAUmD,EAAO7D,EAAOiG,IAAOZ,EAAQjD,KAAKyB,KAE3CwB,GAIT/E,EAAE4F,OAAS,SAAStG,EAAKc,EAAWP,GAClC,MAAOG,GAAEyF,OAAOnG,EAAKU,EAAE6F,OAAOxF,EAAGD,IAAaP,IAKhDG,EAAE8F,MAAQ9F,EAAE+F,IAAM,SAASzG,EAAKc,EAAWP,GACzCO,EAAYC,EAAGD,EAAWP,EAG1B,KAAK,GAFDJ,IAAQM,EAAYT,IAAQU,EAAEP,KAAKH,GACnCK,GAAUF,GAAQH,GAAKK,OAClBD,EAAQ,EAAWC,EAARD,EAAgBA,IAAS,CAC3C,GAAIE,GAAaH,EAAOA,EAAKC,GAASA,CACtC,KAAKU,EAAUd,EAAIM,GAAaA,EAAYN,GAAM,OAAO,EAE3D,OAAO,GAKTU,EAAEgG,KAAOhG,EAAEiG,IAAM,SAAS3G,EAAKc,EAAWP,GACxCO,EAAYC,EAAGD,EAAWP,EAG1B,KAAK,GAFDJ,IAAQM,EAAYT,IAAQU,EAAEP,KAAKH,GACnCK,GAAUF,GAAQH,GAAKK,OAClBD,EAAQ,EAAWC,EAARD,EAAgBA,IAAS,CAC3C,GAAIE,GAAaH,EAAOA,EAAKC,GAASA,CACtC,IAAIU,EAAUd,EAAIM,GAAaA,EAAYN,GAAM,OAAO,EAE1D,OAAO,GAKTU,EAAE6B,SAAW7B,EAAEkG,SAAWlG,EAAEmG,QAAU,SAAS7G,EAAKoB,EAAM0F,EAAWC,GAGnE,MAFKtG,GAAYT,KAAMA,EAAMU,EAAEsG,OAAOhH,KACd,gBAAb8G,IAAyBC,KAAOD,EAAY,GAChDpG,EAAEuG,QAAQjH,EAAKoB,EAAM0F,IAAc,GAI5CpG,EAAEwG,OAAS,SAASlH,EAAKmH,GACvB,GAAIC,GAAO1F,EAAMC,KAAKhB,UAAW,GAC7B0G,EAAS3G,EAAEwB,WAAWiF,EAC1B,OAAOzG,GAAE6E,IAAIvF,EAAK,SAASiE,GACzB,GAAIF,GAAOsD,EAASF,EAASlD,EAAMkD,EACnC,OAAe,OAARpD,EAAeA,EAAOA,EAAKM,MAAMJ,EAAOmD,MAKnD1G,EAAE4G,MAAQ,SAAStH,EAAKgF,GACtB,MAAOtE,GAAE6E,IAAIvF,EAAKU,EAAE+D,SAASO,KAK/BtE,EAAE6G,MAAQ,SAASvH,EAAKwH,GACtB,MAAO9G,GAAEyF,OAAOnG,EAAKU,EAAE8D,QAAQgD,KAKjC9G,EAAE+G,UAAY,SAASzH,EAAKwH,GAC1B,MAAO9G,GAAEqF,KAAK/F,EAAKU,EAAE8D,QAAQgD,KAI/B9G,EAAEc,IAAM,SAASxB,EAAKC,EAAUM,GAC9B,GACI0D,GAAOyD,EADPxC,GAAUR,IAAUiD,GAAgBjD,GAExC,IAAgB,MAAZzE,GAA2B,MAAPD,EAAa,CACnCA,EAAMS,EAAYT,GAAOA,EAAMU,EAAEsG,OAAOhH,EACxC,KAAK,GAAIsB,GAAI,EAAGjB,EAASL,EAAIK,OAAYA,EAAJiB,EAAYA,IAC/C2C,EAAQjE,EAAIsB,GACR2C,EAAQiB,IACVA,EAASjB,OAIbhE,GAAWc,EAAGd,EAAUM,GACxBG,EAAE2E,KAAKrF,EAAK,SAASiE,EAAO7D,EAAOiG,GACjCqB,EAAWzH,EAASgE,EAAO7D,EAAOiG,IAC9BqB,EAAWC,GAAgBD,KAAchD,KAAYQ,KAAYR,OACnEQ,EAASjB,EACT0D,EAAeD,IAIrB,OAAOxC,IAITxE,EAAEe,IAAM,SAASzB,EAAKC,EAAUM,GAC9B,GACI0D,GAAOyD,EADPxC,EAASR,IAAUiD,EAAejD,GAEtC,IAAgB,MAAZzE,GAA2B,MAAPD,EAAa,CACnCA,EAAMS,EAAYT,GAAOA,EAAMU,EAAEsG,OAAOhH,EACxC,KAAK,GAAIsB,GAAI,EAAGjB,EAASL,EAAIK,OAAYA,EAAJiB,EAAYA,IAC/C2C,EAAQjE,EAAIsB,GACA4D,EAARjB,IACFiB,EAASjB,OAIbhE,GAAWc,EAAGd,EAAUM,GACxBG,EAAE2E,KAAKrF,EAAK,SAASiE,EAAO7D,EAAOiG,GACjCqB,EAAWzH,EAASgE,EAAO7D,EAAOiG,IACnBsB,EAAXD,GAAwChD,MAAbgD,GAAoChD,MAAXQ,KACtDA,EAASjB,EACT0D,EAAeD,IAIrB,OAAOxC,IAKTxE,EAAEkH,QAAU,SAAS5H,GAInB,IAAK,GAAe6H,GAHhBC,EAAMrH,EAAYT,GAAOA,EAAMU,EAAEsG,OAAOhH,GACxCK,EAASyH,EAAIzH,OACb0H,EAAWlF,MAAMxC,GACZD,EAAQ,EAAiBC,EAARD,EAAgBA,IACxCyH,EAAOnH,EAAEsH,OAAO,EAAG5H,GACfyH,IAASzH,IAAO2H,EAAS3H,GAAS2H,EAASF,IAC/CE,EAASF,GAAQC,EAAI1H,EAEvB,OAAO2H,IAMTrH,EAAEuH,OAAS,SAASjI,EAAKkI,EAAGnB,GAC1B,MAAS,OAALmB,GAAanB,GACVtG,EAAYT,KAAMA,EAAMU,EAAEsG,OAAOhH,IAC/BA,EAAIU,EAAEsH,OAAOhI,EAAIK,OAAS,KAE5BK,EAAEkH,QAAQ5H,GAAK0B,MAAM,EAAGH,KAAKC,IAAI,EAAG0G,KAI7CxH,EAAEyH,OAAS,SAASnI,EAAKC,EAAUM,GAEjC,MADAN,GAAWc,EAAGd,EAAUM,GACjBG,EAAE4G,MAAM5G,EAAE6E,IAAIvF,EAAK,SAASiE,EAAO7D,EAAOiG,GAC/C,OACEpC,MAAOA,EACP7D,MAAOA,EACPgI,SAAUnI,EAASgE,EAAO7D,EAAOiG,MAElCgC,KAAK,SAASC,EAAMC,GACrB,GAAIC,GAAIF,EAAKF,SACTK,EAAIF,EAAMH,QACd,IAAII,IAAMC,EAAG,CACX,GAAID,EAAIC,GAAKD,QAAW,GAAG,MAAO,EAClC,IAAQC,EAAJD,GAASC,QAAW,GAAG,OAAQ,EAErC,MAAOH,GAAKlI,MAAQmI,EAAMnI,QACxB,SAIN,IAAIsI,GAAQ,SAASC,GACnB,MAAO,UAAS3I,EAAKC,EAAUM,GAC7B,GAAI2E,KAMJ,OALAjF,GAAWc,EAAGd,EAAUM,GACxBG,EAAE2E,KAAKrF,EAAK,SAASiE,EAAO7D,GAC1B,GAAI4E,GAAM/E,EAASgE,EAAO7D,EAAOJ,EACjC2I,GAASzD,EAAQjB,EAAOe,KAEnBE,GAMXxE,GAAEkI,QAAUF,EAAM,SAASxD,EAAQjB,EAAOe,GACpCtE,EAAE4B,IAAI4C,EAAQF,GAAME,EAAOF,GAAKxC,KAAKyB,GAAaiB,EAAOF,IAAQf,KAKvEvD,EAAEmI,QAAUH,EAAM,SAASxD,EAAQjB,EAAOe,GACxCE,EAAOF,GAAOf,IAMhBvD,EAAEoI,QAAUJ,EAAM,SAASxD,EAAQjB,EAAOe,GACpCtE,EAAE4B,IAAI4C,EAAQF,GAAME,EAAOF,KAAaE,EAAOF,GAAO,IAI5DtE,EAAEqI,QAAU,SAAS/I,GACnB,MAAKA,GACDU,EAAE0C,QAAQpD,GAAa0B,EAAMC,KAAK3B,GAClCS,EAAYT,GAAaU,EAAE6E,IAAIvF,EAAKU,EAAE4D,UACnC5D,EAAEsG,OAAOhH,OAIlBU,EAAEsI,KAAO,SAAShJ,GAChB,MAAW,OAAPA,EAAoB,EACjBS,EAAYT,GAAOA,EAAIK,OAASK,EAAEP,KAAKH,GAAKK,QAKrDK,EAAEuI,UAAY,SAASjJ,EAAKc,EAAWP,GACrCO,EAAYC,EAAGD,EAAWP,EAC1B,IAAI2I,MAAWC,IAIf,OAHAzI,GAAE2E,KAAKrF,EAAK,SAASiE,EAAOe,EAAKhF,IAC9Bc,EAAUmD,EAAOe,EAAKhF,GAAOkJ,EAAOC,GAAM3G,KAAKyB,MAE1CiF,EAAMC,IAShBzI,EAAE0I,MAAQ1I,EAAE2I,KAAO3I,EAAE4I,KAAO,SAASzI,EAAOqH,EAAGnB,GAC7C,MAAa,OAATlG,MAA2B,GACtB,MAALqH,GAAanB,EAAclG,EAAM,GAC9BH,EAAE6I,QAAQ1I,EAAOA,EAAMR,OAAS6H,IAMzCxH,EAAE6I,QAAU,SAAS1I,EAAOqH,EAAGnB,GAC7B,MAAOrF,GAAMC,KAAKd,EAAO,EAAGU,KAAKC,IAAI,EAAGX,EAAMR,QAAe,MAAL6H,GAAanB,EAAQ,EAAImB,MAKnFxH,EAAE8I,KAAO,SAAS3I,EAAOqH,EAAGnB,GAC1B,MAAa,OAATlG,MAA2B,GACtB,MAALqH,GAAanB,EAAclG,EAAMA,EAAMR,OAAS,GAC7CK,EAAE+I,KAAK5I,EAAOU,KAAKC,IAAI,EAAGX,EAAMR,OAAS6H,KAMlDxH,EAAE+I,KAAO/I,EAAEgJ,KAAOhJ,EAAEiJ,KAAO,SAAS9I,EAAOqH,EAAGnB,GAC5C,MAAOrF,GAAMC,KAAKd,EAAY,MAALqH,GAAanB,EAAQ,EAAImB,IAIpDxH,EAAEkJ,QAAU,SAAS/I,GACnB,MAAOH,GAAEyF,OAAOtF,EAAOH,EAAE4D,UAI3B,IAAIuF,GAAU,SAASC,EAAOC,EAASC,EAAQC,GAE7C,IAAK,GADDC,MAAa7I,EAAM,EACdC,EAAI2I,GAAc,EAAG5J,EAASW,EAAU8I,GAAYzJ,EAAJiB,EAAYA,IAAK,CACxE,GAAI2C,GAAQ6F,EAAMxI,EAClB,IAAIb,EAAYwD,KAAWvD,EAAE0C,QAAQa,IAAUvD,EAAEyJ,YAAYlG,IAAS,CAE/D8F,IAAS9F,EAAQ4F,EAAQ5F,EAAO8F,EAASC,GAC9C,IAAII,GAAI,EAAGC,EAAMpG,EAAM5D,MAEvB,KADA6J,EAAO7J,QAAUgK,EACNA,EAAJD,GACLF,EAAO7I,KAAS4C,EAAMmG,SAEdJ,KACVE,EAAO7I,KAAS4C,GAGpB,MAAOiG,GAITxJ,GAAEmJ,QAAU,SAAShJ,EAAOkJ,GAC1B,MAAOF,GAAQhJ,EAAOkJ,GAAS,IAIjCrJ,EAAE4J,QAAU,SAASzJ,GACnB,MAAOH,GAAE6J,WAAW1J,EAAOa,EAAMC,KAAKhB,UAAW,KAMnDD,EAAE8J,KAAO9J,EAAE+J,OAAS,SAAS5J,EAAO6J,EAAUzK,EAAUM,GACjDG,EAAEiK,UAAUD,KACfnK,EAAUN,EACVA,EAAWyK,EACXA,GAAW,GAEG,MAAZzK,IAAkBA,EAAWc,EAAGd,EAAUM,GAG9C,KAAK,GAFD2E,MACA0F,KACKtJ,EAAI,EAAGjB,EAASW,EAAUH,GAAYR,EAAJiB,EAAYA,IAAK,CAC1D,GAAI2C,GAAQpD,EAAMS,GACdoG,EAAWzH,EAAWA,EAASgE,EAAO3C,EAAGT,GAASoD,CAClDyG,IACGpJ,GAAKsJ,IAASlD,GAAUxC,EAAO1C,KAAKyB,GACzC2G,EAAOlD,GACEzH,EACJS,EAAE6B,SAASqI,EAAMlD,KACpBkD,EAAKpI,KAAKkF,GACVxC,EAAO1C,KAAKyB,IAEJvD,EAAE6B,SAAS2C,EAAQjB,IAC7BiB,EAAO1C,KAAKyB,GAGhB,MAAOiB,IAKTxE,EAAEmK,MAAQ,WACR,MAAOnK,GAAE8J,KAAKX,EAAQlJ,WAAW,GAAM,KAKzCD,EAAEoK,aAAe,SAASjK,GAGxB,IAAK,GAFDqE,MACA6F,EAAapK,UAAUN,OAClBiB,EAAI,EAAGjB,EAASW,EAAUH,GAAYR,EAAJiB,EAAYA,IAAK,CAC1D,GAAIF,GAAOP,EAAMS,EACjB,KAAIZ,EAAE6B,SAAS2C,EAAQ9D,GAAvB,CACA,IAAK,GAAIgJ,GAAI,EAAOW,EAAJX,GACT1J,EAAE6B,SAAS5B,UAAUyJ,GAAIhJ,GADAgJ,KAG5BA,IAAMW,GAAY7F,EAAO1C,KAAKpB,IAEpC,MAAO8D,IAKTxE,EAAE6J,WAAa,SAAS1J,GACtB,GAAI4I,GAAOI,EAAQlJ,WAAW,GAAM,EAAM,EAC1C,OAAOD,GAAEyF,OAAOtF,EAAO,SAASoD,GAC9B,OAAQvD,EAAE6B,SAASkH,EAAMxF,MAM7BvD,EAAEsK,IAAM,WACN,MAAOtK,GAAEuK,MAAMtK,YAKjBD,EAAEuK,MAAQ,SAASpK,GAIjB,IAAK,GAHDR,GAASQ,GAASH,EAAEc,IAAIX,EAAOG,GAAWX,QAAU,EACpD6E,EAASrC,MAAMxC,GAEVD,EAAQ,EAAWC,EAARD,EAAgBA,IAClC8E,EAAO9E,GAASM,EAAE4G,MAAMzG,EAAOT,EAEjC,OAAO8E,IAMTxE,EAAEwK,OAAS,SAAS7E,EAAMW,GAExB,IAAK,GADD9B,MACK5D,EAAI,EAAGjB,EAASW,EAAUqF,GAAWhG,EAAJiB,EAAYA,IAChD0F,EACF9B,EAAOmB,EAAK/E,IAAM0F,EAAO1F,GAEzB4D,EAAOmB,EAAK/E,GAAG,IAAM+E,EAAK/E,GAAG,EAGjC,OAAO4D,IAiBTxE,EAAEuF,UAAYrF,EAA2B,GACzCF,EAAEyK,cAAgBvK,GAA4B,GAI9CF,EAAES,YAAc,SAASN,EAAOb,EAAKC,EAAUM,GAC7CN,EAAWc,EAAGd,EAAUM,EAAS,EAGjC,KAFA,GAAI0D,GAAQhE,EAASD,GACjBoL,EAAM,EAAGC,EAAOrK,EAAUH,GACjBwK,EAAND,GAAY,CACjB,GAAIE,GAAM/J,KAAKgK,OAAOH,EAAMC,GAAQ,EAChCpL,GAASY,EAAMyK,IAAQrH,EAAOmH,EAAME,EAAM,EAAQD,EAAOC,EAE/D,MAAOF,IAgCT1K,EAAEuG,QAAUhG,EAAkB,EAAGP,EAAEuF,UAAWvF,EAAES,aAChDT,EAAE8K,YAAcvK,GAAmB,EAAGP,EAAEyK,eAKxCzK,EAAE+K,MAAQ,SAASC,EAAOC,EAAMC,GAClB,MAARD,IACFA,EAAOD,GAAS,EAChBA,EAAQ,GAEVE,EAAOA,GAAQ,CAKf,KAAK,GAHDvL,GAASkB,KAAKC,IAAID,KAAKsK,MAAMF,EAAOD,GAASE,GAAO,GACpDH,EAAQ5I,MAAMxC,GAETgB,EAAM,EAAShB,EAANgB,EAAcA,IAAOqK,GAASE,EAC9CH,EAAMpK,GAAOqK,CAGf,OAAOD,GAQT,IAAIK,GAAe,SAASC,EAAYC,EAAWzL,EAAS0L,EAAgB7E,GAC1E,KAAM6E,YAA0BD,IAAY,MAAOD,GAAW1H,MAAM9D,EAAS6G,EAC7E,IAAI8E,GAAOjH,EAAW8G,EAAW5J,WAC7B+C,EAAS6G,EAAW1H,MAAM6H,EAAM9E,EACpC,OAAI1G,GAAE6D,SAASW,GAAgBA,EACxBgH,EAMTxL,GAAE6C,KAAO,SAASQ,EAAMxD,GACtB,GAAI+C,GAAcS,EAAKR,OAASD,EAAY,MAAOA,GAAWe,MAAMN,EAAMrC,EAAMC,KAAKhB,UAAW,GAChG,KAAKD,EAAEwB,WAAW6B,GAAO,KAAM,IAAIoI,WAAU,oCAC7C,IAAI/E,GAAO1F,EAAMC,KAAKhB,UAAW,GAC7ByL,EAAQ,WACV,MAAON,GAAa/H,EAAMqI,EAAO7L,EAASmC,KAAM0E,EAAKiF,OAAO3K,EAAMC,KAAKhB,aAEzE,OAAOyL,IAMT1L,EAAE4L,QAAU,SAASvI,GACnB,GAAIwI,GAAY7K,EAAMC,KAAKhB,UAAW,GAClCyL,EAAQ,WAGV,IAAK,GAFDI,GAAW,EAAGnM,EAASkM,EAAUlM,OACjC+G,EAAOvE,MAAMxC,GACRiB,EAAI,EAAOjB,EAAJiB,EAAYA,IAC1B8F,EAAK9F,GAAKiL,EAAUjL,KAAOZ,EAAIC,UAAU6L,KAAcD,EAAUjL,EAEnE,MAAOkL,EAAW7L,UAAUN,QAAQ+G,EAAK5E,KAAK7B,UAAU6L,KACxD,OAAOV,GAAa/H,EAAMqI,EAAO1J,KAAMA,KAAM0E,GAE/C,OAAOgF,IAMT1L,EAAE+L,QAAU,SAASzM,GACnB,GAAIsB,GAA8B0D,EAA3B3E,EAASM,UAAUN,MAC1B,IAAc,GAAVA,EAAa,KAAM,IAAIqM,OAAM,wCACjC,KAAKpL,EAAI,EAAOjB,EAAJiB,EAAYA,IACtB0D,EAAMrE,UAAUW,GAChBtB,EAAIgF,GAAOtE,EAAE6C,KAAKvD,EAAIgF,GAAMhF,EAE9B,OAAOA,IAITU,EAAEiM,QAAU,SAAS5I,EAAM6I,GACzB,GAAID,GAAU,SAAS3H,GACrB,GAAI6H,GAAQF,EAAQE,MAChBC,EAAU,IAAMF,EAASA,EAAOvI,MAAM3B,KAAM/B,WAAaqE,EAE7D,OADKtE,GAAE4B,IAAIuK,EAAOC,KAAUD,EAAMC,GAAW/I,EAAKM,MAAM3B,KAAM/B,YACvDkM,EAAMC,GAGf,OADAH,GAAQE,SACDF,GAKTjM,EAAEqM,MAAQ,SAAShJ,EAAMiJ,GACvB,GAAI5F,GAAO1F,EAAMC,KAAKhB,UAAW,EACjC,OAAOsM,YAAW,WAChB,MAAOlJ,GAAKM,MAAM,KAAM+C,IACvB4F,IAKLtM,EAAEwM,MAAQxM,EAAE4L,QAAQ5L,EAAEqM,MAAOrM,EAAG,GAOhCA,EAAEyM,SAAW,SAASpJ,EAAMiJ,EAAMI,GAChC,GAAI7M,GAAS6G,EAAMlC,EACfmI,EAAU,KACVC,EAAW,CACVF,KAASA,KACd,IAAIG,GAAQ,WACVD,EAAWF,EAAQI,WAAY,EAAQ,EAAI9M,EAAE+M,MAC7CJ,EAAU,KACVnI,EAASnB,EAAKM,MAAM9D,EAAS6G,GACxBiG,IAAS9M,EAAU6G,EAAO,MAEjC,OAAO,YACL,GAAIqG,GAAM/M,EAAE+M,KACPH,IAAYF,EAAQI,WAAY,IAAOF,EAAWG,EACvD,IAAIC,GAAYV,GAAQS,EAAMH,EAc9B,OAbA/M,GAAUmC,KACV0E,EAAOzG,UACU,GAAb+M,GAAkBA,EAAYV,GAC5BK,IACFM,aAAaN,GACbA,EAAU,MAEZC,EAAWG,EACXvI,EAASnB,EAAKM,MAAM9D,EAAS6G,GACxBiG,IAAS9M,EAAU6G,EAAO,OACrBiG,GAAWD,EAAQQ,YAAa,IAC1CP,EAAUJ,WAAWM,EAAOG,IAEvBxI,IAQXxE,EAAEmN,SAAW,SAAS9J,EAAMiJ,EAAMc,GAChC,GAAIT,GAASjG,EAAM7G,EAASwN,EAAW7I,EAEnCqI,EAAQ,WACV,GAAI/D,GAAO9I,EAAE+M,MAAQM,CAEVf,GAAPxD,GAAeA,GAAQ,EACzB6D,EAAUJ,WAAWM,EAAOP,EAAOxD,IAEnC6D,EAAU,KACLS,IACH5I,EAASnB,EAAKM,MAAM9D,EAAS6G,GACxBiG,IAAS9M,EAAU6G,EAAO,QAKrC,OAAO,YACL7G,EAAUmC,KACV0E,EAAOzG,UACPoN,EAAYrN,EAAE+M,KACd,IAAIO,GAAUF,IAAcT,CAO5B,OANKA,KAASA,EAAUJ,WAAWM,EAAOP,IACtCgB,IACF9I,EAASnB,EAAKM,MAAM9D,EAAS6G,GAC7B7G,EAAU6G,EAAO,MAGZlC,IAOXxE,EAAEuN,KAAO,SAASlK,EAAMmK,GACtB,MAAOxN,GAAE4L,QAAQ4B,EAASnK,IAI5BrD,EAAE6F,OAAS,SAASzF,GAClB,MAAO,YACL,OAAQA,EAAUuD,MAAM3B,KAAM/B,aAMlCD,EAAEyN,QAAU,WACV,GAAI/G,GAAOzG,UACP+K,EAAQtE,EAAK/G,OAAS,CAC1B,OAAO,YAGL,IAFA,GAAIiB,GAAIoK,EACJxG,EAASkC,EAAKsE,GAAOrH,MAAM3B,KAAM/B,WAC9BW,KAAK4D,EAASkC,EAAK9F,GAAGK,KAAKe,KAAMwC,EACxC,OAAOA,KAKXxE,EAAE0N,MAAQ,SAASC,EAAOtK,GACxB,MAAO,YACL,QAAMsK,EAAQ,EACLtK,EAAKM,MAAM3B,KAAM/B,WAD1B,SAOJD,EAAE4N,OAAS,SAASD,EAAOtK,GACzB,GAAI7D,EACJ,OAAO,YAKL,QAJMmO,EAAQ,IACZnO,EAAO6D,EAAKM,MAAM3B,KAAM/B,YAEb,GAAT0N,IAAYtK,EAAO,MAChB7D,IAMXQ,EAAE6N,KAAO7N,EAAE4L,QAAQ5L,EAAE4N,OAAQ,EAM7B,IAAIE,KAAevL,SAAU,MAAMwL,qBAAqB,YACpD1M,GAAsB,UAAW,gBAAiB,WAClC,uBAAwB,iBAAkB,iBAqB9DrB,GAAEP,KAAO,SAASH,GAChB,IAAKU,EAAE6D,SAASvE,GAAM,QACtB,IAAIqD,EAAY,MAAOA,GAAWrD,EAClC,IAAIG,KACJ,KAAK,GAAI6E,KAAOhF,GAASU,EAAE4B,IAAItC,EAAKgF,IAAM7E,EAAKqC,KAAKwC,EAGpD,OADIwJ,IAAY3M,EAAoB7B,EAAKG,GAClCA,GAITO,EAAEgO,QAAU,SAAS1O,GACnB,IAAKU,EAAE6D,SAASvE,GAAM,QACtB,IAAIG,KACJ,KAAK,GAAI6E,KAAOhF,GAAKG,EAAKqC,KAAKwC,EAG/B,OADIwJ,IAAY3M,EAAoB7B,EAAKG,GAClCA,GAITO,EAAEsG,OAAS,SAAShH,GAIlB,IAAK,GAHDG,GAAOO,EAAEP,KAAKH,GACdK,EAASF,EAAKE,OACd2G,EAASnE,MAAMxC,GACViB,EAAI,EAAOjB,EAAJiB,EAAYA,IAC1B0F,EAAO1F,GAAKtB,EAAIG,EAAKmB,GAEvB,OAAO0F,IAKTtG,EAAEiO,UAAY,SAAS3O,EAAKC,EAAUM,GACpCN,EAAWc,EAAGd,EAAUM,EAKtB,KAAK,GADDD,GAHFH,EAAQO,EAAEP,KAAKH,GACbK,EAASF,EAAKE,OACdoF,KAEKrF,EAAQ,EAAWC,EAARD,EAAgBA,IAClCE,EAAaH,EAAKC,GAClBqF,EAAQnF,GAAcL,EAASD,EAAIM,GAAaA,EAAYN,EAE9D,OAAOyF,IAIX/E,EAAEkO,MAAQ,SAAS5O,GAIjB,IAAK,GAHDG,GAAOO,EAAEP,KAAKH,GACdK,EAASF,EAAKE,OACduO,EAAQ/L,MAAMxC,GACTiB,EAAI,EAAOjB,EAAJiB,EAAYA,IAC1BsN,EAAMtN,IAAMnB,EAAKmB,GAAItB,EAAIG,EAAKmB,IAEhC,OAAOsN,IAITlO,EAAEmO,OAAS,SAAS7O,GAGlB,IAAK,GAFDkF,MACA/E,EAAOO,EAAEP,KAAKH,GACTsB,EAAI,EAAGjB,EAASF,EAAKE,OAAYA,EAAJiB,EAAYA,IAChD4D,EAAOlF,EAAIG,EAAKmB,KAAOnB,EAAKmB,EAE9B,OAAO4D,IAKTxE,EAAEoO,UAAYpO,EAAEqO,QAAU,SAAS/O,GACjC,GAAIgP,KACJ,KAAK,GAAIhK,KAAOhF,GACVU,EAAEwB,WAAWlC,EAAIgF,KAAOgK,EAAMxM,KAAKwC,EAEzC,OAAOgK,GAAM3G,QAIf3H,EAAEuO,OAAStK,EAAejE,EAAEgO,SAI5BhO,EAAEwO,UAAYxO,EAAEyO,OAASxK,EAAejE,EAAEP,MAG1CO,EAAEwF,QAAU,SAASlG,EAAKc,EAAWP,GACnCO,EAAYC,EAAGD,EAAWP,EAE1B,KAAK,GADmByE,GAApB7E,EAAOO,EAAEP,KAAKH,GACTsB,EAAI,EAAGjB,EAASF,EAAKE,OAAYA,EAAJiB,EAAYA,IAEhD,GADA0D,EAAM7E,EAAKmB,GACPR,EAAUd,EAAIgF,GAAMA,EAAKhF,GAAM,MAAOgF,IAK9CtE,EAAE0O,KAAO,SAASlE,EAAQmE,EAAW9O,GACnC,GAA+BN,GAAUE,EAArC+E,KAAalF,EAAMkL,CACvB,IAAW,MAAPlL,EAAa,MAAOkF,EACpBxE,GAAEwB,WAAWmN,IACflP,EAAOO,EAAEgO,QAAQ1O,GACjBC,EAAWO,EAAW6O,EAAW9O,KAEjCJ,EAAO0J,EAAQlJ,WAAW,GAAO,EAAO,GACxCV,EAAW,SAASgE,EAAOe,EAAKhF,GAAO,MAAOgF,KAAOhF,IACrDA,EAAM8C,OAAO9C,GAEf,KAAK,GAAIsB,GAAI,EAAGjB,EAASF,EAAKE,OAAYA,EAAJiB,EAAYA,IAAK,CACrD,GAAI0D,GAAM7E,EAAKmB,GACX2C,EAAQjE,EAAIgF,EACZ/E,GAASgE,EAAOe,EAAKhF,KAAMkF,EAAOF,GAAOf,GAE/C,MAAOiB,IAITxE,EAAE4O,KAAO,SAAStP,EAAKC,EAAUM,GAC/B,GAAIG,EAAEwB,WAAWjC,GACfA,EAAWS,EAAE6F,OAAOtG,OACf,CACL,GAAIE,GAAOO,EAAE6E,IAAIsE,EAAQlJ,WAAW,GAAO,EAAO,GAAI4O,OACtDtP,GAAW,SAASgE,EAAOe,GACzB,OAAQtE,EAAE6B,SAASpC,EAAM6E,IAG7B,MAAOtE,GAAE0O,KAAKpP,EAAKC,EAAUM,IAI/BG,EAAE8O,SAAW7K,EAAejE,EAAEgO,SAAS,GAKvChO,EAAE+C,OAAS,SAAStB,EAAWsN,GAC7B,GAAIvK,GAASD,EAAW9C,EAExB,OADIsN,IAAO/O,EAAEwO,UAAUhK,EAAQuK,GACxBvK,GAITxE,EAAEgP,MAAQ,SAAS1P,GACjB,MAAKU,GAAE6D,SAASvE,GACTU,EAAE0C,QAAQpD,GAAOA,EAAI0B,QAAUhB,EAAEuO,UAAWjP,GADtBA,GAO/BU,EAAEiP,IAAM,SAAS3P,EAAK4P,GAEpB,MADAA,GAAY5P,GACLA,GAITU,EAAEmP,QAAU,SAAS3E,EAAQ1D,GAC3B,GAAIrH,GAAOO,EAAEP,KAAKqH,GAAQnH,EAASF,EAAKE,MACxC,IAAc,MAAV6K,EAAgB,OAAQ7K,CAE5B,KAAK,GADDL,GAAM8C,OAAOoI,GACR5J,EAAI,EAAOjB,EAAJiB,EAAYA,IAAK,CAC/B,GAAI0D,GAAM7E,EAAKmB,EACf,IAAIkG,EAAMxC,KAAShF,EAAIgF,MAAUA,IAAOhF,IAAM,OAAO,EAEvD,OAAO,EAKT,IAAI8P,GAAK,SAAStH,EAAGC,EAAGsH,EAAQC,GAG9B,GAAIxH,IAAMC,EAAG,MAAa,KAAND,GAAW,EAAIA,IAAM,EAAIC,CAE7C,IAAS,MAALD,GAAkB,MAALC,EAAW,MAAOD,KAAMC,CAErCD,aAAa9H,KAAG8H,EAAIA,EAAE7E,UACtB8E,YAAa/H,KAAG+H,EAAIA,EAAE9E,SAE1B,IAAIsM,GAAYhN,EAAStB,KAAK6G,EAC9B,IAAIyH,IAAchN,EAAStB,KAAK8G,GAAI,OAAO,CAC3C,QAAQwH,GAEN,IAAK,kBAEL,IAAK,kBAGH,MAAO,GAAKzH,GAAM,GAAKC,CACzB,KAAK,kBAGH,OAAKD,KAAOA,GAAWC,KAAOA,EAEhB,KAAND,EAAU,GAAKA,IAAM,EAAIC,GAAKD,KAAOC,CAC/C,KAAK,gBACL,IAAK,mBAIH,OAAQD,KAAOC,EAGnB,GAAIyH,GAA0B,mBAAdD,CAChB,KAAKC,EAAW,CACd,GAAgB,gBAAL1H,IAA6B,gBAALC,GAAe,OAAO,CAIzD,IAAI0H,GAAQ3H,EAAExG,YAAaoO,EAAQ3H,EAAEzG,WACrC,IAAImO,IAAUC,KAAW1P,EAAEwB,WAAWiO,IAAUA,YAAiBA,IACxCzP,EAAEwB,WAAWkO,IAAUA,YAAiBA,KACzC,eAAiB5H,IAAK,eAAiBC,GAC7D,OAAO,EAQXsH,EAASA,MACTC,EAASA,KAET,KADA,GAAI3P,GAAS0P,EAAO1P,OACbA,KAGL,GAAI0P,EAAO1P,KAAYmI,EAAG,MAAOwH,GAAO3P,KAAYoI,CAQtD,IAJAsH,EAAOvN,KAAKgG,GACZwH,EAAOxN,KAAKiG,GAGRyH,EAAW,CAGb,GADA7P,EAASmI,EAAEnI,OACPA,IAAWoI,EAAEpI,OAAQ,OAAO,CAEhC,MAAOA,KACL,IAAKyP,EAAGtH,EAAEnI,GAASoI,EAAEpI,GAAS0P,EAAQC,GAAS,OAAO,MAEnD,CAEL,GAAsBhL,GAAlB7E,EAAOO,EAAEP,KAAKqI,EAGlB,IAFAnI,EAASF,EAAKE,OAEVK,EAAEP,KAAKsI,GAAGpI,SAAWA,EAAQ,OAAO,CACxC,MAAOA,KAGL,GADA2E,EAAM7E,EAAKE,IACLK,EAAE4B,IAAImG,EAAGzD,KAAQ8K,EAAGtH,EAAExD,GAAMyD,EAAEzD,GAAM+K,EAAQC,GAAU,OAAO,EAMvE,MAFAD,GAAOM,MACPL,EAAOK,OACA,EAIT3P,GAAE4P,QAAU,SAAS9H,EAAGC,GACtB,MAAOqH,GAAGtH,EAAGC,IAKf/H,EAAE6P,QAAU,SAASvQ,GACnB,MAAW,OAAPA,GAAoB,EACpBS,EAAYT,KAASU,EAAE0C,QAAQpD,IAAQU,EAAE8P,SAASxQ,IAAQU,EAAEyJ,YAAYnK,IAA6B,IAAfA,EAAIK,OAChE,IAAvBK,EAAEP,KAAKH,GAAKK,QAIrBK,EAAE+P,UAAY,SAASzQ,GACrB,SAAUA,GAAwB,IAAjBA,EAAI0Q,WAKvBhQ,EAAE0C,QAAUD,GAAiB,SAASnD,GACpC,MAA8B,mBAAvBiD,EAAStB,KAAK3B,IAIvBU,EAAE6D,SAAW,SAASvE,GACpB,GAAI2Q,SAAc3Q,EAClB,OAAgB,aAAT2Q,GAAgC,WAATA,KAAuB3Q,GAIvDU,EAAE2E,MAAM,YAAa,WAAY,SAAU,SAAU,OAAQ,SAAU,SAAU,SAASuL,GACxFlQ,EAAE,KAAOkQ,GAAQ,SAAS5Q,GACxB,MAAOiD,GAAStB,KAAK3B,KAAS,WAAa4Q,EAAO,OAMjDlQ,EAAEyJ,YAAYxJ,aACjBD,EAAEyJ,YAAc,SAASnK,GACvB,MAAOU,GAAE4B,IAAItC,EAAK,YAMJ,kBAAP,KAAyC,gBAAb6Q,aACrCnQ,EAAEwB,WAAa,SAASlC,GACtB,MAAqB,kBAAPA,KAAqB,IAKvCU,EAAEoQ,SAAW,SAAS9Q,GACpB,MAAO8Q,UAAS9Q,KAAS4B,MAAMmP,WAAW/Q,KAI5CU,EAAEkB,MAAQ,SAAS5B,GACjB,MAAOU,GAAEsQ,SAAShR,IAAQA,KAASA,GAIrCU,EAAEiK,UAAY,SAAS3K,GACrB,MAAOA,MAAQ,GAAQA,KAAQ,GAAgC,qBAAvBiD,EAAStB,KAAK3B,IAIxDU,EAAEuQ,OAAS,SAASjR,GAClB,MAAe,QAARA,GAITU,EAAEwQ,YAAc,SAASlR,GACvB,MAAOA,SAAa,IAKtBU,EAAE4B,IAAM,SAAStC,EAAKgF,GACpB,MAAc,OAAPhF,GAAekD,EAAevB,KAAK3B,EAAKgF,IAQjDtE,EAAEyQ,WAAa,WAEb,MADA1O,GAAK/B,EAAIiC,EACFD,MAIThC,EAAE4D,SAAW,SAASL,GACpB,MAAOA,IAITvD,EAAE0Q,SAAW,SAASnN,GACpB,MAAO,YACL,MAAOA,KAIXvD,EAAE2Q,KAAO,aAET3Q,EAAE+D,SAAWA,EAGb/D,EAAE4Q,WAAa,SAAStR,GACtB,MAAc,OAAPA,EAAc,aAAe,SAASgF,GAC3C,MAAOhF,GAAIgF,KAMftE,EAAE8D,QAAU9D,EAAE6Q,QAAU,SAAS/J,GAE/B,MADAA,GAAQ9G,EAAEwO,aAAc1H,GACjB,SAASxH,GACd,MAAOU,GAAEmP,QAAQ7P,EAAKwH,KAK1B9G,EAAE2N,MAAQ,SAASnG,EAAGjI,EAAUM,GAC9B,GAAIiR,GAAQ3O,MAAMtB,KAAKC,IAAI,EAAG0G,GAC9BjI,GAAWO,EAAWP,EAAUM,EAAS,EACzC,KAAK,GAAIe,GAAI,EAAO4G,EAAJ5G,EAAOA,IAAKkQ,EAAMlQ,GAAKrB,EAASqB,EAChD,OAAOkQ,IAIT9Q,EAAEsH,OAAS,SAASvG,EAAKD,GAKvB,MAJW,OAAPA,IACFA,EAAMC,EACNA,EAAM,GAEDA,EAAMF,KAAKgK,MAAMhK,KAAKyG,UAAYxG,EAAMC,EAAM,KAIvDf,EAAE+M,IAAMgE,KAAKhE,KAAO,WAClB,OAAO,GAAIgE,OAAOC,UAIpB,IAAIC,IACFC,IAAK,QACLC,IAAK,OACLC,IAAK,OACLC,IAAK,SACLC,IAAK,SACLC,IAAK,UAEHC,EAAcxR,EAAEmO,OAAO8C,GAGvBQ,EAAgB,SAAS5M,GAC3B,GAAI6M,GAAU,SAASC,GACrB,MAAO9M,GAAI8M,IAGTvN,EAAS,MAAQpE,EAAEP,KAAKoF,GAAK+M,KAAK,KAAO,IACzCC,EAAaC,OAAO1N,GACpB2N,EAAgBD,OAAO1N,EAAQ,IACnC,OAAO,UAAS4N,GAEd,MADAA,GAAmB,MAAVA,EAAiB,GAAK,GAAKA,EAC7BH,EAAWI,KAAKD,GAAUA,EAAOE,QAAQH,EAAeL,GAAWM,GAG9EhS,GAAEmS,OAASV,EAAcR,GACzBjR,EAAEoS,SAAWX,EAAcD,GAI3BxR,EAAEwE,OAAS,SAASgG,EAAQzG,EAAUsO,GACpC,GAAI9O,GAAkB,MAAViH,MAAsB,GAAIA,EAAOzG,EAI7C,OAHIR,SAAe,KACjBA,EAAQ8O,GAEHrS,EAAEwB,WAAW+B,GAASA,EAAMtC,KAAKuJ,GAAUjH,EAKpD,IAAI+O,GAAY,CAChBtS,GAAEuS,SAAW,SAASC,GACpB,GAAIC,KAAOH,EAAY,EACvB,OAAOE,GAASA,EAASC,EAAKA,GAKhCzS,EAAE0S,kBACAC,SAAc,kBACdC,YAAc,mBACdT,OAAc,mBAMhB,IAAIU,GAAU,OAIVC,GACFxB,IAAU,IACVyB,KAAU,KACVC,KAAU,IACVC,KAAU,IACVC,SAAU,QACVC,SAAU,SAGRzB,EAAU,4BAEV0B,EAAa,SAASzB,GACxB,MAAO,KAAOmB,EAAQnB,GAOxB3R,GAAEqT,SAAW,SAASC,EAAMC,EAAUC,IAC/BD,GAAYC,IAAaD,EAAWC,GACzCD,EAAWvT,EAAE8O,YAAayE,EAAUvT,EAAE0S,iBAGtC,IAAI5O,GAAUgO,SACXyB,EAASpB,QAAUU,GAASzO,QAC5BmP,EAASX,aAAeC,GAASzO,QACjCmP,EAASZ,UAAYE,GAASzO,QAC/BwN,KAAK,KAAO,KAAM,KAGhBlS,EAAQ,EACR0E,EAAS,QACbkP,GAAKpB,QAAQpO,EAAS,SAAS6N,EAAOQ,EAAQS,EAAaD,EAAUc,GAanE,MAZArP,IAAUkP,EAAKtS,MAAMtB,EAAO+T,GAAQvB,QAAQR,EAAS0B,GACrD1T,EAAQ+T,EAAS9B,EAAMhS,OAEnBwS,EACF/N,GAAU,cAAgB+N,EAAS,iCAC1BS,EACTxO,GAAU,cAAgBwO,EAAc,uBAC/BD,IACTvO,GAAU,OAASuO,EAAW,YAIzBhB,IAETvN,GAAU,OAGLmP,EAASG,WAAUtP,EAAS,mBAAqBA,EAAS,OAE/DA,EAAS,2CACP,oDACAA,EAAS,eAEX,KACE,GAAIuP,GAAS,GAAIrR,UAASiR,EAASG,UAAY,MAAO,IAAKtP,GAC3D,MAAOwP,GAEP,KADAA,GAAExP,OAASA,EACLwP,EAGR,GAAIP,GAAW,SAASQ,GACtB,MAAOF,GAAO1S,KAAKe,KAAM6R,EAAM7T,IAI7B8T,EAAWP,EAASG,UAAY,KAGpC,OAFAL,GAASjP,OAAS,YAAc0P,EAAW,OAAS1P,EAAS,IAEtDiP,GAITrT,EAAE+T,MAAQ,SAASzU,GACjB,GAAI0U,GAAWhU,EAAEV,EAEjB,OADA0U,GAASC,QAAS,EACXD,EAUT,IAAIxP,GAAS,SAASwP,EAAU1U,GAC9B,MAAO0U,GAASC,OAASjU,EAAEV,GAAKyU,QAAUzU,EAI5CU,GAAEkU,MAAQ,SAAS5U,GACjBU,EAAE2E,KAAK3E,EAAEoO,UAAU9O,GAAM,SAAS4Q,GAChC,GAAI7M,GAAOrD,EAAEkQ,GAAQ5Q,EAAI4Q,EACzBlQ,GAAEyB,UAAUyO,GAAQ,WAClB,GAAIxJ,IAAQ1E,KAAKiB,SAEjB,OADAnB,GAAK6B,MAAM+C,EAAMzG,WACVuE,EAAOxC,KAAMqB,EAAKM,MAAM3D,EAAG0G,QAMxC1G,EAAEkU,MAAMlU,GAGRA,EAAE2E,MAAM,MAAO,OAAQ,UAAW,QAAS,OAAQ,SAAU,WAAY,SAASuL,GAChF,GAAIzJ,GAASvE,EAAWgO,EACxBlQ,GAAEyB,UAAUyO,GAAQ,WAClB,GAAI5Q,GAAM0C,KAAKiB,QAGf,OAFAwD,GAAO9C,MAAMrE,EAAKW,WACJ,UAATiQ,GAA6B,WAATA,GAAqC,IAAf5Q,EAAIK,cAAqBL,GAAI,GACrEkF,EAAOxC,KAAM1C,MAKxBU,EAAE2E,MAAM,SAAU,OAAQ,SAAU,SAASuL,GAC3C,GAAIzJ,GAASvE,EAAWgO,EACxBlQ,GAAEyB,UAAUyO,GAAQ,WAClB,MAAO1L,GAAOxC,KAAMyE,EAAO9C,MAAM3B,KAAKiB,SAAUhD,eAKpDD,EAAEyB,UAAU8B,MAAQ,WAClB,MAAOvB,MAAKiB,UAKdjD,EAAEyB,UAAU0S,QAAUnU,EAAEyB,UAAU2S,OAASpU,EAAEyB,UAAU8B,MAEvDvD,EAAEyB,UAAUc,SAAW,WACrB,MAAO,GAAKP,KAAKiB,UAUG,kBAAXoR,SAAyBA,OAAOC,KACzCD,OAAO,gBAAkB,WACvB,MAAOrU,OAGXiB,KAAKe"}
\ No newline at end of file
diff --git a/bin/node_modules/underscore/underscore.js b/bin/node_modules/underscore/underscore.js
deleted file mode 100644
index b29332f..0000000
--- a/bin/node_modules/underscore/underscore.js
+++ /dev/null
@@ -1,1548 +0,0 @@
-//     Underscore.js 1.8.3
-//     http://underscorejs.org
-//     (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
-//     Underscore may be freely distributed under the MIT license.
-
-(function() {
-
-  // Baseline setup
-  // --------------
-
-  // Establish the root object, `window` in the browser, or `exports` on the server.
-  var root = this;
-
-  // Save the previous value of the `_` variable.
-  var previousUnderscore = root._;
-
-  // Save bytes in the minified (but not gzipped) version:
-  var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype;
-
-  // Create quick reference variables for speed access to core prototypes.
-  var
-    push             = ArrayProto.push,
-    slice            = ArrayProto.slice,
-    toString         = ObjProto.toString,
-    hasOwnProperty   = ObjProto.hasOwnProperty;
-
-  // All **ECMAScript 5** native function implementations that we hope to use
-  // are declared here.
-  var
-    nativeIsArray      = Array.isArray,
-    nativeKeys         = Object.keys,
-    nativeBind         = FuncProto.bind,
-    nativeCreate       = Object.create;
-
-  // Naked function reference for surrogate-prototype-swapping.
-  var Ctor = function(){};
-
-  // Create a safe reference to the Underscore object for use below.
-  var _ = function(obj) {
-    if (obj instanceof _) return obj;
-    if (!(this instanceof _)) return new _(obj);
-    this._wrapped = obj;
-  };
-
-  // Export the Underscore object for **Node.js**, with
-  // backwards-compatibility for the old `require()` API. If we're in
-  // the browser, add `_` as a global object.
-  if (typeof exports !== 'undefined') {
-    if (typeof module !== 'undefined' && module.exports) {
-      exports = module.exports = _;
-    }
-    exports._ = _;
-  } else {
-    root._ = _;
-  }
-
-  // Current version.
-  _.VERSION = '1.8.3';
-
-  // Internal function that returns an efficient (for current engines) version
-  // of the passed-in callback, to be repeatedly applied in other Underscore
-  // functions.
-  var optimizeCb = function(func, context, argCount) {
-    if (context === void 0) return func;
-    switch (argCount == null ? 3 : argCount) {
-      case 1: return function(value) {
-        return func.call(context, value);
-      };
-      case 2: return function(value, other) {
-        return func.call(context, value, other);
-      };
-      case 3: return function(value, index, collection) {
-        return func.call(context, value, index, collection);
-      };
-      case 4: return function(accumulator, value, index, collection) {
-        return func.call(context, accumulator, value, index, collection);
-      };
-    }
-    return function() {
-      return func.apply(context, arguments);
-    };
-  };
-
-  // A mostly-internal function to generate callbacks that can be applied
-  // to each element in a collection, returning the desired result — either
-  // identity, an arbitrary callback, a property matcher, or a property accessor.
-  var cb = function(value, context, argCount) {
-    if (value == null) return _.identity;
-    if (_.isFunction(value)) return optimizeCb(value, context, argCount);
-    if (_.isObject(value)) return _.matcher(value);
-    return _.property(value);
-  };
-  _.iteratee = function(value, context) {
-    return cb(value, context, Infinity);
-  };
-
-  // An internal function for creating assigner functions.
-  var createAssigner = function(keysFunc, undefinedOnly) {
-    return function(obj) {
-      var length = arguments.length;
-      if (length < 2 || obj == null) return obj;
-      for (var index = 1; index < length; index++) {
-        var source = arguments[index],
-            keys = keysFunc(source),
-            l = keys.length;
-        for (var i = 0; i < l; i++) {
-          var key = keys[i];
-          if (!undefinedOnly || obj[key] === void 0) obj[key] = source[key];
-        }
-      }
-      return obj;
-    };
-  };
-
-  // An internal function for creating a new object that inherits from another.
-  var baseCreate = function(prototype) {
-    if (!_.isObject(prototype)) return {};
-    if (nativeCreate) return nativeCreate(prototype);
-    Ctor.prototype = prototype;
-    var result = new Ctor;
-    Ctor.prototype = null;
-    return result;
-  };
-
-  var property = function(key) {
-    return function(obj) {
-      return obj == null ? void 0 : obj[key];
-    };
-  };
-
-  // Helper for collection methods to determine whether a collection
-  // should be iterated as an array or as an object
-  // Related: http://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength
-  // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094
-  var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1;
-  var getLength = property('length');
-  var isArrayLike = function(collection) {
-    var length = getLength(collection);
-    return typeof length == 'number' && length >= 0 && length <= MAX_ARRAY_INDEX;
-  };
-
-  // Collection Functions
-  // --------------------
-
-  // The cornerstone, an `each` implementation, aka `forEach`.
-  // Handles raw objects in addition to array-likes. Treats all
-  // sparse array-likes as if they were dense.
-  _.each = _.forEach = function(obj, iteratee, context) {
-    iteratee = optimizeCb(iteratee, context);
-    var i, length;
-    if (isArrayLike(obj)) {
-      for (i = 0, length = obj.length; i < length; i++) {
-        iteratee(obj[i], i, obj);
-      }
-    } else {
-      var keys = _.keys(obj);
-      for (i = 0, length = keys.length; i < length; i++) {
-        iteratee(obj[keys[i]], keys[i], obj);
-      }
-    }
-    return obj;
-  };
-
-  // Return the results of applying the iteratee to each element.
-  _.map = _.collect = function(obj, iteratee, context) {
-    iteratee = cb(iteratee, context);
-    var keys = !isArrayLike(obj) && _.keys(obj),
-        length = (keys || obj).length,
-        results = Array(length);
-    for (var index = 0; index < length; index++) {
-      var currentKey = keys ? keys[index] : index;
-      results[index] = iteratee(obj[currentKey], currentKey, obj);
-    }
-    return results;
-  };
-
-  // Create a reducing function iterating left or right.
-  function createReduce(dir) {
-    // Optimized iterator function as using arguments.length
-    // in the main function will deoptimize the, see #1991.
-    function iterator(obj, iteratee, memo, keys, index, length) {
-      for (; index >= 0 && index < length; index += dir) {
-        var currentKey = keys ? keys[index] : index;
-        memo = iteratee(memo, obj[currentKey], currentKey, obj);
-      }
-      return memo;
-    }
-
-    return function(obj, iteratee, memo, context) {
-      iteratee = optimizeCb(iteratee, context, 4);
-      var keys = !isArrayLike(obj) && _.keys(obj),
-          length = (keys || obj).length,
-          index = dir > 0 ? 0 : length - 1;
-      // Determine the initial value if none is provided.
-      if (arguments.length < 3) {
-        memo = obj[keys ? keys[index] : index];
-        index += dir;
-      }
-      return iterator(obj, iteratee, memo, keys, index, length);
-    };
-  }
-
-  // **Reduce** builds up a single result from a list of values, aka `inject`,
-  // or `foldl`.
-  _.reduce = _.foldl = _.inject = createReduce(1);
-
-  // The right-associative version of reduce, also known as `foldr`.
-  _.reduceRight = _.foldr = createReduce(-1);
-
-  // Return the first value which passes a truth test. Aliased as `detect`.
-  _.find = _.detect = function(obj, predicate, context) {
-    var key;
-    if (isArrayLike(obj)) {
-      key = _.findIndex(obj, predicate, context);
-    } else {
-      key = _.findKey(obj, predicate, context);
-    }
-    if (key !== void 0 && key !== -1) return obj[key];
-  };
-
-  // Return all the elements that pass a truth test.
-  // Aliased as `select`.
-  _.filter = _.select = function(obj, predicate, context) {
-    var results = [];
-    predicate = cb(predicate, context);
-    _.each(obj, function(value, index, list) {
-      if (predicate(value, index, list)) results.push(value);
-    });
-    return results;
-  };
-
-  // Return all the elements for which a truth test fails.
-  _.reject = function(obj, predicate, context) {
-    return _.filter(obj, _.negate(cb(predicate)), context);
-  };
-
-  // Determine whether all of the elements match a truth test.
-  // Aliased as `all`.
-  _.every = _.all = function(obj, predicate, context) {
-    predicate = cb(predicate, context);
-    var keys = !isArrayLike(obj) && _.keys(obj),
-        length = (keys || obj).length;
-    for (var index = 0; index < length; index++) {
-      var currentKey = keys ? keys[index] : index;
-      if (!predicate(obj[currentKey], currentKey, obj)) return false;
-    }
-    return true;
-  };
-
-  // Determine if at least one element in the object matches a truth test.
-  // Aliased as `any`.
-  _.some = _.any = function(obj, predicate, context) {
-    predicate = cb(predicate, context);
-    var keys = !isArrayLike(obj) && _.keys(obj),
-        length = (keys || obj).length;
-    for (var index = 0; index < length; index++) {
-      var currentKey = keys ? keys[index] : index;
-      if (predicate(obj[currentKey], currentKey, obj)) return true;
-    }
-    return false;
-  };
-
-  // Determine if the array or object contains a given item (using `===`).
-  // Aliased as `includes` and `include`.
-  _.contains = _.includes = _.include = function(obj, item, fromIndex, guard) {
-    if (!isArrayLike(obj)) obj = _.values(obj);
-    if (typeof fromIndex != 'number' || guard) fromIndex = 0;
-    return _.indexOf(obj, item, fromIndex) >= 0;
-  };
-
-  // Invoke a method (with arguments) on every item in a collection.
-  _.invoke = function(obj, method) {
-    var args = slice.call(arguments, 2);
-    var isFunc = _.isFunction(method);
-    return _.map(obj, function(value) {
-      var func = isFunc ? method : value[method];
-      return func == null ? func : func.apply(value, args);
-    });
-  };
-
-  // Convenience version of a common use case of `map`: fetching a property.
-  _.pluck = function(obj, key) {
-    return _.map(obj, _.property(key));
-  };
-
-  // Convenience version of a common use case of `filter`: selecting only objects
-  // containing specific `key:value` pairs.
-  _.where = function(obj, attrs) {
-    return _.filter(obj, _.matcher(attrs));
-  };
-
-  // Convenience version of a common use case of `find`: getting the first object
-  // containing specific `key:value` pairs.
-  _.findWhere = function(obj, attrs) {
-    return _.find(obj, _.matcher(attrs));
-  };
-
-  // Return the maximum element (or element-based computation).
-  _.max = function(obj, iteratee, context) {
-    var result = -Infinity, lastComputed = -Infinity,
-        value, computed;
-    if (iteratee == null && obj != null) {
-      obj = isArrayLike(obj) ? obj : _.values(obj);
-      for (var i = 0, length = obj.length; i < length; i++) {
-        value = obj[i];
-        if (value > result) {
-          result = value;
-        }
-      }
-    } else {
-      iteratee = cb(iteratee, context);
-      _.each(obj, function(value, index, list) {
-        computed = iteratee(value, index, list);
-        if (computed > lastComputed || computed === -Infinity && result === -Infinity) {
-          result = value;
-          lastComputed = computed;
-        }
-      });
-    }
-    return result;
-  };
-
-  // Return the minimum element (or element-based computation).
-  _.min = function(obj, iteratee, context) {
-    var result = Infinity, lastComputed = Infinity,
-        value, computed;
-    if (iteratee == null && obj != null) {
-      obj = isArrayLike(obj) ? obj : _.values(obj);
-      for (var i = 0, length = obj.length; i < length; i++) {
-        value = obj[i];
-        if (value < result) {
-          result = value;
-        }
-      }
-    } else {
-      iteratee = cb(iteratee, context);
-      _.each(obj, function(value, index, list) {
-        computed = iteratee(value, index, list);
-        if (computed < lastComputed || computed === Infinity && result === Infinity) {
-          result = value;
-          lastComputed = computed;
-        }
-      });
-    }
-    return result;
-  };
-
-  // Shuffle a collection, using the modern version of the
-  // [Fisher-Yates shuffle](http://en.wikipedia.org/wiki/Fisher–Yates_shuffle).
-  _.shuffle = function(obj) {
-    var set = isArrayLike(obj) ? obj : _.values(obj);
-    var length = set.length;
-    var shuffled = Array(length);
-    for (var index = 0, rand; index < length; index++) {
-      rand = _.random(0, index);
-      if (rand !== index) shuffled[index] = shuffled[rand];
-      shuffled[rand] = set[index];
-    }
-    return shuffled;
-  };
-
-  // Sample **n** random values from a collection.
-  // If **n** is not specified, returns a single random element.
-  // The internal `guard` argument allows it to work with `map`.
-  _.sample = function(obj, n, guard) {
-    if (n == null || guard) {
-      if (!isArrayLike(obj)) obj = _.values(obj);
-      return obj[_.random(obj.length - 1)];
-    }
-    return _.shuffle(obj).slice(0, Math.max(0, n));
-  };
-
-  // Sort the object's values by a criterion produced by an iteratee.
-  _.sortBy = function(obj, iteratee, context) {
-    iteratee = cb(iteratee, context);
-    return _.pluck(_.map(obj, function(value, index, list) {
-      return {
-        value: value,
-        index: index,
-        criteria: iteratee(value, index, list)
-      };
-    }).sort(function(left, right) {
-      var a = left.criteria;
-      var b = right.criteria;
-      if (a !== b) {
-        if (a > b || a === void 0) return 1;
-        if (a < b || b === void 0) return -1;
-      }
-      return left.index - right.index;
-    }), 'value');
-  };
-
-  // An internal function used for aggregate "group by" operations.
-  var group = function(behavior) {
-    return function(obj, iteratee, context) {
-      var result = {};
-      iteratee = cb(iteratee, context);
-      _.each(obj, function(value, index) {
-        var key = iteratee(value, index, obj);
-        behavior(result, value, key);
-      });
-      return result;
-    };
-  };
-
-  // Groups the object's values by a criterion. Pass either a string attribute
-  // to group by, or a function that returns the criterion.
-  _.groupBy = group(function(result, value, key) {
-    if (_.has(result, key)) result[key].push(value); else result[key] = [value];
-  });
-
-  // Indexes the object's values by a criterion, similar to `groupBy`, but for
-  // when you know that your index values will be unique.
-  _.indexBy = group(function(result, value, key) {
-    result[key] = value;
-  });
-
-  // Counts instances of an object that group by a certain criterion. Pass
-  // either a string attribute to count by, or a function that returns the
-  // criterion.
-  _.countBy = group(function(result, value, key) {
-    if (_.has(result, key)) result[key]++; else result[key] = 1;
-  });
-
-  // Safely create a real, live array from anything iterable.
-  _.toArray = function(obj) {
-    if (!obj) return [];
-    if (_.isArray(obj)) return slice.call(obj);
-    if (isArrayLike(obj)) return _.map(obj, _.identity);
-    return _.values(obj);
-  };
-
-  // Return the number of elements in an object.
-  _.size = function(obj) {
-    if (obj == null) return 0;
-    return isArrayLike(obj) ? obj.length : _.keys(obj).length;
-  };
-
-  // Split a collection into two arrays: one whose elements all satisfy the given
-  // predicate, and one whose elements all do not satisfy the predicate.
-  _.partition = function(obj, predicate, context) {
-    predicate = cb(predicate, context);
-    var pass = [], fail = [];
-    _.each(obj, function(value, key, obj) {
-      (predicate(value, key, obj) ? pass : fail).push(value);
-    });
-    return [pass, fail];
-  };
-
-  // Array Functions
-  // ---------------
-
-  // Get the first element of an array. Passing **n** will return the first N
-  // values in the array. Aliased as `head` and `take`. The **guard** check
-  // allows it to work with `_.map`.
-  _.first = _.head = _.take = function(array, n, guard) {
-    if (array == null) return void 0;
-    if (n == null || guard) return array[0];
-    return _.initial(array, array.length - n);
-  };
-
-  // Returns everything but the last entry of the array. Especially useful on
-  // the arguments object. Passing **n** will return all the values in
-  // the array, excluding the last N.
-  _.initial = function(array, n, guard) {
-    return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n)));
-  };
-
-  // Get the last element of an array. Passing **n** will return the last N
-  // values in the array.
-  _.last = function(array, n, guard) {
-    if (array == null) return void 0;
-    if (n == null || guard) return array[array.length - 1];
-    return _.rest(array, Math.max(0, array.length - n));
-  };
-
-  // Returns everything but the first entry of the array. Aliased as `tail` and `drop`.
-  // Especially useful on the arguments object. Passing an **n** will return
-  // the rest N values in the array.
-  _.rest = _.tail = _.drop = function(array, n, guard) {
-    return slice.call(array, n == null || guard ? 1 : n);
-  };
-
-  // Trim out all falsy values from an array.
-  _.compact = function(array) {
-    return _.filter(array, _.identity);
-  };
-
-  // Internal implementation of a recursive `flatten` function.
-  var flatten = function(input, shallow, strict, startIndex) {
-    var output = [], idx = 0;
-    for (var i = startIndex || 0, length = getLength(input); i < length; i++) {
-      var value = input[i];
-      if (isArrayLike(value) && (_.isArray(value) || _.isArguments(value))) {
-        //flatten current level of array or arguments object
-        if (!shallow) value = flatten(value, shallow, strict);
-        var j = 0, len = value.length;
-        output.length += len;
-        while (j < len) {
-          output[idx++] = value[j++];
-        }
-      } else if (!strict) {
-        output[idx++] = value;
-      }
-    }
-    return output;
-  };
-
-  // Flatten out an array, either recursively (by default), or just one level.
-  _.flatten = function(array, shallow) {
-    return flatten(array, shallow, false);
-  };
-
-  // Return a version of the array that does not contain the specified value(s).
-  _.without = function(array) {
-    return _.difference(array, slice.call(arguments, 1));
-  };
-
-  // Produce a duplicate-free version of the array. If the array has already
-  // been sorted, you have the option of using a faster algorithm.
-  // Aliased as `unique`.
-  _.uniq = _.unique = function(array, isSorted, iteratee, context) {
-    if (!_.isBoolean(isSorted)) {
-      context = iteratee;
-      iteratee = isSorted;
-      isSorted = false;
-    }
-    if (iteratee != null) iteratee = cb(iteratee, context);
-    var result = [];
-    var seen = [];
-    for (var i = 0, length = getLength(array); i < length; i++) {
-      var value = array[i],
-          computed = iteratee ? iteratee(value, i, array) : value;
-      if (isSorted) {
-        if (!i || seen !== computed) result.push(value);
-        seen = computed;
-      } else if (iteratee) {
-        if (!_.contains(seen, computed)) {
-          seen.push(computed);
-          result.push(value);
-        }
-      } else if (!_.contains(result, value)) {
-        result.push(value);
-      }
-    }
-    return result;
-  };
-
-  // Produce an array that contains the union: each distinct element from all of
-  // the passed-in arrays.
-  _.union = function() {
-    return _.uniq(flatten(arguments, true, true));
-  };
-
-  // Produce an array that contains every item shared between all the
-  // passed-in arrays.
-  _.intersection = function(array) {
-    var result = [];
-    var argsLength = arguments.length;
-    for (var i = 0, length = getLength(array); i < length; i++) {
-      var item = array[i];
-      if (_.contains(result, item)) continue;
-      for (var j = 1; j < argsLength; j++) {
-        if (!_.contains(arguments[j], item)) break;
-      }
-      if (j === argsLength) result.push(item);
-    }
-    return result;
-  };
-
-  // Take the difference between one array and a number of other arrays.
-  // Only the elements present in just the first array will remain.
-  _.difference = function(array) {
-    var rest = flatten(arguments, true, true, 1);
-    return _.filter(array, function(value){
-      return !_.contains(rest, value);
-    });
-  };
-
-  // Zip together multiple lists into a single array -- elements that share
-  // an index go together.
-  _.zip = function() {
-    return _.unzip(arguments);
-  };
-
-  // Complement of _.zip. Unzip accepts an array of arrays and groups
-  // each array's elements on shared indices
-  _.unzip = function(array) {
-    var length = array && _.max(array, getLength).length || 0;
-    var result = Array(length);
-
-    for (var index = 0; index < length; index++) {
-      result[index] = _.pluck(array, index);
-    }
-    return result;
-  };
-
-  // Converts lists into objects. Pass either a single array of `[key, value]`
-  // pairs, or two parallel arrays of the same length -- one of keys, and one of
-  // the corresponding values.
-  _.object = function(list, values) {
-    var result = {};
-    for (var i = 0, length = getLength(list); i < length; i++) {
-      if (values) {
-        result[list[i]] = values[i];
-      } else {
-        result[list[i][0]] = list[i][1];
-      }
-    }
-    return result;
-  };
-
-  // Generator function to create the findIndex and findLastIndex functions
-  function createPredicateIndexFinder(dir) {
-    return function(array, predicate, context) {
-      predicate = cb(predicate, context);
-      var length = getLength(array);
-      var index = dir > 0 ? 0 : length - 1;
-      for (; index >= 0 && index < length; index += dir) {
-        if (predicate(array[index], index, array)) return index;
-      }
-      return -1;
-    };
-  }
-
-  // Returns the first index on an array-like that passes a predicate test
-  _.findIndex = createPredicateIndexFinder(1);
-  _.findLastIndex = createPredicateIndexFinder(-1);
-
-  // Use a comparator function to figure out the smallest index at which
-  // an object should be inserted so as to maintain order. Uses binary search.
-  _.sortedIndex = function(array, obj, iteratee, context) {
-    iteratee = cb(iteratee, context, 1);
-    var value = iteratee(obj);
-    var low = 0, high = getLength(array);
-    while (low < high) {
-      var mid = Math.floor((low + high) / 2);
-      if (iteratee(array[mid]) < value) low = mid + 1; else high = mid;
-    }
-    return low;
-  };
-
-  // Generator function to create the indexOf and lastIndexOf functions
-  function createIndexFinder(dir, predicateFind, sortedIndex) {
-    return function(array, item, idx) {
-      var i = 0, length = getLength(array);
-      if (typeof idx == 'number') {
-        if (dir > 0) {
-            i = idx >= 0 ? idx : Math.max(idx + length, i);
-        } else {
-            length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1;
-        }
-      } else if (sortedIndex && idx && length) {
-        idx = sortedIndex(array, item);
-        return array[idx] === item ? idx : -1;
-      }
-      if (item !== item) {
-        idx = predicateFind(slice.call(array, i, length), _.isNaN);
-        return idx >= 0 ? idx + i : -1;
-      }
-      for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) {
-        if (array[idx] === item) return idx;
-      }
-      return -1;
-    };
-  }
-
-  // Return the position of the first occurrence of an item in an array,
-  // or -1 if the item is not included in the array.
-  // If the array is large and already in sort order, pass `true`
-  // for **isSorted** to use binary search.
-  _.indexOf = createIndexFinder(1, _.findIndex, _.sortedIndex);
-  _.lastIndexOf = createIndexFinder(-1, _.findLastIndex);
-
-  // Generate an integer Array containing an arithmetic progression. A port of
-  // the native Python `range()` function. See
-  // [the Python documentation](http://docs.python.org/library/functions.html#range).
-  _.range = function(start, stop, step) {
-    if (stop == null) {
-      stop = start || 0;
-      start = 0;
-    }
-    step = step || 1;
-
-    var length = Math.max(Math.ceil((stop - start) / step), 0);
-    var range = Array(length);
-
-    for (var idx = 0; idx < length; idx++, start += step) {
-      range[idx] = start;
-    }
-
-    return range;
-  };
-
-  // Function (ahem) Functions
-  // ------------------
-
-  // Determines whether to execute a function as a constructor
-  // or a normal function with the provided arguments
-  var executeBound = function(sourceFunc, boundFunc, context, callingContext, args) {
-    if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args);
-    var self = baseCreate(sourceFunc.prototype);
-    var result = sourceFunc.apply(self, args);
-    if (_.isObject(result)) return result;
-    return self;
-  };
-
-  // Create a function bound to a given object (assigning `this`, and arguments,
-  // optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if
-  // available.
-  _.bind = function(func, context) {
-    if (nativeBind && func.bind === nativeBind) return nativeBind.apply(func, slice.call(arguments, 1));
-    if (!_.isFunction(func)) throw new TypeError('Bind must be called on a function');
-    var args = slice.call(arguments, 2);
-    var bound = function() {
-      return executeBound(func, bound, context, this, args.concat(slice.call(arguments)));
-    };
-    return bound;
-  };
-
-  // Partially apply a function by creating a version that has had some of its
-  // arguments pre-filled, without changing its dynamic `this` context. _ acts
-  // as a placeholder, allowing any combination of arguments to be pre-filled.
-  _.partial = function(func) {
-    var boundArgs = slice.call(arguments, 1);
-    var bound = function() {
-      var position = 0, length = boundArgs.length;
-      var args = Array(length);
-      for (var i = 0; i < length; i++) {
-        args[i] = boundArgs[i] === _ ? arguments[position++] : boundArgs[i];
-      }
-      while (position < arguments.length) args.push(arguments[position++]);
-      return executeBound(func, bound, this, this, args);
-    };
-    return bound;
-  };
-
-  // Bind a number of an object's methods to that object. Remaining arguments
-  // are the method names to be bound. Useful for ensuring that all callbacks
-  // defined on an object belong to it.
-  _.bindAll = function(obj) {
-    var i, length = arguments.length, key;
-    if (length <= 1) throw new Error('bindAll must be passed function names');
-    for (i = 1; i < length; i++) {
-      key = arguments[i];
-      obj[key] = _.bind(obj[key], obj);
-    }
-    return obj;
-  };
-
-  // Memoize an expensive function by storing its results.
-  _.memoize = function(func, hasher) {
-    var memoize = function(key) {
-      var cache = memoize.cache;
-      var address = '' + (hasher ? hasher.apply(this, arguments) : key);
-      if (!_.has(cache, address)) cache[address] = func.apply(this, arguments);
-      return cache[address];
-    };
-    memoize.cache = {};
-    return memoize;
-  };
-
-  // Delays a function for the given number of milliseconds, and then calls
-  // it with the arguments supplied.
-  _.delay = function(func, wait) {
-    var args = slice.call(arguments, 2);
-    return setTimeout(function(){
-      return func.apply(null, args);
-    }, wait);
-  };
-
-  // Defers a function, scheduling it to run after the current call stack has
-  // cleared.
-  _.defer = _.partial(_.delay, _, 1);
-
-  // Returns a function, that, when invoked, will only be triggered at most once
-  // during a given window of time. Normally, the throttled function will run
-  // as much as it can, without ever going more than once per `wait` duration;
-  // but if you'd like to disable the execution on the leading edge, pass
-  // `{leading: false}`. To disable execution on the trailing edge, ditto.
-  _.throttle = function(func, wait, options) {
-    var context, args, result;
-    var timeout = null;
-    var previous = 0;
-    if (!options) options = {};
-    var later = function() {
-      previous = options.leading === false ? 0 : _.now();
-      timeout = null;
-      result = func.apply(context, args);
-      if (!timeout) context = args = null;
-    };
-    return function() {
-      var now = _.now();
-      if (!previous && options.leading === false) previous = now;
-      var remaining = wait - (now - previous);
-      context = this;
-      args = arguments;
-      if (remaining <= 0 || remaining > wait) {
-        if (timeout) {
-          clearTimeout(timeout);
-          timeout = null;
-        }
-        previous = now;
-        result = func.apply(context, args);
-        if (!timeout) context = args = null;
-      } else if (!timeout && options.trailing !== false) {
-        timeout = setTimeout(later, remaining);
-      }
-      return result;
-    };
-  };
-
-  // Returns a function, that, as long as it continues to be invoked, will not
-  // be triggered. The function will be called after it stops being called for
-  // N milliseconds. If `immediate` is passed, trigger the function on the
-  // leading edge, instead of the trailing.
-  _.debounce = function(func, wait, immediate) {
-    var timeout, args, context, timestamp, result;
-
-    var later = function() {
-      var last = _.now() - timestamp;
-
-      if (last < wait && last >= 0) {
-        timeout = setTimeout(later, wait - last);
-      } else {
-        timeout = null;
-        if (!immediate) {
-          result = func.apply(context, args);
-          if (!timeout) context = args = null;
-        }
-      }
-    };
-
-    return function() {
-      context = this;
-      args = arguments;
-      timestamp = _.now();
-      var callNow = immediate && !timeout;
-      if (!timeout) timeout = setTimeout(later, wait);
-      if (callNow) {
-        result = func.apply(context, args);
-        context = args = null;
-      }
-
-      return result;
-    };
-  };
-
-  // Returns the first function passed as an argument to the second,
-  // allowing you to adjust arguments, run code before and after, and
-  // conditionally execute the original function.
-  _.wrap = function(func, wrapper) {
-    return _.partial(wrapper, func);
-  };
-
-  // Returns a negated version of the passed-in predicate.
-  _.negate = function(predicate) {
-    return function() {
-      return !predicate.apply(this, arguments);
-    };
-  };
-
-  // Returns a function that is the composition of a list of functions, each
-  // consuming the return value of the function that follows.
-  _.compose = function() {
-    var args = arguments;
-    var start = args.length - 1;
-    return function() {
-      var i = start;
-      var result = args[start].apply(this, arguments);
-      while (i--) result = args[i].call(this, result);
-      return result;
-    };
-  };
-
-  // Returns a function that will only be executed on and after the Nth call.
-  _.after = function(times, func) {
-    return function() {
-      if (--times < 1) {
-        return func.apply(this, arguments);
-      }
-    };
-  };
-
-  // Returns a function that will only be executed up to (but not including) the Nth call.
-  _.before = function(times, func) {
-    var memo;
-    return function() {
-      if (--times > 0) {
-        memo = func.apply(this, arguments);
-      }
-      if (times <= 1) func = null;
-      return memo;
-    };
-  };
-
-  // Returns a function that will be executed at most one time, no matter how
-  // often you call it. Useful for lazy initialization.
-  _.once = _.partial(_.before, 2);
-
-  // Object Functions
-  // ----------------
-
-  // Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed.
-  var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString');
-  var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString',
-                      'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'];
-
-  function collectNonEnumProps(obj, keys) {
-    var nonEnumIdx = nonEnumerableProps.length;
-    var constructor = obj.constructor;
-    var proto = (_.isFunction(constructor) && constructor.prototype) || ObjProto;
-
-    // Constructor is a special case.
-    var prop = 'constructor';
-    if (_.has(obj, prop) && !_.contains(keys, prop)) keys.push(prop);
-
-    while (nonEnumIdx--) {
-      prop = nonEnumerableProps[nonEnumIdx];
-      if (prop in obj && obj[prop] !== proto[prop] && !_.contains(keys, prop)) {
-        keys.push(prop);
-      }
-    }
-  }
-
-  // Retrieve the names of an object's own properties.
-  // Delegates to **ECMAScript 5**'s native `Object.keys`
-  _.keys = function(obj) {
-    if (!_.isObject(obj)) return [];
-    if (nativeKeys) return nativeKeys(obj);
-    var keys = [];
-    for (var key in obj) if (_.has(obj, key)) keys.push(key);
-    // Ahem, IE < 9.
-    if (hasEnumBug) collectNonEnumProps(obj, keys);
-    return keys;
-  };
-
-  // Retrieve all the property names of an object.
-  _.allKeys = function(obj) {
-    if (!_.isObject(obj)) return [];
-    var keys = [];
-    for (var key in obj) keys.push(key);
-    // Ahem, IE < 9.
-    if (hasEnumBug) collectNonEnumProps(obj, keys);
-    return keys;
-  };
-
-  // Retrieve the values of an object's properties.
-  _.values = function(obj) {
-    var keys = _.keys(obj);
-    var length = keys.length;
-    var values = Array(length);
-    for (var i = 0; i < length; i++) {
-      values[i] = obj[keys[i]];
-    }
-    return values;
-  };
-
-  // Returns the results of applying the iteratee to each element of the object
-  // In contrast to _.map it returns an object
-  _.mapObject = function(obj, iteratee, context) {
-    iteratee = cb(iteratee, context);
-    var keys =  _.keys(obj),
-          length = keys.length,
-          results = {},
-          currentKey;
-      for (var index = 0; index < length; index++) {
-        currentKey = keys[index];
-        results[currentKey] = iteratee(obj[currentKey], currentKey, obj);
-      }
-      return results;
-  };
-
-  // Convert an object into a list of `[key, value]` pairs.
-  _.pairs = function(obj) {
-    var keys = _.keys(obj);
-    var length = keys.length;
-    var pairs = Array(length);
-    for (var i = 0; i < length; i++) {
-      pairs[i] = [keys[i], obj[keys[i]]];
-    }
-    return pairs;
-  };
-
-  // Invert the keys and values of an object. The values must be serializable.
-  _.invert = function(obj) {
-    var result = {};
-    var keys = _.keys(obj);
-    for (var i = 0, length = keys.length; i < length; i++) {
-      result[obj[keys[i]]] = keys[i];
-    }
-    return result;
-  };
-
-  // Return a sorted list of the function names available on the object.
-  // Aliased as `methods`
-  _.functions = _.methods = function(obj) {
-    var names = [];
-    for (var key in obj) {
-      if (_.isFunction(obj[key])) names.push(key);
-    }
-    return names.sort();
-  };
-
-  // Extend a given object with all the properties in passed-in object(s).
-  _.extend = createAssigner(_.allKeys);
-
-  // Assigns a given object with all the own properties in the passed-in object(s)
-  // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)
-  _.extendOwn = _.assign = createAssigner(_.keys);
-
-  // Returns the first key on an object that passes a predicate test
-  _.findKey = function(obj, predicate, context) {
-    predicate = cb(predicate, context);
-    var keys = _.keys(obj), key;
-    for (var i = 0, length = keys.length; i < length; i++) {
-      key = keys[i];
-      if (predicate(obj[key], key, obj)) return key;
-    }
-  };
-
-  // Return a copy of the object only containing the whitelisted properties.
-  _.pick = function(object, oiteratee, context) {
-    var result = {}, obj = object, iteratee, keys;
-    if (obj == null) return result;
-    if (_.isFunction(oiteratee)) {
-      keys = _.allKeys(obj);
-      iteratee = optimizeCb(oiteratee, context);
-    } else {
-      keys = flatten(arguments, false, false, 1);
-      iteratee = function(value, key, obj) { return key in obj; };
-      obj = Object(obj);
-    }
-    for (var i = 0, length = keys.length; i < length; i++) {
-      var key = keys[i];
-      var value = obj[key];
-      if (iteratee(value, key, obj)) result[key] = value;
-    }
-    return result;
-  };
-
-   // Return a copy of the object without the blacklisted properties.
-  _.omit = function(obj, iteratee, context) {
-    if (_.isFunction(iteratee)) {
-      iteratee = _.negate(iteratee);
-    } else {
-      var keys = _.map(flatten(arguments, false, false, 1), String);
-      iteratee = function(value, key) {
-        return !_.contains(keys, key);
-      };
-    }
-    return _.pick(obj, iteratee, context);
-  };
-
-  // Fill in a given object with default properties.
-  _.defaults = createAssigner(_.allKeys, true);
-
-  // Creates an object that inherits from the given prototype object.
-  // If additional properties are provided then they will be added to the
-  // created object.
-  _.create = function(prototype, props) {
-    var result = baseCreate(prototype);
-    if (props) _.extendOwn(result, props);
-    return result;
-  };
-
-  // Create a (shallow-cloned) duplicate of an object.
-  _.clone = function(obj) {
-    if (!_.isObject(obj)) return obj;
-    return _.isArray(obj) ? obj.slice() : _.extend({}, obj);
-  };
-
-  // Invokes interceptor with the obj, and then returns obj.
-  // The primary purpose of this method is to "tap into" a method chain, in
-  // order to perform operations on intermediate results within the chain.
-  _.tap = function(obj, interceptor) {
-    interceptor(obj);
-    return obj;
-  };
-
-  // Returns whether an object has a given set of `key:value` pairs.
-  _.isMatch = function(object, attrs) {
-    var keys = _.keys(attrs), length = keys.length;
-    if (object == null) return !length;
-    var obj = Object(object);
-    for (var i = 0; i < length; i++) {
-      var key = keys[i];
-      if (attrs[key] !== obj[key] || !(key in obj)) return false;
-    }
-    return true;
-  };
-
-
-  // Internal recursive comparison function for `isEqual`.
-  var eq = function(a, b, aStack, bStack) {
-    // Identical objects are equal. `0 === -0`, but they aren't identical.
-    // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal).
-    if (a === b) return a !== 0 || 1 / a === 1 / b;
-    // A strict comparison is necessary because `null == undefined`.
-    if (a == null || b == null) return a === b;
-    // Unwrap any wrapped objects.
-    if (a instanceof _) a = a._wrapped;
-    if (b instanceof _) b = b._wrapped;
-    // Compare `[[Class]]` names.
-    var className = toString.call(a);
-    if (className !== toString.call(b)) return false;
-    switch (className) {
-      // Strings, numbers, regular expressions, dates, and booleans are compared by value.
-      case '[object RegExp]':
-      // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')
-      case '[object String]':
-        // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is
-        // equivalent to `new String("5")`.
-        return '' + a === '' + b;
-      case '[object Number]':
-        // `NaN`s are equivalent, but non-reflexive.
-        // Object(NaN) is equivalent to NaN
-        if (+a !== +a) return +b !== +b;
-        // An `egal` comparison is performed for other numeric values.
-        return +a === 0 ? 1 / +a === 1 / b : +a === +b;
-      case '[object Date]':
-      case '[object Boolean]':
-        // Coerce dates and booleans to numeric primitive values. Dates are compared by their
-        // millisecond representations. Note that invalid dates with millisecond representations
-        // of `NaN` are not equivalent.
-        return +a === +b;
-    }
-
-    var areArrays = className === '[object Array]';
-    if (!areArrays) {
-      if (typeof a != 'object' || typeof b != 'object') return false;
-
-      // Objects with different constructors are not equivalent, but `Object`s or `Array`s
-      // from different frames are.
-      var aCtor = a.constructor, bCtor = b.constructor;
-      if (aCtor !== bCtor && !(_.isFunction(aCtor) && aCtor instanceof aCtor &&
-                               _.isFunction(bCtor) && bCtor instanceof bCtor)
-                          && ('constructor' in a && 'constructor' in b)) {
-        return false;
-      }
-    }
-    // Assume equality for cyclic structures. The algorithm for detecting cyclic
-    // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.
-
-    // Initializing stack of traversed objects.
-    // It's done here since we only need them for objects and arrays comparison.
-    aStack = aStack || [];
-    bStack = bStack || [];
-    var length = aStack.length;
-    while (length--) {
-      // Linear search. Performance is inversely proportional to the number of
-      // unique nested structures.
-      if (aStack[length] === a) return bStack[length] === b;
-    }
-
-    // Add the first object to the stack of traversed objects.
-    aStack.push(a);
-    bStack.push(b);
-
-    // Recursively compare objects and arrays.
-    if (areArrays) {
-      // Compare array lengths to determine if a deep comparison is necessary.
-      length = a.length;
-      if (length !== b.length) return false;
-      // Deep compare the contents, ignoring non-numeric properties.
-      while (length--) {
-        if (!eq(a[length], b[length], aStack, bStack)) return false;
-      }
-    } else {
-      // Deep compare objects.
-      var keys = _.keys(a), key;
-      length = keys.length;
-      // Ensure that both objects contain the same number of properties before comparing deep equality.
-      if (_.keys(b).length !== length) return false;
-      while (length--) {
-        // Deep compare each member
-        key = keys[length];
-        if (!(_.has(b, key) && eq(a[key], b[key], aStack, bStack))) return false;
-      }
-    }
-    // Remove the first object from the stack of traversed objects.
-    aStack.pop();
-    bStack.pop();
-    return true;
-  };
-
-  // Perform a deep comparison to check if two objects are equal.
-  _.isEqual = function(a, b) {
-    return eq(a, b);
-  };
-
-  // Is a given array, string, or object empty?
-  // An "empty" object has no enumerable own-properties.
-  _.isEmpty = function(obj) {
-    if (obj == null) return true;
-    if (isArrayLike(obj) && (_.isArray(obj) || _.isString(obj) || _.isArguments(obj))) return obj.length === 0;
-    return _.keys(obj).length === 0;
-  };
-
-  // Is a given value a DOM element?
-  _.isElement = function(obj) {
-    return !!(obj && obj.nodeType === 1);
-  };
-
-  // Is a given value an array?
-  // Delegates to ECMA5's native Array.isArray
-  _.isArray = nativeIsArray || function(obj) {
-    return toString.call(obj) === '[object Array]';
-  };
-
-  // Is a given variable an object?
-  _.isObject = function(obj) {
-    var type = typeof obj;
-    return type === 'function' || type === 'object' && !!obj;
-  };
-
-  // Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp, isError.
-  _.each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp', 'Error'], function(name) {
-    _['is' + name] = function(obj) {
-      return toString.call(obj) === '[object ' + name + ']';
-    };
-  });
-
-  // Define a fallback version of the method in browsers (ahem, IE < 9), where
-  // there isn't any inspectable "Arguments" type.
-  if (!_.isArguments(arguments)) {
-    _.isArguments = function(obj) {
-      return _.has(obj, 'callee');
-    };
-  }
-
-  // Optimize `isFunction` if appropriate. Work around some typeof bugs in old v8,
-  // IE 11 (#1621), and in Safari 8 (#1929).
-  if (typeof /./ != 'function' && typeof Int8Array != 'object') {
-    _.isFunction = function(obj) {
-      return typeof obj == 'function' || false;
-    };
-  }
-
-  // Is a given object a finite number?
-  _.isFinite = function(obj) {
-    return isFinite(obj) && !isNaN(parseFloat(obj));
-  };
-
-  // Is the given value `NaN`? (NaN is the only number which does not equal itself).
-  _.isNaN = function(obj) {
-    return _.isNumber(obj) && obj !== +obj;
-  };
-
-  // Is a given value a boolean?
-  _.isBoolean = function(obj) {
-    return obj === true || obj === false || toString.call(obj) === '[object Boolean]';
-  };
-
-  // Is a given value equal to null?
-  _.isNull = function(obj) {
-    return obj === null;
-  };
-
-  // Is a given variable undefined?
-  _.isUndefined = function(obj) {
-    return obj === void 0;
-  };
-
-  // Shortcut function for checking if an object has a given property directly
-  // on itself (in other words, not on a prototype).
-  _.has = function(obj, key) {
-    return obj != null && hasOwnProperty.call(obj, key);
-  };
-
-  // Utility Functions
-  // -----------------
-
-  // Run Underscore.js in *noConflict* mode, returning the `_` variable to its
-  // previous owner. Returns a reference to the Underscore object.
-  _.noConflict = function() {
-    root._ = previousUnderscore;
-    return this;
-  };
-
-  // Keep the identity function around for default iteratees.
-  _.identity = function(value) {
-    return value;
-  };
-
-  // Predicate-generating functions. Often useful outside of Underscore.
-  _.constant = function(value) {
-    return function() {
-      return value;
-    };
-  };
-
-  _.noop = function(){};
-
-  _.property = property;
-
-  // Generates a function for a given object that returns a given property.
-  _.propertyOf = function(obj) {
-    return obj == null ? function(){} : function(key) {
-      return obj[key];
-    };
-  };
-
-  // Returns a predicate for checking whether an object has a given set of
-  // `key:value` pairs.
-  _.matcher = _.matches = function(attrs) {
-    attrs = _.extendOwn({}, attrs);
-    return function(obj) {
-      return _.isMatch(obj, attrs);
-    };
-  };
-
-  // Run a function **n** times.
-  _.times = function(n, iteratee, context) {
-    var accum = Array(Math.max(0, n));
-    iteratee = optimizeCb(iteratee, context, 1);
-    for (var i = 0; i < n; i++) accum[i] = iteratee(i);
-    return accum;
-  };
-
-  // Return a random integer between min and max (inclusive).
-  _.random = function(min, max) {
-    if (max == null) {
-      max = min;
-      min = 0;
-    }
-    return min + Math.floor(Math.random() * (max - min + 1));
-  };
-
-  // A (possibly faster) way to get the current timestamp as an integer.
-  _.now = Date.now || function() {
-    return new Date().getTime();
-  };
-
-   // List of HTML entities for escaping.
-  var escapeMap = {
-    '&': '&amp;',
-    '<': '&lt;',
-    '>': '&gt;',
-    '"': '&quot;',
-    "'": '&#x27;',
-    '`': '&#x60;'
-  };
-  var unescapeMap = _.invert(escapeMap);
-
-  // Functions for escaping and unescaping strings to/from HTML interpolation.
-  var createEscaper = function(map) {
-    var escaper = function(match) {
-      return map[match];
-    };
-    // Regexes for identifying a key that needs to be escaped
-    var source = '(?:' + _.keys(map).join('|') + ')';
-    var testRegexp = RegExp(source);
-    var replaceRegexp = RegExp(source, 'g');
-    return function(string) {
-      string = string == null ? '' : '' + string;
-      return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;
-    };
-  };
-  _.escape = createEscaper(escapeMap);
-  _.unescape = createEscaper(unescapeMap);
-
-  // If the value of the named `property` is a function then invoke it with the
-  // `object` as context; otherwise, return it.
-  _.result = function(object, property, fallback) {
-    var value = object == null ? void 0 : object[property];
-    if (value === void 0) {
-      value = fallback;
-    }
-    return _.isFunction(value) ? value.call(object) : value;
-  };
-
-  // Generate a unique integer id (unique within the entire client session).
-  // Useful for temporary DOM ids.
-  var idCounter = 0;
-  _.uniqueId = function(prefix) {
-    var id = ++idCounter + '';
-    return prefix ? prefix + id : id;
-  };
-
-  // By default, Underscore uses ERB-style template delimiters, change the
-  // following template settings to use alternative delimiters.
-  _.templateSettings = {
-    evaluate    : /<%([\s\S]+?)%>/g,
-    interpolate : /<%=([\s\S]+?)%>/g,
-    escape      : /<%-([\s\S]+?)%>/g
-  };
-
-  // When customizing `templateSettings`, if you don't want to define an
-  // interpolation, evaluation or escaping regex, we need one that is
-  // guaranteed not to match.
-  var noMatch = /(.)^/;
-
-  // Certain characters need to be escaped so that they can be put into a
-  // string literal.
-  var escapes = {
-    "'":      "'",
-    '\\':     '\\',
-    '\r':     'r',
-    '\n':     'n',
-    '\u2028': 'u2028',
-    '\u2029': 'u2029'
-  };
-
-  var escaper = /\\|'|\r|\n|\u2028|\u2029/g;
-
-  var escapeChar = function(match) {
-    return '\\' + escapes[match];
-  };
-
-  // JavaScript micro-templating, similar to John Resig's implementation.
-  // Underscore templating handles arbitrary delimiters, preserves whitespace,
-  // and correctly escapes quotes within interpolated code.
-  // NB: `oldSettings` only exists for backwards compatibility.
-  _.template = function(text, settings, oldSettings) {
-    if (!settings && oldSettings) settings = oldSettings;
-    settings = _.defaults({}, settings, _.templateSettings);
-
-    // Combine delimiters into one regular expression via alternation.
-    var matcher = RegExp([
-      (settings.escape || noMatch).source,
-      (settings.interpolate || noMatch).source,
-      (settings.evaluate || noMatch).source
-    ].join('|') + '|$', 'g');
-
-    // Compile the template source, escaping string literals appropriately.
-    var index = 0;
-    var source = "__p+='";
-    text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {
-      source += text.slice(index, offset).replace(escaper, escapeChar);
-      index = offset + match.length;
-
-      if (escape) {
-        source += "'+\n((__t=(" + escape + "))==null?'':_.escape(__t))+\n'";
-      } else if (interpolate) {
-        source += "'+\n((__t=(" + interpolate + "))==null?'':__t)+\n'";
-      } else if (evaluate) {
-        source += "';\n" + evaluate + "\n__p+='";
-      }
-
-      // Adobe VMs need the match returned to produce the correct offest.
-      return match;
-    });
-    source += "';\n";
-
-    // If a variable is not specified, place data values in local scope.
-    if (!settings.variable) source = 'with(obj||{}){\n' + source + '}\n';
-
-    source = "var __t,__p='',__j=Array.prototype.join," +
-      "print=function(){__p+=__j.call(arguments,'');};\n" +
-      source + 'return __p;\n';
-
-    try {
-      var render = new Function(settings.variable || 'obj', '_', source);
-    } catch (e) {
-      e.source = source;
-      throw e;
-    }
-
-    var template = function(data) {
-      return render.call(this, data, _);
-    };
-
-    // Provide the compiled source as a convenience for precompilation.
-    var argument = settings.variable || 'obj';
-    template.source = 'function(' + argument + '){\n' + source + '}';
-
-    return template;
-  };
-
-  // Add a "chain" function. Start chaining a wrapped Underscore object.
-  _.chain = function(obj) {
-    var instance = _(obj);
-    instance._chain = true;
-    return instance;
-  };
-
-  // OOP
-  // ---------------
-  // If Underscore is called as a function, it returns a wrapped object that
-  // can be used OO-style. This wrapper holds altered versions of all the
-  // underscore functions. Wrapped objects may be chained.
-
-  // Helper function to continue chaining intermediate results.
-  var result = function(instance, obj) {
-    return instance._chain ? _(obj).chain() : obj;
-  };
-
-  // Add your own custom functions to the Underscore object.
-  _.mixin = function(obj) {
-    _.each(_.functions(obj), function(name) {
-      var func = _[name] = obj[name];
-      _.prototype[name] = function() {
-        var args = [this._wrapped];
-        push.apply(args, arguments);
-        return result(this, func.apply(_, args));
-      };
-    });
-  };
-
-  // Add all of the Underscore functions to the wrapper object.
-  _.mixin(_);
-
-  // Add all mutator Array functions to the wrapper.
-  _.each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {
-    var method = ArrayProto[name];
-    _.prototype[name] = function() {
-      var obj = this._wrapped;
-      method.apply(obj, arguments);
-      if ((name === 'shift' || name === 'splice') && obj.length === 0) delete obj[0];
-      return result(this, obj);
-    };
-  });
-
-  // Add all accessor Array functions to the wrapper.
-  _.each(['concat', 'join', 'slice'], function(name) {
-    var method = ArrayProto[name];
-    _.prototype[name] = function() {
-      return result(this, method.apply(this._wrapped, arguments));
-    };
-  });
-
-  // Extracts the result from a wrapped and chained object.
-  _.prototype.value = function() {
-    return this._wrapped;
-  };
-
-  // Provide unwrapping proxy for some methods used in engine operations
-  // such as arithmetic and JSON stringification.
-  _.prototype.valueOf = _.prototype.toJSON = _.prototype.value;
-
-  _.prototype.toString = function() {
-    return '' + this._wrapped;
-  };
-
-  // AMD registration happens at the end for compatibility with AMD loaders
-  // that may not enforce next-turn semantics on modules. Even though general
-  // practice for AMD registration is to be anonymous, underscore registers
-  // as a named module because, like jQuery, it is a base library that is
-  // popular enough to be bundled in a third party lib, but not be part of
-  // an AMD load request. Those cases could generate an error when an
-  // anonymous define() is called outside of a loader request.
-  if (typeof define === 'function' && define.amd) {
-    define('underscore', [], function() {
-      return _;
-    });
-  }
-}.call(this));
diff --git a/bin/node_modules/unorm/LICENSE.md b/bin/node_modules/unorm/LICENSE.md
deleted file mode 100644
index ed1d4f3..0000000
--- a/bin/node_modules/unorm/LICENSE.md
+++ /dev/null
@@ -1,42 +0,0 @@
-The software dual licensed under the MIT and GPL licenses. MIT license:
-
-    Copyright (c) 2008-2013 Matsuza <matsuza@gmail.com>, Bjarke Walling <bwp@bwp.dk>
-    
-    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.
-
-GPL notice (please read the [full GPL license] online):
-
-    Copyright (C) 2008-2013 Matsuza <matsuza@gmail.com>, Bjarke Walling <bwp@bwp.dk>
-
-    This program is free software; you can redistribute it and/or
-    modify it under the terms of the GNU General Public License
-    as published by the Free Software Foundation; either version 2
-    of the License, or (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
-
-
-[full GPL license]: http://www.gnu.org/licenses/gpl-2.0-standalone.html
diff --git a/bin/node_modules/unorm/README.md b/bin/node_modules/unorm/README.md
deleted file mode 100644
index 6ff6420..0000000
--- a/bin/node_modules/unorm/README.md
+++ /dev/null
@@ -1,118 +0,0 @@
-This is [Unicode Normalizer] in a Common JS module. I'm not affiliated with Matsuza, the original author of Unicode Normalizer.
-
-[![Build Status](https://travis-ci.org/walling/unorm.png?branch=master)](https://travis-ci.org/walling/unorm)
-
-
-Installation
-------------
-
-```bash
-npm install unorm
-```
-
-Polyfill
---------
-
-You can use this module as a polyfill for [String.prototype.normalize], for example:
-
-```javascript
-console.log('æøåäüö'.normalize('NFKD'));
-```
-
-The module uses some [EcmaScript 5](http://kangax.github.io/es5-compat-table/) features. Other browsers should use a compability shim, e.g. [es5-shim](https://github.com/kriskowal/es5-shim).
-
-Functions
----------
-
-This module exports four functions: `nfc`, `nfd`, `nfkc`, and `nfkd`; one for each Unicode normalization. In the browser the functions are exported in the `unorm` global. In CommonJS environments you just require the module. Functions:
-
- *  `unorm.nfd(str)` – Canonical Decomposition
- *  `unorm.nfc(str)` – Canonical Decomposition, followed by Canonical Composition
- *  `unorm.nfkd(str)` – Compatibility Decomposition
- *  `unorm.nfkc(str)` – Compatibility Decomposition, followed by Canonical Composition
-
-
-Node.JS example
----------------
-
-For a longer example, see `examples` directory.
-
-```javascript
-var unorm = require('unorm');
-
-var text =
-  'The \u212B symbol invented by A. J. \u00C5ngstr\u00F6m ' +
-  '(1814, L\u00F6gd\u00F6, \u2013 1874) denotes the length ' +
-  '10\u207B\u00B9\u2070 m.';
-
-var combining = /[\u0300-\u036F]/g; // Use XRegExp('\\p{M}', 'g'); see example.js.
-
-console.log('Regular:  ' + text);
-console.log('NFC:      ' + unorm.nfc(text));
-console.log('NFD:      ' + unorm.nfd(text));
-console.log('NFKC:     ' + unorm.nfkc(text));
-console.log('NFKD: *   ' + unorm.nfkd(text).replace(combining, ''));
-console.log(' * = Combining characters removed from decomposed form.');
-```
-
-
-Road map
---------
-
-As of November 2013. Longer term:
-
-- Look at possible optimizations (speed primarely, module size secondarily)
-- Adding functions to quick check normalizations: `is_nfc`, `is_nfd`, etc.
-
-
-Contributers
-------------
-
- - **Oleg Grenrus** is helping to maintain this library. He cleaned up the code base, fixed JSHint errors, created a test suite and updated the normalization data to Unicode 6.3.
-
-
-Development notes
------------------
-
-- [Unicode normalization forms report](http://www.unicode.org/reports/tr15/)
-- Unicode data can be found from http://www.unicode.org/Public/UCD/latest/ucd
-
-To generate new unicode data, run:
-```sh
-cd src/data/src
-javac UnormNormalizerBuilder.java
-java UnormNormalizerBuilder
-```
-produced `unormdata.js` contains needed table
-
-Execute `node benchmark/benchmark.js` to run simple benchmarks, if you do any changes which may affect performance.
-
-License
--------
-
-This project includes the software package **Unicode Normalizer 1.0.0**. The
-software dual licensed under the MIT and GPL licenses. Here is the MIT license:
-
-    Copyright (c) 2008-2013 Matsuza <matsuza@gmail.com>, Bjarke Walling <bwp@bwp.dk>
-
-    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.
-
-
-[Unicode Normalizer]: http://coderepos.org/share/browser/lang/javascript/UnicodeNormalizer
-[String.prototype.normalize]: http://people.mozilla.org/~jorendorff/es6-draft.html#sec-15.5.3.26
diff --git a/bin/node_modules/unorm/lib/unorm.js b/bin/node_modules/unorm/lib/unorm.js
deleted file mode 100644
index 92d3699..0000000
--- a/bin/node_modules/unorm/lib/unorm.js
+++ /dev/null
@@ -1,442 +0,0 @@
-(function (root) {
-   "use strict";
-
-/***** unorm.js *****/
-
-/*
- * UnicodeNormalizer 1.0.0
- * Copyright (c) 2008 Matsuza
- * Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
- * $Date: 2008-06-05 16:44:17 +0200 (Thu, 05 Jun 2008) $
- * $Rev: 13309 $
- */
-
-   var DEFAULT_FEATURE = [null, 0, {}];
-   var CACHE_THRESHOLD = 10;
-   var SBase = 0xAC00, LBase = 0x1100, VBase = 0x1161, TBase = 0x11A7, LCount = 19, VCount = 21, TCount = 28;
-   var NCount = VCount * TCount; // 588
-   var SCount = LCount * NCount; // 11172
-
-   var UChar = function(cp, feature){
-      this.codepoint = cp;
-      this.feature = feature;
-   };
-
-   // Strategies
-   var cache = {};
-   var cacheCounter = [];
-   for (var i = 0; i <= 0xFF; ++i){
-      cacheCounter[i] = 0;
-   }
-
-   function fromCache(next, cp, needFeature){
-      var ret = cache[cp];
-      if(!ret){
-         ret = next(cp, needFeature);
-         if(!!ret.feature && ++cacheCounter[(cp >> 8) & 0xFF] > CACHE_THRESHOLD){
-            cache[cp] = ret;
-         }
-      }
-      return ret;
-   }
-
-   function fromData(next, cp, needFeature){
-      var hash = cp & 0xFF00;
-      var dunit = UChar.udata[hash] || {};
-      var f = dunit[cp];
-      return f ? new UChar(cp, f) : new UChar(cp, DEFAULT_FEATURE);
-   }
-   function fromCpOnly(next, cp, needFeature){
-      return !!needFeature ? next(cp, needFeature) : new UChar(cp, null);
-   }
-   function fromRuleBasedJamo(next, cp, needFeature){
-      var j;
-      if(cp < LBase || (LBase + LCount <= cp && cp < SBase) || (SBase + SCount < cp)){
-         return next(cp, needFeature);
-      }
-      if(LBase <= cp && cp < LBase + LCount){
-         var c = {};
-         var base = (cp - LBase) * VCount;
-         for (j = 0; j < VCount; ++j){
-            c[VBase + j] = SBase + TCount * (j + base);
-         }
-         return new UChar(cp, [,,c]);
-      }
-
-      var SIndex = cp - SBase;
-      var TIndex = SIndex % TCount;
-      var feature = [];
-      if(TIndex !== 0){
-         feature[0] = [SBase + SIndex - TIndex, TBase + TIndex];
-      } else {
-         feature[0] = [LBase + Math.floor(SIndex / NCount), VBase + Math.floor((SIndex % NCount) / TCount)];
-         feature[2] = {};
-         for (j = 1; j < TCount; ++j){
-            feature[2][TBase + j] = cp + j;
-         }
-      }
-      return new UChar(cp, feature);
-   }
-   function fromCpFilter(next, cp, needFeature){
-      return cp < 60 || 13311 < cp && cp < 42607 ? new UChar(cp, DEFAULT_FEATURE) : next(cp, needFeature);
-   }
-
-   var strategies = [fromCpFilter, fromCache, fromCpOnly, fromRuleBasedJamo, fromData];
-
-   UChar.fromCharCode = strategies.reduceRight(function (next, strategy) {
-      return function (cp, needFeature) {
-         return strategy(next, cp, needFeature);
-      };
-   }, null);
-
-   UChar.isHighSurrogate = function(cp){
-      return cp >= 0xD800 && cp <= 0xDBFF;
-   };
-   UChar.isLowSurrogate = function(cp){
-      return cp >= 0xDC00 && cp <= 0xDFFF;
-   };
-
-   UChar.prototype.prepFeature = function(){
-      if(!this.feature){
-         this.feature = UChar.fromCharCode(this.codepoint, true).feature;
-      }
-   };
-
-   UChar.prototype.toString = function(){
-      if(this.codepoint < 0x10000){
-         return String.fromCharCode(this.codepoint);
-      } else {
-         var x = this.codepoint - 0x10000;
-         return String.fromCharCode(Math.floor(x / 0x400) + 0xD800, x % 0x400 + 0xDC00);
-      }
-   };
-
-   UChar.prototype.getDecomp = function(){
-      this.prepFeature();
-      return this.feature[0] || null;
-   };
-
-   UChar.prototype.isCompatibility = function(){
-      this.prepFeature();
-      return !!this.feature[1] && (this.feature[1] & (1 << 8));
-   };
-   UChar.prototype.isExclude = function(){
-      this.prepFeature();
-      return !!this.feature[1] && (this.feature[1] & (1 << 9));
-   };
-   UChar.prototype.getCanonicalClass = function(){
-      this.prepFeature();
-      return !!this.feature[1] ? (this.feature[1] & 0xff) : 0;
-   };
-   UChar.prototype.getComposite = function(following){
-      this.prepFeature();
-      if(!this.feature[2]){
-         return null;
-      }
-      var cp = this.feature[2][following.codepoint];
-      return cp ? UChar.fromCharCode(cp) : null;
-   };
-
-   var UCharIterator = function(str){
-      this.str = str;
-      this.cursor = 0;
-   };
-   UCharIterator.prototype.next = function(){
-      if(!!this.str && this.cursor < this.str.length){
-         var cp = this.str.charCodeAt(this.cursor++);
-         var d;
-         if(UChar.isHighSurrogate(cp) && this.cursor < this.str.length && UChar.isLowSurrogate((d = this.str.charCodeAt(this.cursor)))){
-            cp = (cp - 0xD800) * 0x400 + (d -0xDC00) + 0x10000;
-            ++this.cursor;
-         }
-         return UChar.fromCharCode(cp);
-      } else {
-         this.str = null;
-         return null;
-      }
-   };
-
-   var RecursDecompIterator = function(it, cano){
-      this.it = it;
-      this.canonical = cano;
-      this.resBuf = [];
-   };
-
-   RecursDecompIterator.prototype.next = function(){
-      function recursiveDecomp(cano, uchar){
-         var decomp = uchar.getDecomp();
-         if(!!decomp && !(cano && uchar.isCompatibility())){
-            var ret = [];
-            for(var i = 0; i < decomp.length; ++i){
-               var a = recursiveDecomp(cano, UChar.fromCharCode(decomp[i]));
-                ret = ret.concat(a);
-            }
-            return ret;
-         } else {
-            return [uchar];
-         }
-      }
-      if(this.resBuf.length === 0){
-         var uchar = this.it.next();
-         if(!uchar){
-            return null;
-         }
-         this.resBuf = recursiveDecomp(this.canonical, uchar);
-      }
-      return this.resBuf.shift();
-   };
-
-   var DecompIterator = function(it){
-      this.it = it;
-      this.resBuf = [];
-   };
-
-   DecompIterator.prototype.next = function(){
-      var cc;
-      if(this.resBuf.length === 0){
-         do{
-            var uchar = this.it.next();
-            if(!uchar){
-               break;
-            }
-            cc = uchar.getCanonicalClass();
-            var inspt = this.resBuf.length;
-            if(cc !== 0){
-               for(; inspt > 0; --inspt){
-                  var uchar2 = this.resBuf[inspt - 1];
-                  var cc2 = uchar2.getCanonicalClass();
-                  if(cc2 <= cc){
-                     break;
-                  }
-               }
-            }
-            this.resBuf.splice(inspt, 0, uchar);
-         } while(cc !== 0);
-      }
-      return this.resBuf.shift();
-   };
-
-   var CompIterator = function(it){
-      this.it = it;
-      this.procBuf = [];
-      this.resBuf = [];
-      this.lastClass = null;
-   };
-
-   CompIterator.prototype.next = function(){
-      while(this.resBuf.length === 0){
-         var uchar = this.it.next();
-         if(!uchar){
-            this.resBuf = this.procBuf;
-            this.procBuf = [];
-            break;
-         }
-         if(this.procBuf.length === 0){
-            this.lastClass = uchar.getCanonicalClass();
-            this.procBuf.push(uchar);
-         } else {
-            var starter = this.procBuf[0];
-            var composite = starter.getComposite(uchar);
-            var cc = uchar.getCanonicalClass();
-            if(!!composite && (this.lastClass < cc || this.lastClass === 0)){
-               this.procBuf[0] = composite;
-            } else {
-               if(cc === 0){
-                  this.resBuf = this.procBuf;
-                  this.procBuf = [];
-               }
-               this.lastClass = cc;
-               this.procBuf.push(uchar);
-            }
-         }
-      }
-      return this.resBuf.shift();
-   };
-
-   var createIterator = function(mode, str){
-      switch(mode){
-         case "NFD":
-            return new DecompIterator(new RecursDecompIterator(new UCharIterator(str), true));
-         case "NFKD":
-            return new DecompIterator(new RecursDecompIterator(new UCharIterator(str), false));
-         case "NFC":
-            return new CompIterator(new DecompIterator(new RecursDecompIterator(new UCharIterator(str), true)));
-         case "NFKC":
-            return new CompIterator(new DecompIterator(new RecursDecompIterator(new UCharIterator(str), false)));
-      }
-      throw mode + " is invalid";
-   };
-   var normalize = function(mode, str){
-      var it = createIterator(mode, str);
-      var ret = "";
-      var uchar;
-      while(!!(uchar = it.next())){
-         ret += uchar.toString();
-      }
-      return ret;
-   };
-
-   /* API functions */
-   function nfd(str){
-      return normalize("NFD", str);
-   }
-
-   function nfkd(str){
-      return normalize("NFKD", str);
-   }
-
-   function nfc(str){
-      return normalize("NFC", str);
-   }
-
-   function nfkc(str){
-      return normalize("NFKC", str);
-   }
-
-/* Unicode data */
-UChar.udata={
-0:{60:[,,{824:8814}],61:[,,{824:8800}],62:[,,{824:8815}],65:[,,{768:192,769:193,770:194,771:195,772:256,774:258,775:550,776:196,777:7842,778:197,780:461,783:512,785:514,803:7840,805:7680,808:260}],66:[,,{775:7682,803:7684,817:7686}],67:[,,{769:262,770:264,775:266,780:268,807:199}],68:[,,{775:7690,780:270,803:7692,807:7696,813:7698,817:7694}],69:[,,{768:200,769:201,770:202,771:7868,772:274,774:276,775:278,776:203,777:7866,780:282,783:516,785:518,803:7864,807:552,808:280,813:7704,816:7706}],70:[,,{775:7710}],71:[,,{769:500,770:284,772:7712,774:286,775:288,780:486,807:290}],72:[,,{770:292,775:7714,776:7718,780:542,803:7716,807:7720,814:7722}],73:[,,{768:204,769:205,770:206,771:296,772:298,774:300,775:304,776:207,777:7880,780:463,783:520,785:522,803:7882,808:302,816:7724}],74:[,,{770:308}],75:[,,{769:7728,780:488,803:7730,807:310,817:7732}],76:[,,{769:313,780:317,803:7734,807:315,813:7740,817:7738}],77:[,,{769:7742,775:7744,803:7746}],78:[,,{768:504,769:323,771:209,775:7748,780:327,803:7750,807:325,813:7754,817:7752}],79:[,,{768:210,769:211,770:212,771:213,772:332,774:334,775:558,776:214,777:7886,779:336,780:465,783:524,785:526,795:416,803:7884,808:490}],80:[,,{769:7764,775:7766}],82:[,,{769:340,775:7768,780:344,783:528,785:530,803:7770,807:342,817:7774}],83:[,,{769:346,770:348,775:7776,780:352,803:7778,806:536,807:350}],84:[,,{775:7786,780:356,803:7788,806:538,807:354,813:7792,817:7790}],85:[,,{768:217,769:218,770:219,771:360,772:362,774:364,776:220,777:7910,778:366,779:368,780:467,783:532,785:534,795:431,803:7908,804:7794,808:370,813:7798,816:7796}],86:[,,{771:7804,803:7806}],87:[,,{768:7808,769:7810,770:372,775:7814,776:7812,803:7816}],88:[,,{775:7818,776:7820}],89:[,,{768:7922,769:221,770:374,771:7928,772:562,775:7822,776:376,777:7926,803:7924}],90:[,,{769:377,770:7824,775:379,780:381,803:7826,817:7828}],97:[,,{768:224,769:225,770:226,771:227,772:257,774:259,775:551,776:228,777:7843,778:229,780:462,783:513,785:515,803:7841,805:7681,808:261}],98:[,,{775:7683,803:7685,817:7687}],99:[,,{769:263,770:265,775:267,780:269,807:231}],100:[,,{775:7691,780:271,803:7693,807:7697,813:7699,817:7695}],101:[,,{768:232,769:233,770:234,771:7869,772:275,774:277,775:279,776:235,777:7867,780:283,783:517,785:519,803:7865,807:553,808:281,813:7705,816:7707}],102:[,,{775:7711}],103:[,,{769:501,770:285,772:7713,774:287,775:289,780:487,807:291}],104:[,,{770:293,775:7715,776:7719,780:543,803:7717,807:7721,814:7723,817:7830}],105:[,,{768:236,769:237,770:238,771:297,772:299,774:301,776:239,777:7881,780:464,783:521,785:523,803:7883,808:303,816:7725}],106:[,,{770:309,780:496}],107:[,,{769:7729,780:489,803:7731,807:311,817:7733}],108:[,,{769:314,780:318,803:7735,807:316,813:7741,817:7739}],109:[,,{769:7743,775:7745,803:7747}],110:[,,{768:505,769:324,771:241,775:7749,780:328,803:7751,807:326,813:7755,817:7753}],111:[,,{768:242,769:243,770:244,771:245,772:333,774:335,775:559,776:246,777:7887,779:337,780:466,783:525,785:527,795:417,803:7885,808:491}],112:[,,{769:7765,775:7767}],114:[,,{769:341,775:7769,780:345,783:529,785:531,803:7771,807:343,817:7775}],115:[,,{769:347,770:349,775:7777,780:353,803:7779,806:537,807:351}],116:[,,{775:7787,776:7831,780:357,803:7789,806:539,807:355,813:7793,817:7791}],117:[,,{768:249,769:250,770:251,771:361,772:363,774:365,776:252,777:7911,778:367,779:369,780:468,783:533,785:535,795:432,803:7909,804:7795,808:371,813:7799,816:7797}],118:[,,{771:7805,803:7807}],119:[,,{768:7809,769:7811,770:373,775:7815,776:7813,778:7832,803:7817}],120:[,,{775:7819,776:7821}],121:[,,{768:7923,769:253,770:375,771:7929,772:563,775:7823,776:255,777:7927,778:7833,803:7925}],122:[,,{769:378,770:7825,775:380,780:382,803:7827,817:7829}],160:[[32],256],168:[[32,776],256,{768:8173,769:901,834:8129}],170:[[97],256],175:[[32,772],256],178:[[50],256],179:[[51],256],180:[[32,769],256],181:[[956],256],184:[[32,807],256],185:[[49],256],186:[[111],256],188:[[49,8260,52],256],189:[[49,8260,50],256],190:[[51,8260,52],256],192:[[65,768]],193:[[65,769]],194:[[65,770],,{768:7846,769:7844,771:7850,777:7848}],195:[[65,771]],196:[[65,776],,{772:478}],197:[[65,778],,{769:506}],198:[,,{769:508,772:482}],199:[[67,807],,{769:7688}],200:[[69,768]],201:[[69,769]],202:[[69,770],,{768:7872,769:7870,771:7876,777:7874}],203:[[69,776]],204:[[73,768]],205:[[73,769]],206:[[73,770]],207:[[73,776],,{769:7726}],209:[[78,771]],210:[[79,768]],211:[[79,769]],212:[[79,770],,{768:7890,769:7888,771:7894,777:7892}],213:[[79,771],,{769:7756,772:556,776:7758}],214:[[79,776],,{772:554}],216:[,,{769:510}],217:[[85,768]],218:[[85,769]],219:[[85,770]],220:[[85,776],,{768:475,769:471,772:469,780:473}],221:[[89,769]],224:[[97,768]],225:[[97,769]],226:[[97,770],,{768:7847,769:7845,771:7851,777:7849}],227:[[97,771]],228:[[97,776],,{772:479}],229:[[97,778],,{769:507}],230:[,,{769:509,772:483}],231:[[99,807],,{769:7689}],232:[[101,768]],233:[[101,769]],234:[[101,770],,{768:7873,769:7871,771:7877,777:7875}],235:[[101,776]],236:[[105,768]],237:[[105,769]],238:[[105,770]],239:[[105,776],,{769:7727}],241:[[110,771]],242:[[111,768]],243:[[111,769]],244:[[111,770],,{768:7891,769:7889,771:7895,777:7893}],245:[[111,771],,{769:7757,772:557,776:7759}],246:[[111,776],,{772:555}],248:[,,{769:511}],249:[[117,768]],250:[[117,769]],251:[[117,770]],252:[[117,776],,{768:476,769:472,772:470,780:474}],253:[[121,769]],255:[[121,776]]},
-256:{256:[[65,772]],257:[[97,772]],258:[[65,774],,{768:7856,769:7854,771:7860,777:7858}],259:[[97,774],,{768:7857,769:7855,771:7861,777:7859}],260:[[65,808]],261:[[97,808]],262:[[67,769]],263:[[99,769]],264:[[67,770]],265:[[99,770]],266:[[67,775]],267:[[99,775]],268:[[67,780]],269:[[99,780]],270:[[68,780]],271:[[100,780]],274:[[69,772],,{768:7700,769:7702}],275:[[101,772],,{768:7701,769:7703}],276:[[69,774]],277:[[101,774]],278:[[69,775]],279:[[101,775]],280:[[69,808]],281:[[101,808]],282:[[69,780]],283:[[101,780]],284:[[71,770]],285:[[103,770]],286:[[71,774]],287:[[103,774]],288:[[71,775]],289:[[103,775]],290:[[71,807]],291:[[103,807]],292:[[72,770]],293:[[104,770]],296:[[73,771]],297:[[105,771]],298:[[73,772]],299:[[105,772]],300:[[73,774]],301:[[105,774]],302:[[73,808]],303:[[105,808]],304:[[73,775]],306:[[73,74],256],307:[[105,106],256],308:[[74,770]],309:[[106,770]],310:[[75,807]],311:[[107,807]],313:[[76,769]],314:[[108,769]],315:[[76,807]],316:[[108,807]],317:[[76,780]],318:[[108,780]],319:[[76,183],256],320:[[108,183],256],323:[[78,769]],324:[[110,769]],325:[[78,807]],326:[[110,807]],327:[[78,780]],328:[[110,780]],329:[[700,110],256],332:[[79,772],,{768:7760,769:7762}],333:[[111,772],,{768:7761,769:7763}],334:[[79,774]],335:[[111,774]],336:[[79,779]],337:[[111,779]],340:[[82,769]],341:[[114,769]],342:[[82,807]],343:[[114,807]],344:[[82,780]],345:[[114,780]],346:[[83,769],,{775:7780}],347:[[115,769],,{775:7781}],348:[[83,770]],349:[[115,770]],350:[[83,807]],351:[[115,807]],352:[[83,780],,{775:7782}],353:[[115,780],,{775:7783}],354:[[84,807]],355:[[116,807]],356:[[84,780]],357:[[116,780]],360:[[85,771],,{769:7800}],361:[[117,771],,{769:7801}],362:[[85,772],,{776:7802}],363:[[117,772],,{776:7803}],364:[[85,774]],365:[[117,774]],366:[[85,778]],367:[[117,778]],368:[[85,779]],369:[[117,779]],370:[[85,808]],371:[[117,808]],372:[[87,770]],373:[[119,770]],374:[[89,770]],375:[[121,770]],376:[[89,776]],377:[[90,769]],378:[[122,769]],379:[[90,775]],380:[[122,775]],381:[[90,780]],382:[[122,780]],383:[[115],256,{775:7835}],416:[[79,795],,{768:7900,769:7898,771:7904,777:7902,803:7906}],417:[[111,795],,{768:7901,769:7899,771:7905,777:7903,803:7907}],431:[[85,795],,{768:7914,769:7912,771:7918,777:7916,803:7920}],432:[[117,795],,{768:7915,769:7913,771:7919,777:7917,803:7921}],439:[,,{780:494}],452:[[68,381],256],453:[[68,382],256],454:[[100,382],256],455:[[76,74],256],456:[[76,106],256],457:[[108,106],256],458:[[78,74],256],459:[[78,106],256],460:[[110,106],256],461:[[65,780]],462:[[97,780]],463:[[73,780]],464:[[105,780]],465:[[79,780]],466:[[111,780]],467:[[85,780]],468:[[117,780]],469:[[220,772]],470:[[252,772]],471:[[220,769]],472:[[252,769]],473:[[220,780]],474:[[252,780]],475:[[220,768]],476:[[252,768]],478:[[196,772]],479:[[228,772]],480:[[550,772]],481:[[551,772]],482:[[198,772]],483:[[230,772]],486:[[71,780]],487:[[103,780]],488:[[75,780]],489:[[107,780]],490:[[79,808],,{772:492}],491:[[111,808],,{772:493}],492:[[490,772]],493:[[491,772]],494:[[439,780]],495:[[658,780]],496:[[106,780]],497:[[68,90],256],498:[[68,122],256],499:[[100,122],256],500:[[71,769]],501:[[103,769]],504:[[78,768]],505:[[110,768]],506:[[197,769]],507:[[229,769]],508:[[198,769]],509:[[230,769]],510:[[216,769]],511:[[248,769]],66045:[,220]},
-512:{512:[[65,783]],513:[[97,783]],514:[[65,785]],515:[[97,785]],516:[[69,783]],517:[[101,783]],518:[[69,785]],519:[[101,785]],520:[[73,783]],521:[[105,783]],522:[[73,785]],523:[[105,785]],524:[[79,783]],525:[[111,783]],526:[[79,785]],527:[[111,785]],528:[[82,783]],529:[[114,783]],530:[[82,785]],531:[[114,785]],532:[[85,783]],533:[[117,783]],534:[[85,785]],535:[[117,785]],536:[[83,806]],537:[[115,806]],538:[[84,806]],539:[[116,806]],542:[[72,780]],543:[[104,780]],550:[[65,775],,{772:480}],551:[[97,775],,{772:481}],552:[[69,807],,{774:7708}],553:[[101,807],,{774:7709}],554:[[214,772]],555:[[246,772]],556:[[213,772]],557:[[245,772]],558:[[79,775],,{772:560}],559:[[111,775],,{772:561}],560:[[558,772]],561:[[559,772]],562:[[89,772]],563:[[121,772]],658:[,,{780:495}],688:[[104],256],689:[[614],256],690:[[106],256],691:[[114],256],692:[[633],256],693:[[635],256],694:[[641],256],695:[[119],256],696:[[121],256],728:[[32,774],256],729:[[32,775],256],730:[[32,778],256],731:[[32,808],256],732:[[32,771],256],733:[[32,779],256],736:[[611],256],737:[[108],256],738:[[115],256],739:[[120],256],740:[[661],256],66272:[,220]},
-768:{768:[,230],769:[,230],770:[,230],771:[,230],772:[,230],773:[,230],774:[,230],775:[,230],776:[,230,{769:836}],777:[,230],778:[,230],779:[,230],780:[,230],781:[,230],782:[,230],783:[,230],784:[,230],785:[,230],786:[,230],787:[,230],788:[,230],789:[,232],790:[,220],791:[,220],792:[,220],793:[,220],794:[,232],795:[,216],796:[,220],797:[,220],798:[,220],799:[,220],800:[,220],801:[,202],802:[,202],803:[,220],804:[,220],805:[,220],806:[,220],807:[,202],808:[,202],809:[,220],810:[,220],811:[,220],812:[,220],813:[,220],814:[,220],815:[,220],816:[,220],817:[,220],818:[,220],819:[,220],820:[,1],821:[,1],822:[,1],823:[,1],824:[,1],825:[,220],826:[,220],827:[,220],828:[,220],829:[,230],830:[,230],831:[,230],832:[[768],230],833:[[769],230],834:[,230],835:[[787],230],836:[[776,769],230],837:[,240],838:[,230],839:[,220],840:[,220],841:[,220],842:[,230],843:[,230],844:[,230],845:[,220],846:[,220],848:[,230],849:[,230],850:[,230],851:[,220],852:[,220],853:[,220],854:[,220],855:[,230],856:[,232],857:[,220],858:[,220],859:[,230],860:[,233],861:[,234],862:[,234],863:[,233],864:[,234],865:[,234],866:[,233],867:[,230],868:[,230],869:[,230],870:[,230],871:[,230],872:[,230],873:[,230],874:[,230],875:[,230],876:[,230],877:[,230],878:[,230],879:[,230],884:[[697]],890:[[32,837],256],894:[[59]],900:[[32,769],256],901:[[168,769]],902:[[913,769]],903:[[183]],904:[[917,769]],905:[[919,769]],906:[[921,769]],908:[[927,769]],910:[[933,769]],911:[[937,769]],912:[[970,769]],913:[,,{768:8122,769:902,772:8121,774:8120,787:7944,788:7945,837:8124}],917:[,,{768:8136,769:904,787:7960,788:7961}],919:[,,{768:8138,769:905,787:7976,788:7977,837:8140}],921:[,,{768:8154,769:906,772:8153,774:8152,776:938,787:7992,788:7993}],927:[,,{768:8184,769:908,787:8008,788:8009}],929:[,,{788:8172}],933:[,,{768:8170,769:910,772:8169,774:8168,776:939,788:8025}],937:[,,{768:8186,769:911,787:8040,788:8041,837:8188}],938:[[921,776]],939:[[933,776]],940:[[945,769],,{837:8116}],941:[[949,769]],942:[[951,769],,{837:8132}],943:[[953,769]],944:[[971,769]],945:[,,{768:8048,769:940,772:8113,774:8112,787:7936,788:7937,834:8118,837:8115}],949:[,,{768:8050,769:941,787:7952,788:7953}],951:[,,{768:8052,769:942,787:7968,788:7969,834:8134,837:8131}],953:[,,{768:8054,769:943,772:8145,774:8144,776:970,787:7984,788:7985,834:8150}],959:[,,{768:8056,769:972,787:8000,788:8001}],961:[,,{787:8164,788:8165}],965:[,,{768:8058,769:973,772:8161,774:8160,776:971,787:8016,788:8017,834:8166}],969:[,,{768:8060,769:974,787:8032,788:8033,834:8182,837:8179}],970:[[953,776],,{768:8146,769:912,834:8151}],971:[[965,776],,{768:8162,769:944,834:8167}],972:[[959,769]],973:[[965,769]],974:[[969,769],,{837:8180}],976:[[946],256],977:[[952],256],978:[[933],256,{769:979,776:980}],979:[[978,769]],980:[[978,776]],981:[[966],256],982:[[960],256],1008:[[954],256],1009:[[961],256],1010:[[962],256],1012:[[920],256],1013:[[949],256],1017:[[931],256],66422:[,230],66423:[,230],66424:[,230],66425:[,230],66426:[,230]},
-1024:{1024:[[1045,768]],1025:[[1045,776]],1027:[[1043,769]],1030:[,,{776:1031}],1031:[[1030,776]],1036:[[1050,769]],1037:[[1048,768]],1038:[[1059,774]],1040:[,,{774:1232,776:1234}],1043:[,,{769:1027}],1045:[,,{768:1024,774:1238,776:1025}],1046:[,,{774:1217,776:1244}],1047:[,,{776:1246}],1048:[,,{768:1037,772:1250,774:1049,776:1252}],1049:[[1048,774]],1050:[,,{769:1036}],1054:[,,{776:1254}],1059:[,,{772:1262,774:1038,776:1264,779:1266}],1063:[,,{776:1268}],1067:[,,{776:1272}],1069:[,,{776:1260}],1072:[,,{774:1233,776:1235}],1075:[,,{769:1107}],1077:[,,{768:1104,774:1239,776:1105}],1078:[,,{774:1218,776:1245}],1079:[,,{776:1247}],1080:[,,{768:1117,772:1251,774:1081,776:1253}],1081:[[1080,774]],1082:[,,{769:1116}],1086:[,,{776:1255}],1091:[,,{772:1263,774:1118,776:1265,779:1267}],1095:[,,{776:1269}],1099:[,,{776:1273}],1101:[,,{776:1261}],1104:[[1077,768]],1105:[[1077,776]],1107:[[1075,769]],1110:[,,{776:1111}],1111:[[1110,776]],1116:[[1082,769]],1117:[[1080,768]],1118:[[1091,774]],1140:[,,{783:1142}],1141:[,,{783:1143}],1142:[[1140,783]],1143:[[1141,783]],1155:[,230],1156:[,230],1157:[,230],1158:[,230],1159:[,230],1217:[[1046,774]],1218:[[1078,774]],1232:[[1040,774]],1233:[[1072,774]],1234:[[1040,776]],1235:[[1072,776]],1238:[[1045,774]],1239:[[1077,774]],1240:[,,{776:1242}],1241:[,,{776:1243}],1242:[[1240,776]],1243:[[1241,776]],1244:[[1046,776]],1245:[[1078,776]],1246:[[1047,776]],1247:[[1079,776]],1250:[[1048,772]],1251:[[1080,772]],1252:[[1048,776]],1253:[[1080,776]],1254:[[1054,776]],1255:[[1086,776]],1256:[,,{776:1258}],1257:[,,{776:1259}],1258:[[1256,776]],1259:[[1257,776]],1260:[[1069,776]],1261:[[1101,776]],1262:[[1059,772]],1263:[[1091,772]],1264:[[1059,776]],1265:[[1091,776]],1266:[[1059,779]],1267:[[1091,779]],1268:[[1063,776]],1269:[[1095,776]],1272:[[1067,776]],1273:[[1099,776]]},
-1280:{1415:[[1381,1410],256],1425:[,220],1426:[,230],1427:[,230],1428:[,230],1429:[,230],1430:[,220],1431:[,230],1432:[,230],1433:[,230],1434:[,222],1435:[,220],1436:[,230],1437:[,230],1438:[,230],1439:[,230],1440:[,230],1441:[,230],1442:[,220],1443:[,220],1444:[,220],1445:[,220],1446:[,220],1447:[,220],1448:[,230],1449:[,230],1450:[,220],1451:[,230],1452:[,230],1453:[,222],1454:[,228],1455:[,230],1456:[,10],1457:[,11],1458:[,12],1459:[,13],1460:[,14],1461:[,15],1462:[,16],1463:[,17],1464:[,18],1465:[,19],1466:[,19],1467:[,20],1468:[,21],1469:[,22],1471:[,23],1473:[,24],1474:[,25],1476:[,230],1477:[,220],1479:[,18]},
-1536:{1552:[,230],1553:[,230],1554:[,230],1555:[,230],1556:[,230],1557:[,230],1558:[,230],1559:[,230],1560:[,30],1561:[,31],1562:[,32],1570:[[1575,1619]],1571:[[1575,1620]],1572:[[1608,1620]],1573:[[1575,1621]],1574:[[1610,1620]],1575:[,,{1619:1570,1620:1571,1621:1573}],1608:[,,{1620:1572}],1610:[,,{1620:1574}],1611:[,27],1612:[,28],1613:[,29],1614:[,30],1615:[,31],1616:[,32],1617:[,33],1618:[,34],1619:[,230],1620:[,230],1621:[,220],1622:[,220],1623:[,230],1624:[,230],1625:[,230],1626:[,230],1627:[,230],1628:[,220],1629:[,230],1630:[,230],1631:[,220],1648:[,35],1653:[[1575,1652],256],1654:[[1608,1652],256],1655:[[1735,1652],256],1656:[[1610,1652],256],1728:[[1749,1620]],1729:[,,{1620:1730}],1730:[[1729,1620]],1746:[,,{1620:1747}],1747:[[1746,1620]],1749:[,,{1620:1728}],1750:[,230],1751:[,230],1752:[,230],1753:[,230],1754:[,230],1755:[,230],1756:[,230],1759:[,230],1760:[,230],1761:[,230],1762:[,230],1763:[,220],1764:[,230],1767:[,230],1768:[,230],1770:[,220],1771:[,230],1772:[,230],1773:[,220]},
-1792:{1809:[,36],1840:[,230],1841:[,220],1842:[,230],1843:[,230],1844:[,220],1845:[,230],1846:[,230],1847:[,220],1848:[,220],1849:[,220],1850:[,230],1851:[,220],1852:[,220],1853:[,230],1854:[,220],1855:[,230],1856:[,230],1857:[,230],1858:[,220],1859:[,230],1860:[,220],1861:[,230],1862:[,220],1863:[,230],1864:[,220],1865:[,230],1866:[,230],2027:[,230],2028:[,230],2029:[,230],2030:[,230],2031:[,230],2032:[,230],2033:[,230],2034:[,220],2035:[,230]},
-2048:{2070:[,230],2071:[,230],2072:[,230],2073:[,230],2075:[,230],2076:[,230],2077:[,230],2078:[,230],2079:[,230],2080:[,230],2081:[,230],2082:[,230],2083:[,230],2085:[,230],2086:[,230],2087:[,230],2089:[,230],2090:[,230],2091:[,230],2092:[,230],2093:[,230],2137:[,220],2138:[,220],2139:[,220],2276:[,230],2277:[,230],2278:[,220],2279:[,230],2280:[,230],2281:[,220],2282:[,230],2283:[,230],2284:[,230],2285:[,220],2286:[,220],2287:[,220],2288:[,27],2289:[,28],2290:[,29],2291:[,230],2292:[,230],2293:[,230],2294:[,220],2295:[,230],2296:[,230],2297:[,220],2298:[,220],2299:[,230],2300:[,230],2301:[,230],2302:[,230],2303:[,230]},
-2304:{2344:[,,{2364:2345}],2345:[[2344,2364]],2352:[,,{2364:2353}],2353:[[2352,2364]],2355:[,,{2364:2356}],2356:[[2355,2364]],2364:[,7],2381:[,9],2385:[,230],2386:[,220],2387:[,230],2388:[,230],2392:[[2325,2364],512],2393:[[2326,2364],512],2394:[[2327,2364],512],2395:[[2332,2364],512],2396:[[2337,2364],512],2397:[[2338,2364],512],2398:[[2347,2364],512],2399:[[2351,2364],512],2492:[,7],2503:[,,{2494:2507,2519:2508}],2507:[[2503,2494]],2508:[[2503,2519]],2509:[,9],2524:[[2465,2492],512],2525:[[2466,2492],512],2527:[[2479,2492],512]},
-2560:{2611:[[2610,2620],512],2614:[[2616,2620],512],2620:[,7],2637:[,9],2649:[[2582,2620],512],2650:[[2583,2620],512],2651:[[2588,2620],512],2654:[[2603,2620],512],2748:[,7],2765:[,9],68109:[,220],68111:[,230],68152:[,230],68153:[,1],68154:[,220],68159:[,9],68325:[,230],68326:[,220]},
-2816:{2876:[,7],2887:[,,{2878:2891,2902:2888,2903:2892}],2888:[[2887,2902]],2891:[[2887,2878]],2892:[[2887,2903]],2893:[,9],2908:[[2849,2876],512],2909:[[2850,2876],512],2962:[,,{3031:2964}],2964:[[2962,3031]],3014:[,,{3006:3018,3031:3020}],3015:[,,{3006:3019}],3018:[[3014,3006]],3019:[[3015,3006]],3020:[[3014,3031]],3021:[,9]},
-3072:{3142:[,,{3158:3144}],3144:[[3142,3158]],3149:[,9],3157:[,84],3158:[,91],3260:[,7],3263:[,,{3285:3264}],3264:[[3263,3285]],3270:[,,{3266:3274,3285:3271,3286:3272}],3271:[[3270,3285]],3272:[[3270,3286]],3274:[[3270,3266],,{3285:3275}],3275:[[3274,3285]],3277:[,9]},
-3328:{3398:[,,{3390:3402,3415:3404}],3399:[,,{3390:3403}],3402:[[3398,3390]],3403:[[3399,3390]],3404:[[3398,3415]],3405:[,9],3530:[,9],3545:[,,{3530:3546,3535:3548,3551:3550}],3546:[[3545,3530]],3548:[[3545,3535],,{3530:3549}],3549:[[3548,3530]],3550:[[3545,3551]]},
-3584:{3635:[[3661,3634],256],3640:[,103],3641:[,103],3642:[,9],3656:[,107],3657:[,107],3658:[,107],3659:[,107],3763:[[3789,3762],256],3768:[,118],3769:[,118],3784:[,122],3785:[,122],3786:[,122],3787:[,122],3804:[[3755,3737],256],3805:[[3755,3745],256]},
-3840:{3852:[[3851],256],3864:[,220],3865:[,220],3893:[,220],3895:[,220],3897:[,216],3907:[[3906,4023],512],3917:[[3916,4023],512],3922:[[3921,4023],512],3927:[[3926,4023],512],3932:[[3931,4023],512],3945:[[3904,4021],512],3953:[,129],3954:[,130],3955:[[3953,3954],512],3956:[,132],3957:[[3953,3956],512],3958:[[4018,3968],512],3959:[[4018,3969],256],3960:[[4019,3968],512],3961:[[4019,3969],256],3962:[,130],3963:[,130],3964:[,130],3965:[,130],3968:[,130],3969:[[3953,3968],512],3970:[,230],3971:[,230],3972:[,9],3974:[,230],3975:[,230],3987:[[3986,4023],512],3997:[[3996,4023],512],4002:[[4001,4023],512],4007:[[4006,4023],512],4012:[[4011,4023],512],4025:[[3984,4021],512],4038:[,220]},
-4096:{4133:[,,{4142:4134}],4134:[[4133,4142]],4151:[,7],4153:[,9],4154:[,9],4237:[,220],4348:[[4316],256],69702:[,9],69759:[,9],69785:[,,{69818:69786}],69786:[[69785,69818]],69787:[,,{69818:69788}],69788:[[69787,69818]],69797:[,,{69818:69803}],69803:[[69797,69818]],69817:[,9],69818:[,7]},
-4352:{69888:[,230],69889:[,230],69890:[,230],69934:[[69937,69927]],69935:[[69938,69927]],69937:[,,{69927:69934}],69938:[,,{69927:69935}],69939:[,9],69940:[,9],70003:[,7],70080:[,9]},
-4608:{70197:[,9],70198:[,7],70377:[,7],70378:[,9]},
-4864:{4957:[,230],4958:[,230],4959:[,230],70460:[,7],70471:[,,{70462:70475,70487:70476}],70475:[[70471,70462]],70476:[[70471,70487]],70477:[,9],70502:[,230],70503:[,230],70504:[,230],70505:[,230],70506:[,230],70507:[,230],70508:[,230],70512:[,230],70513:[,230],70514:[,230],70515:[,230],70516:[,230]},
-5120:{70841:[,,{70832:70844,70842:70843,70845:70846}],70843:[[70841,70842]],70844:[[70841,70832]],70846:[[70841,70845]],70850:[,9],70851:[,7]},
-5376:{71096:[,,{71087:71098}],71097:[,,{71087:71099}],71098:[[71096,71087]],71099:[[71097,71087]],71103:[,9],71104:[,7]},
-5632:{71231:[,9],71350:[,9],71351:[,7]},
-5888:{5908:[,9],5940:[,9],6098:[,9],6109:[,230]},
-6144:{6313:[,228]},
-6400:{6457:[,222],6458:[,230],6459:[,220]},
-6656:{6679:[,230],6680:[,220],6752:[,9],6773:[,230],6774:[,230],6775:[,230],6776:[,230],6777:[,230],6778:[,230],6779:[,230],6780:[,230],6783:[,220],6832:[,230],6833:[,230],6834:[,230],6835:[,230],6836:[,230],6837:[,220],6838:[,220],6839:[,220],6840:[,220],6841:[,220],6842:[,220],6843:[,230],6844:[,230],6845:[,220]},
-6912:{6917:[,,{6965:6918}],6918:[[6917,6965]],6919:[,,{6965:6920}],6920:[[6919,6965]],6921:[,,{6965:6922}],6922:[[6921,6965]],6923:[,,{6965:6924}],6924:[[6923,6965]],6925:[,,{6965:6926}],6926:[[6925,6965]],6929:[,,{6965:6930}],6930:[[6929,6965]],6964:[,7],6970:[,,{6965:6971}],6971:[[6970,6965]],6972:[,,{6965:6973}],6973:[[6972,6965]],6974:[,,{6965:6976}],6975:[,,{6965:6977}],6976:[[6974,6965]],6977:[[6975,6965]],6978:[,,{6965:6979}],6979:[[6978,6965]],6980:[,9],7019:[,230],7020:[,220],7021:[,230],7022:[,230],7023:[,230],7024:[,230],7025:[,230],7026:[,230],7027:[,230],7082:[,9],7083:[,9],7142:[,7],7154:[,9],7155:[,9]},
-7168:{7223:[,7],7376:[,230],7377:[,230],7378:[,230],7380:[,1],7381:[,220],7382:[,220],7383:[,220],7384:[,220],7385:[,220],7386:[,230],7387:[,230],7388:[,220],7389:[,220],7390:[,220],7391:[,220],7392:[,230],7394:[,1],7395:[,1],7396:[,1],7397:[,1],7398:[,1],7399:[,1],7400:[,1],7405:[,220],7412:[,230],7416:[,230],7417:[,230]},
-7424:{7468:[[65],256],7469:[[198],256],7470:[[66],256],7472:[[68],256],7473:[[69],256],7474:[[398],256],7475:[[71],256],7476:[[72],256],7477:[[73],256],7478:[[74],256],7479:[[75],256],7480:[[76],256],7481:[[77],256],7482:[[78],256],7484:[[79],256],7485:[[546],256],7486:[[80],256],7487:[[82],256],7488:[[84],256],7489:[[85],256],7490:[[87],256],7491:[[97],256],7492:[[592],256],7493:[[593],256],7494:[[7426],256],7495:[[98],256],7496:[[100],256],7497:[[101],256],7498:[[601],256],7499:[[603],256],7500:[[604],256],7501:[[103],256],7503:[[107],256],7504:[[109],256],7505:[[331],256],7506:[[111],256],7507:[[596],256],7508:[[7446],256],7509:[[7447],256],7510:[[112],256],7511:[[116],256],7512:[[117],256],7513:[[7453],256],7514:[[623],256],7515:[[118],256],7516:[[7461],256],7517:[[946],256],7518:[[947],256],7519:[[948],256],7520:[[966],256],7521:[[967],256],7522:[[105],256],7523:[[114],256],7524:[[117],256],7525:[[118],256],7526:[[946],256],7527:[[947],256],7528:[[961],256],7529:[[966],256],7530:[[967],256],7544:[[1085],256],7579:[[594],256],7580:[[99],256],7581:[[597],256],7582:[[240],256],7583:[[604],256],7584:[[102],256],7585:[[607],256],7586:[[609],256],7587:[[613],256],7588:[[616],256],7589:[[617],256],7590:[[618],256],7591:[[7547],256],7592:[[669],256],7593:[[621],256],7594:[[7557],256],7595:[[671],256],7596:[[625],256],7597:[[624],256],7598:[[626],256],7599:[[627],256],7600:[[628],256],7601:[[629],256],7602:[[632],256],7603:[[642],256],7604:[[643],256],7605:[[427],256],7606:[[649],256],7607:[[650],256],7608:[[7452],256],7609:[[651],256],7610:[[652],256],7611:[[122],256],7612:[[656],256],7613:[[657],256],7614:[[658],256],7615:[[952],256],7616:[,230],7617:[,230],7618:[,220],7619:[,230],7620:[,230],7621:[,230],7622:[,230],7623:[,230],7624:[,230],7625:[,230],7626:[,220],7627:[,230],7628:[,230],7629:[,234],7630:[,214],7631:[,220],7632:[,202],7633:[,230],7634:[,230],7635:[,230],7636:[,230],7637:[,230],7638:[,230],7639:[,230],7640:[,230],7641:[,230],7642:[,230],7643:[,230],7644:[,230],7645:[,230],7646:[,230],7647:[,230],7648:[,230],7649:[,230],7650:[,230],7651:[,230],7652:[,230],7653:[,230],7654:[,230],7655:[,230],7656:[,230],7657:[,230],7658:[,230],7659:[,230],7660:[,230],7661:[,230],7662:[,230],7663:[,230],7664:[,230],7665:[,230],7666:[,230],7667:[,230],7668:[,230],7669:[,230],7676:[,233],7677:[,220],7678:[,230],7679:[,220]},
-7680:{7680:[[65,805]],7681:[[97,805]],7682:[[66,775]],7683:[[98,775]],7684:[[66,803]],7685:[[98,803]],7686:[[66,817]],7687:[[98,817]],7688:[[199,769]],7689:[[231,769]],7690:[[68,775]],7691:[[100,775]],7692:[[68,803]],7693:[[100,803]],7694:[[68,817]],7695:[[100,817]],7696:[[68,807]],7697:[[100,807]],7698:[[68,813]],7699:[[100,813]],7700:[[274,768]],7701:[[275,768]],7702:[[274,769]],7703:[[275,769]],7704:[[69,813]],7705:[[101,813]],7706:[[69,816]],7707:[[101,816]],7708:[[552,774]],7709:[[553,774]],7710:[[70,775]],7711:[[102,775]],7712:[[71,772]],7713:[[103,772]],7714:[[72,775]],7715:[[104,775]],7716:[[72,803]],7717:[[104,803]],7718:[[72,776]],7719:[[104,776]],7720:[[72,807]],7721:[[104,807]],7722:[[72,814]],7723:[[104,814]],7724:[[73,816]],7725:[[105,816]],7726:[[207,769]],7727:[[239,769]],7728:[[75,769]],7729:[[107,769]],7730:[[75,803]],7731:[[107,803]],7732:[[75,817]],7733:[[107,817]],7734:[[76,803],,{772:7736}],7735:[[108,803],,{772:7737}],7736:[[7734,772]],7737:[[7735,772]],7738:[[76,817]],7739:[[108,817]],7740:[[76,813]],7741:[[108,813]],7742:[[77,769]],7743:[[109,769]],7744:[[77,775]],7745:[[109,775]],7746:[[77,803]],7747:[[109,803]],7748:[[78,775]],7749:[[110,775]],7750:[[78,803]],7751:[[110,803]],7752:[[78,817]],7753:[[110,817]],7754:[[78,813]],7755:[[110,813]],7756:[[213,769]],7757:[[245,769]],7758:[[213,776]],7759:[[245,776]],7760:[[332,768]],7761:[[333,768]],7762:[[332,769]],7763:[[333,769]],7764:[[80,769]],7765:[[112,769]],7766:[[80,775]],7767:[[112,775]],7768:[[82,775]],7769:[[114,775]],7770:[[82,803],,{772:7772}],7771:[[114,803],,{772:7773}],7772:[[7770,772]],7773:[[7771,772]],7774:[[82,817]],7775:[[114,817]],7776:[[83,775]],7777:[[115,775]],7778:[[83,803],,{775:7784}],7779:[[115,803],,{775:7785}],7780:[[346,775]],7781:[[347,775]],7782:[[352,775]],7783:[[353,775]],7784:[[7778,775]],7785:[[7779,775]],7786:[[84,775]],7787:[[116,775]],7788:[[84,803]],7789:[[116,803]],7790:[[84,817]],7791:[[116,817]],7792:[[84,813]],7793:[[116,813]],7794:[[85,804]],7795:[[117,804]],7796:[[85,816]],7797:[[117,816]],7798:[[85,813]],7799:[[117,813]],7800:[[360,769]],7801:[[361,769]],7802:[[362,776]],7803:[[363,776]],7804:[[86,771]],7805:[[118,771]],7806:[[86,803]],7807:[[118,803]],7808:[[87,768]],7809:[[119,768]],7810:[[87,769]],7811:[[119,769]],7812:[[87,776]],7813:[[119,776]],7814:[[87,775]],7815:[[119,775]],7816:[[87,803]],7817:[[119,803]],7818:[[88,775]],7819:[[120,775]],7820:[[88,776]],7821:[[120,776]],7822:[[89,775]],7823:[[121,775]],7824:[[90,770]],7825:[[122,770]],7826:[[90,803]],7827:[[122,803]],7828:[[90,817]],7829:[[122,817]],7830:[[104,817]],7831:[[116,776]],7832:[[119,778]],7833:[[121,778]],7834:[[97,702],256],7835:[[383,775]],7840:[[65,803],,{770:7852,774:7862}],7841:[[97,803],,{770:7853,774:7863}],7842:[[65,777]],7843:[[97,777]],7844:[[194,769]],7845:[[226,769]],7846:[[194,768]],7847:[[226,768]],7848:[[194,777]],7849:[[226,777]],7850:[[194,771]],7851:[[226,771]],7852:[[7840,770]],7853:[[7841,770]],7854:[[258,769]],7855:[[259,769]],7856:[[258,768]],7857:[[259,768]],7858:[[258,777]],7859:[[259,777]],7860:[[258,771]],7861:[[259,771]],7862:[[7840,774]],7863:[[7841,774]],7864:[[69,803],,{770:7878}],7865:[[101,803],,{770:7879}],7866:[[69,777]],7867:[[101,777]],7868:[[69,771]],7869:[[101,771]],7870:[[202,769]],7871:[[234,769]],7872:[[202,768]],7873:[[234,768]],7874:[[202,777]],7875:[[234,777]],7876:[[202,771]],7877:[[234,771]],7878:[[7864,770]],7879:[[7865,770]],7880:[[73,777]],7881:[[105,777]],7882:[[73,803]],7883:[[105,803]],7884:[[79,803],,{770:7896}],7885:[[111,803],,{770:7897}],7886:[[79,777]],7887:[[111,777]],7888:[[212,769]],7889:[[244,769]],7890:[[212,768]],7891:[[244,768]],7892:[[212,777]],7893:[[244,777]],7894:[[212,771]],7895:[[244,771]],7896:[[7884,770]],7897:[[7885,770]],7898:[[416,769]],7899:[[417,769]],7900:[[416,768]],7901:[[417,768]],7902:[[416,777]],7903:[[417,777]],7904:[[416,771]],7905:[[417,771]],7906:[[416,803]],7907:[[417,803]],7908:[[85,803]],7909:[[117,803]],7910:[[85,777]],7911:[[117,777]],7912:[[431,769]],7913:[[432,769]],7914:[[431,768]],7915:[[432,768]],7916:[[431,777]],7917:[[432,777]],7918:[[431,771]],7919:[[432,771]],7920:[[431,803]],7921:[[432,803]],7922:[[89,768]],7923:[[121,768]],7924:[[89,803]],7925:[[121,803]],7926:[[89,777]],7927:[[121,777]],7928:[[89,771]],7929:[[121,771]]},
-7936:{7936:[[945,787],,{768:7938,769:7940,834:7942,837:8064}],7937:[[945,788],,{768:7939,769:7941,834:7943,837:8065}],7938:[[7936,768],,{837:8066}],7939:[[7937,768],,{837:8067}],7940:[[7936,769],,{837:8068}],7941:[[7937,769],,{837:8069}],7942:[[7936,834],,{837:8070}],7943:[[7937,834],,{837:8071}],7944:[[913,787],,{768:7946,769:7948,834:7950,837:8072}],7945:[[913,788],,{768:7947,769:7949,834:7951,837:8073}],7946:[[7944,768],,{837:8074}],7947:[[7945,768],,{837:8075}],7948:[[7944,769],,{837:8076}],7949:[[7945,769],,{837:8077}],7950:[[7944,834],,{837:8078}],7951:[[7945,834],,{837:8079}],7952:[[949,787],,{768:7954,769:7956}],7953:[[949,788],,{768:7955,769:7957}],7954:[[7952,768]],7955:[[7953,768]],7956:[[7952,769]],7957:[[7953,769]],7960:[[917,787],,{768:7962,769:7964}],7961:[[917,788],,{768:7963,769:7965}],7962:[[7960,768]],7963:[[7961,768]],7964:[[7960,769]],7965:[[7961,769]],7968:[[951,787],,{768:7970,769:7972,834:7974,837:8080}],7969:[[951,788],,{768:7971,769:7973,834:7975,837:8081}],7970:[[7968,768],,{837:8082}],7971:[[7969,768],,{837:8083}],7972:[[7968,769],,{837:8084}],7973:[[7969,769],,{837:8085}],7974:[[7968,834],,{837:8086}],7975:[[7969,834],,{837:8087}],7976:[[919,787],,{768:7978,769:7980,834:7982,837:8088}],7977:[[919,788],,{768:7979,769:7981,834:7983,837:8089}],7978:[[7976,768],,{837:8090}],7979:[[7977,768],,{837:8091}],7980:[[7976,769],,{837:8092}],7981:[[7977,769],,{837:8093}],7982:[[7976,834],,{837:8094}],7983:[[7977,834],,{837:8095}],7984:[[953,787],,{768:7986,769:7988,834:7990}],7985:[[953,788],,{768:7987,769:7989,834:7991}],7986:[[7984,768]],7987:[[7985,768]],7988:[[7984,769]],7989:[[7985,769]],7990:[[7984,834]],7991:[[7985,834]],7992:[[921,787],,{768:7994,769:7996,834:7998}],7993:[[921,788],,{768:7995,769:7997,834:7999}],7994:[[7992,768]],7995:[[7993,768]],7996:[[7992,769]],7997:[[7993,769]],7998:[[7992,834]],7999:[[7993,834]],8000:[[959,787],,{768:8002,769:8004}],8001:[[959,788],,{768:8003,769:8005}],8002:[[8000,768]],8003:[[8001,768]],8004:[[8000,769]],8005:[[8001,769]],8008:[[927,787],,{768:8010,769:8012}],8009:[[927,788],,{768:8011,769:8013}],8010:[[8008,768]],8011:[[8009,768]],8012:[[8008,769]],8013:[[8009,769]],8016:[[965,787],,{768:8018,769:8020,834:8022}],8017:[[965,788],,{768:8019,769:8021,834:8023}],8018:[[8016,768]],8019:[[8017,768]],8020:[[8016,769]],8021:[[8017,769]],8022:[[8016,834]],8023:[[8017,834]],8025:[[933,788],,{768:8027,769:8029,834:8031}],8027:[[8025,768]],8029:[[8025,769]],8031:[[8025,834]],8032:[[969,787],,{768:8034,769:8036,834:8038,837:8096}],8033:[[969,788],,{768:8035,769:8037,834:8039,837:8097}],8034:[[8032,768],,{837:8098}],8035:[[8033,768],,{837:8099}],8036:[[8032,769],,{837:8100}],8037:[[8033,769],,{837:8101}],8038:[[8032,834],,{837:8102}],8039:[[8033,834],,{837:8103}],8040:[[937,787],,{768:8042,769:8044,834:8046,837:8104}],8041:[[937,788],,{768:8043,769:8045,834:8047,837:8105}],8042:[[8040,768],,{837:8106}],8043:[[8041,768],,{837:8107}],8044:[[8040,769],,{837:8108}],8045:[[8041,769],,{837:8109}],8046:[[8040,834],,{837:8110}],8047:[[8041,834],,{837:8111}],8048:[[945,768],,{837:8114}],8049:[[940]],8050:[[949,768]],8051:[[941]],8052:[[951,768],,{837:8130}],8053:[[942]],8054:[[953,768]],8055:[[943]],8056:[[959,768]],8057:[[972]],8058:[[965,768]],8059:[[973]],8060:[[969,768],,{837:8178}],8061:[[974]],8064:[[7936,837]],8065:[[7937,837]],8066:[[7938,837]],8067:[[7939,837]],8068:[[7940,837]],8069:[[7941,837]],8070:[[7942,837]],8071:[[7943,837]],8072:[[7944,837]],8073:[[7945,837]],8074:[[7946,837]],8075:[[7947,837]],8076:[[7948,837]],8077:[[7949,837]],8078:[[7950,837]],8079:[[7951,837]],8080:[[7968,837]],8081:[[7969,837]],8082:[[7970,837]],8083:[[7971,837]],8084:[[7972,837]],8085:[[7973,837]],8086:[[7974,837]],8087:[[7975,837]],8088:[[7976,837]],8089:[[7977,837]],8090:[[7978,837]],8091:[[7979,837]],8092:[[7980,837]],8093:[[7981,837]],8094:[[7982,837]],8095:[[7983,837]],8096:[[8032,837]],8097:[[8033,837]],8098:[[8034,837]],8099:[[8035,837]],8100:[[8036,837]],8101:[[8037,837]],8102:[[8038,837]],8103:[[8039,837]],8104:[[8040,837]],8105:[[8041,837]],8106:[[8042,837]],8107:[[8043,837]],8108:[[8044,837]],8109:[[8045,837]],8110:[[8046,837]],8111:[[8047,837]],8112:[[945,774]],8113:[[945,772]],8114:[[8048,837]],8115:[[945,837]],8116:[[940,837]],8118:[[945,834],,{837:8119}],8119:[[8118,837]],8120:[[913,774]],8121:[[913,772]],8122:[[913,768]],8123:[[902]],8124:[[913,837]],8125:[[32,787],256],8126:[[953]],8127:[[32,787],256,{768:8141,769:8142,834:8143}],8128:[[32,834],256],8129:[[168,834]],8130:[[8052,837]],8131:[[951,837]],8132:[[942,837]],8134:[[951,834],,{837:8135}],8135:[[8134,837]],8136:[[917,768]],8137:[[904]],8138:[[919,768]],8139:[[905]],8140:[[919,837]],8141:[[8127,768]],8142:[[8127,769]],8143:[[8127,834]],8144:[[953,774]],8145:[[953,772]],8146:[[970,768]],8147:[[912]],8150:[[953,834]],8151:[[970,834]],8152:[[921,774]],8153:[[921,772]],8154:[[921,768]],8155:[[906]],8157:[[8190,768]],8158:[[8190,769]],8159:[[8190,834]],8160:[[965,774]],8161:[[965,772]],8162:[[971,768]],8163:[[944]],8164:[[961,787]],8165:[[961,788]],8166:[[965,834]],8167:[[971,834]],8168:[[933,774]],8169:[[933,772]],8170:[[933,768]],8171:[[910]],8172:[[929,788]],8173:[[168,768]],8174:[[901]],8175:[[96]],8178:[[8060,837]],8179:[[969,837]],8180:[[974,837]],8182:[[969,834],,{837:8183}],8183:[[8182,837]],8184:[[927,768]],8185:[[908]],8186:[[937,768]],8187:[[911]],8188:[[937,837]],8189:[[180]],8190:[[32,788],256,{768:8157,769:8158,834:8159}]},
-8192:{8192:[[8194]],8193:[[8195]],8194:[[32],256],8195:[[32],256],8196:[[32],256],8197:[[32],256],8198:[[32],256],8199:[[32],256],8200:[[32],256],8201:[[32],256],8202:[[32],256],8209:[[8208],256],8215:[[32,819],256],8228:[[46],256],8229:[[46,46],256],8230:[[46,46,46],256],8239:[[32],256],8243:[[8242,8242],256],8244:[[8242,8242,8242],256],8246:[[8245,8245],256],8247:[[8245,8245,8245],256],8252:[[33,33],256],8254:[[32,773],256],8263:[[63,63],256],8264:[[63,33],256],8265:[[33,63],256],8279:[[8242,8242,8242,8242],256],8287:[[32],256],8304:[[48],256],8305:[[105],256],8308:[[52],256],8309:[[53],256],8310:[[54],256],8311:[[55],256],8312:[[56],256],8313:[[57],256],8314:[[43],256],8315:[[8722],256],8316:[[61],256],8317:[[40],256],8318:[[41],256],8319:[[110],256],8320:[[48],256],8321:[[49],256],8322:[[50],256],8323:[[51],256],8324:[[52],256],8325:[[53],256],8326:[[54],256],8327:[[55],256],8328:[[56],256],8329:[[57],256],8330:[[43],256],8331:[[8722],256],8332:[[61],256],8333:[[40],256],8334:[[41],256],8336:[[97],256],8337:[[101],256],8338:[[111],256],8339:[[120],256],8340:[[601],256],8341:[[104],256],8342:[[107],256],8343:[[108],256],8344:[[109],256],8345:[[110],256],8346:[[112],256],8347:[[115],256],8348:[[116],256],8360:[[82,115],256],8400:[,230],8401:[,230],8402:[,1],8403:[,1],8404:[,230],8405:[,230],8406:[,230],8407:[,230],8408:[,1],8409:[,1],8410:[,1],8411:[,230],8412:[,230],8417:[,230],8421:[,1],8422:[,1],8423:[,230],8424:[,220],8425:[,230],8426:[,1],8427:[,1],8428:[,220],8429:[,220],8430:[,220],8431:[,220],8432:[,230]},
-8448:{8448:[[97,47,99],256],8449:[[97,47,115],256],8450:[[67],256],8451:[[176,67],256],8453:[[99,47,111],256],8454:[[99,47,117],256],8455:[[400],256],8457:[[176,70],256],8458:[[103],256],8459:[[72],256],8460:[[72],256],8461:[[72],256],8462:[[104],256],8463:[[295],256],8464:[[73],256],8465:[[73],256],8466:[[76],256],8467:[[108],256],8469:[[78],256],8470:[[78,111],256],8473:[[80],256],8474:[[81],256],8475:[[82],256],8476:[[82],256],8477:[[82],256],8480:[[83,77],256],8481:[[84,69,76],256],8482:[[84,77],256],8484:[[90],256],8486:[[937]],8488:[[90],256],8490:[[75]],8491:[[197]],8492:[[66],256],8493:[[67],256],8495:[[101],256],8496:[[69],256],8497:[[70],256],8499:[[77],256],8500:[[111],256],8501:[[1488],256],8502:[[1489],256],8503:[[1490],256],8504:[[1491],256],8505:[[105],256],8507:[[70,65,88],256],8508:[[960],256],8509:[[947],256],8510:[[915],256],8511:[[928],256],8512:[[8721],256],8517:[[68],256],8518:[[100],256],8519:[[101],256],8520:[[105],256],8521:[[106],256],8528:[[49,8260,55],256],8529:[[49,8260,57],256],8530:[[49,8260,49,48],256],8531:[[49,8260,51],256],8532:[[50,8260,51],256],8533:[[49,8260,53],256],8534:[[50,8260,53],256],8535:[[51,8260,53],256],8536:[[52,8260,53],256],8537:[[49,8260,54],256],8538:[[53,8260,54],256],8539:[[49,8260,56],256],8540:[[51,8260,56],256],8541:[[53,8260,56],256],8542:[[55,8260,56],256],8543:[[49,8260],256],8544:[[73],256],8545:[[73,73],256],8546:[[73,73,73],256],8547:[[73,86],256],8548:[[86],256],8549:[[86,73],256],8550:[[86,73,73],256],8551:[[86,73,73,73],256],8552:[[73,88],256],8553:[[88],256],8554:[[88,73],256],8555:[[88,73,73],256],8556:[[76],256],8557:[[67],256],8558:[[68],256],8559:[[77],256],8560:[[105],256],8561:[[105,105],256],8562:[[105,105,105],256],8563:[[105,118],256],8564:[[118],256],8565:[[118,105],256],8566:[[118,105,105],256],8567:[[118,105,105,105],256],8568:[[105,120],256],8569:[[120],256],8570:[[120,105],256],8571:[[120,105,105],256],8572:[[108],256],8573:[[99],256],8574:[[100],256],8575:[[109],256],8585:[[48,8260,51],256],8592:[,,{824:8602}],8594:[,,{824:8603}],8596:[,,{824:8622}],8602:[[8592,824]],8603:[[8594,824]],8622:[[8596,824]],8653:[[8656,824]],8654:[[8660,824]],8655:[[8658,824]],8656:[,,{824:8653}],8658:[,,{824:8655}],8660:[,,{824:8654}]},
-8704:{8707:[,,{824:8708}],8708:[[8707,824]],8712:[,,{824:8713}],8713:[[8712,824]],8715:[,,{824:8716}],8716:[[8715,824]],8739:[,,{824:8740}],8740:[[8739,824]],8741:[,,{824:8742}],8742:[[8741,824]],8748:[[8747,8747],256],8749:[[8747,8747,8747],256],8751:[[8750,8750],256],8752:[[8750,8750,8750],256],8764:[,,{824:8769}],8769:[[8764,824]],8771:[,,{824:8772}],8772:[[8771,824]],8773:[,,{824:8775}],8775:[[8773,824]],8776:[,,{824:8777}],8777:[[8776,824]],8781:[,,{824:8813}],8800:[[61,824]],8801:[,,{824:8802}],8802:[[8801,824]],8804:[,,{824:8816}],8805:[,,{824:8817}],8813:[[8781,824]],8814:[[60,824]],8815:[[62,824]],8816:[[8804,824]],8817:[[8805,824]],8818:[,,{824:8820}],8819:[,,{824:8821}],8820:[[8818,824]],8821:[[8819,824]],8822:[,,{824:8824}],8823:[,,{824:8825}],8824:[[8822,824]],8825:[[8823,824]],8826:[,,{824:8832}],8827:[,,{824:8833}],8828:[,,{824:8928}],8829:[,,{824:8929}],8832:[[8826,824]],8833:[[8827,824]],8834:[,,{824:8836}],8835:[,,{824:8837}],8836:[[8834,824]],8837:[[8835,824]],8838:[,,{824:8840}],8839:[,,{824:8841}],8840:[[8838,824]],8841:[[8839,824]],8849:[,,{824:8930}],8850:[,,{824:8931}],8866:[,,{824:8876}],8872:[,,{824:8877}],8873:[,,{824:8878}],8875:[,,{824:8879}],8876:[[8866,824]],8877:[[8872,824]],8878:[[8873,824]],8879:[[8875,824]],8882:[,,{824:8938}],8883:[,,{824:8939}],8884:[,,{824:8940}],8885:[,,{824:8941}],8928:[[8828,824]],8929:[[8829,824]],8930:[[8849,824]],8931:[[8850,824]],8938:[[8882,824]],8939:[[8883,824]],8940:[[8884,824]],8941:[[8885,824]]},
-8960:{9001:[[12296]],9002:[[12297]]},
-9216:{9312:[[49],256],9313:[[50],256],9314:[[51],256],9315:[[52],256],9316:[[53],256],9317:[[54],256],9318:[[55],256],9319:[[56],256],9320:[[57],256],9321:[[49,48],256],9322:[[49,49],256],9323:[[49,50],256],9324:[[49,51],256],9325:[[49,52],256],9326:[[49,53],256],9327:[[49,54],256],9328:[[49,55],256],9329:[[49,56],256],9330:[[49,57],256],9331:[[50,48],256],9332:[[40,49,41],256],9333:[[40,50,41],256],9334:[[40,51,41],256],9335:[[40,52,41],256],9336:[[40,53,41],256],9337:[[40,54,41],256],9338:[[40,55,41],256],9339:[[40,56,41],256],9340:[[40,57,41],256],9341:[[40,49,48,41],256],9342:[[40,49,49,41],256],9343:[[40,49,50,41],256],9344:[[40,49,51,41],256],9345:[[40,49,52,41],256],9346:[[40,49,53,41],256],9347:[[40,49,54,41],256],9348:[[40,49,55,41],256],9349:[[40,49,56,41],256],9350:[[40,49,57,41],256],9351:[[40,50,48,41],256],9352:[[49,46],256],9353:[[50,46],256],9354:[[51,46],256],9355:[[52,46],256],9356:[[53,46],256],9357:[[54,46],256],9358:[[55,46],256],9359:[[56,46],256],9360:[[57,46],256],9361:[[49,48,46],256],9362:[[49,49,46],256],9363:[[49,50,46],256],9364:[[49,51,46],256],9365:[[49,52,46],256],9366:[[49,53,46],256],9367:[[49,54,46],256],9368:[[49,55,46],256],9369:[[49,56,46],256],9370:[[49,57,46],256],9371:[[50,48,46],256],9372:[[40,97,41],256],9373:[[40,98,41],256],9374:[[40,99,41],256],9375:[[40,100,41],256],9376:[[40,101,41],256],9377:[[40,102,41],256],9378:[[40,103,41],256],9379:[[40,104,41],256],9380:[[40,105,41],256],9381:[[40,106,41],256],9382:[[40,107,41],256],9383:[[40,108,41],256],9384:[[40,109,41],256],9385:[[40,110,41],256],9386:[[40,111,41],256],9387:[[40,112,41],256],9388:[[40,113,41],256],9389:[[40,114,41],256],9390:[[40,115,41],256],9391:[[40,116,41],256],9392:[[40,117,41],256],9393:[[40,118,41],256],9394:[[40,119,41],256],9395:[[40,120,41],256],9396:[[40,121,41],256],9397:[[40,122,41],256],9398:[[65],256],9399:[[66],256],9400:[[67],256],9401:[[68],256],9402:[[69],256],9403:[[70],256],9404:[[71],256],9405:[[72],256],9406:[[73],256],9407:[[74],256],9408:[[75],256],9409:[[76],256],9410:[[77],256],9411:[[78],256],9412:[[79],256],9413:[[80],256],9414:[[81],256],9415:[[82],256],9416:[[83],256],9417:[[84],256],9418:[[85],256],9419:[[86],256],9420:[[87],256],9421:[[88],256],9422:[[89],256],9423:[[90],256],9424:[[97],256],9425:[[98],256],9426:[[99],256],9427:[[100],256],9428:[[101],256],9429:[[102],256],9430:[[103],256],9431:[[104],256],9432:[[105],256],9433:[[106],256],9434:[[107],256],9435:[[108],256],9436:[[109],256],9437:[[110],256],9438:[[111],256],9439:[[112],256],9440:[[113],256],9441:[[114],256],9442:[[115],256],9443:[[116],256],9444:[[117],256],9445:[[118],256],9446:[[119],256],9447:[[120],256],9448:[[121],256],9449:[[122],256],9450:[[48],256]},
-10752:{10764:[[8747,8747,8747,8747],256],10868:[[58,58,61],256],10869:[[61,61],256],10870:[[61,61,61],256],10972:[[10973,824],512]},
-11264:{11388:[[106],256],11389:[[86],256],11503:[,230],11504:[,230],11505:[,230]},
-11520:{11631:[[11617],256],11647:[,9],11744:[,230],11745:[,230],11746:[,230],11747:[,230],11748:[,230],11749:[,230],11750:[,230],11751:[,230],11752:[,230],11753:[,230],11754:[,230],11755:[,230],11756:[,230],11757:[,230],11758:[,230],11759:[,230],11760:[,230],11761:[,230],11762:[,230],11763:[,230],11764:[,230],11765:[,230],11766:[,230],11767:[,230],11768:[,230],11769:[,230],11770:[,230],11771:[,230],11772:[,230],11773:[,230],11774:[,230],11775:[,230]},
-11776:{11935:[[27597],256],12019:[[40863],256]},
-12032:{12032:[[19968],256],12033:[[20008],256],12034:[[20022],256],12035:[[20031],256],12036:[[20057],256],12037:[[20101],256],12038:[[20108],256],12039:[[20128],256],12040:[[20154],256],12041:[[20799],256],12042:[[20837],256],12043:[[20843],256],12044:[[20866],256],12045:[[20886],256],12046:[[20907],256],12047:[[20960],256],12048:[[20981],256],12049:[[20992],256],12050:[[21147],256],12051:[[21241],256],12052:[[21269],256],12053:[[21274],256],12054:[[21304],256],12055:[[21313],256],12056:[[21340],256],12057:[[21353],256],12058:[[21378],256],12059:[[21430],256],12060:[[21448],256],12061:[[21475],256],12062:[[22231],256],12063:[[22303],256],12064:[[22763],256],12065:[[22786],256],12066:[[22794],256],12067:[[22805],256],12068:[[22823],256],12069:[[22899],256],12070:[[23376],256],12071:[[23424],256],12072:[[23544],256],12073:[[23567],256],12074:[[23586],256],12075:[[23608],256],12076:[[23662],256],12077:[[23665],256],12078:[[24027],256],12079:[[24037],256],12080:[[24049],256],12081:[[24062],256],12082:[[24178],256],12083:[[24186],256],12084:[[24191],256],12085:[[24308],256],12086:[[24318],256],12087:[[24331],256],12088:[[24339],256],12089:[[24400],256],12090:[[24417],256],12091:[[24435],256],12092:[[24515],256],12093:[[25096],256],12094:[[25142],256],12095:[[25163],256],12096:[[25903],256],12097:[[25908],256],12098:[[25991],256],12099:[[26007],256],12100:[[26020],256],12101:[[26041],256],12102:[[26080],256],12103:[[26085],256],12104:[[26352],256],12105:[[26376],256],12106:[[26408],256],12107:[[27424],256],12108:[[27490],256],12109:[[27513],256],12110:[[27571],256],12111:[[27595],256],12112:[[27604],256],12113:[[27611],256],12114:[[27663],256],12115:[[27668],256],12116:[[27700],256],12117:[[28779],256],12118:[[29226],256],12119:[[29238],256],12120:[[29243],256],12121:[[29247],256],12122:[[29255],256],12123:[[29273],256],12124:[[29275],256],12125:[[29356],256],12126:[[29572],256],12127:[[29577],256],12128:[[29916],256],12129:[[29926],256],12130:[[29976],256],12131:[[29983],256],12132:[[29992],256],12133:[[30000],256],12134:[[30091],256],12135:[[30098],256],12136:[[30326],256],12137:[[30333],256],12138:[[30382],256],12139:[[30399],256],12140:[[30446],256],12141:[[30683],256],12142:[[30690],256],12143:[[30707],256],12144:[[31034],256],12145:[[31160],256],12146:[[31166],256],12147:[[31348],256],12148:[[31435],256],12149:[[31481],256],12150:[[31859],256],12151:[[31992],256],12152:[[32566],256],12153:[[32593],256],12154:[[32650],256],12155:[[32701],256],12156:[[32769],256],12157:[[32780],256],12158:[[32786],256],12159:[[32819],256],12160:[[32895],256],12161:[[32905],256],12162:[[33251],256],12163:[[33258],256],12164:[[33267],256],12165:[[33276],256],12166:[[33292],256],12167:[[33307],256],12168:[[33311],256],12169:[[33390],256],12170:[[33394],256],12171:[[33400],256],12172:[[34381],256],12173:[[34411],256],12174:[[34880],256],12175:[[34892],256],12176:[[34915],256],12177:[[35198],256],12178:[[35211],256],12179:[[35282],256],12180:[[35328],256],12181:[[35895],256],12182:[[35910],256],12183:[[35925],256],12184:[[35960],256],12185:[[35997],256],12186:[[36196],256],12187:[[36208],256],12188:[[36275],256],12189:[[36523],256],12190:[[36554],256],12191:[[36763],256],12192:[[36784],256],12193:[[36789],256],12194:[[37009],256],12195:[[37193],256],12196:[[37318],256],12197:[[37324],256],12198:[[37329],256],12199:[[38263],256],12200:[[38272],256],12201:[[38428],256],12202:[[38582],256],12203:[[38585],256],12204:[[38632],256],12205:[[38737],256],12206:[[38750],256],12207:[[38754],256],12208:[[38761],256],12209:[[38859],256],12210:[[38893],256],12211:[[38899],256],12212:[[38913],256],12213:[[39080],256],12214:[[39131],256],12215:[[39135],256],12216:[[39318],256],12217:[[39321],256],12218:[[39340],256],12219:[[39592],256],12220:[[39640],256],12221:[[39647],256],12222:[[39717],256],12223:[[39727],256],12224:[[39730],256],12225:[[39740],256],12226:[[39770],256],12227:[[40165],256],12228:[[40565],256],12229:[[40575],256],12230:[[40613],256],12231:[[40635],256],12232:[[40643],256],12233:[[40653],256],12234:[[40657],256],12235:[[40697],256],12236:[[40701],256],12237:[[40718],256],12238:[[40723],256],12239:[[40736],256],12240:[[40763],256],12241:[[40778],256],12242:[[40786],256],12243:[[40845],256],12244:[[40860],256],12245:[[40864],256]},
-12288:{12288:[[32],256],12330:[,218],12331:[,228],12332:[,232],12333:[,222],12334:[,224],12335:[,224],12342:[[12306],256],12344:[[21313],256],12345:[[21316],256],12346:[[21317],256],12358:[,,{12441:12436}],12363:[,,{12441:12364}],12364:[[12363,12441]],12365:[,,{12441:12366}],12366:[[12365,12441]],12367:[,,{12441:12368}],12368:[[12367,12441]],12369:[,,{12441:12370}],12370:[[12369,12441]],12371:[,,{12441:12372}],12372:[[12371,12441]],12373:[,,{12441:12374}],12374:[[12373,12441]],12375:[,,{12441:12376}],12376:[[12375,12441]],12377:[,,{12441:12378}],12378:[[12377,12441]],12379:[,,{12441:12380}],12380:[[12379,12441]],12381:[,,{12441:12382}],12382:[[12381,12441]],12383:[,,{12441:12384}],12384:[[12383,12441]],12385:[,,{12441:12386}],12386:[[12385,12441]],12388:[,,{12441:12389}],12389:[[12388,12441]],12390:[,,{12441:12391}],12391:[[12390,12441]],12392:[,,{12441:12393}],12393:[[12392,12441]],12399:[,,{12441:12400,12442:12401}],12400:[[12399,12441]],12401:[[12399,12442]],12402:[,,{12441:12403,12442:12404}],12403:[[12402,12441]],12404:[[12402,12442]],12405:[,,{12441:12406,12442:12407}],12406:[[12405,12441]],12407:[[12405,12442]],12408:[,,{12441:12409,12442:12410}],12409:[[12408,12441]],12410:[[12408,12442]],12411:[,,{12441:12412,12442:12413}],12412:[[12411,12441]],12413:[[12411,12442]],12436:[[12358,12441]],12441:[,8],12442:[,8],12443:[[32,12441],256],12444:[[32,12442],256],12445:[,,{12441:12446}],12446:[[12445,12441]],12447:[[12424,12426],256],12454:[,,{12441:12532}],12459:[,,{12441:12460}],12460:[[12459,12441]],12461:[,,{12441:12462}],12462:[[12461,12441]],12463:[,,{12441:12464}],12464:[[12463,12441]],12465:[,,{12441:12466}],12466:[[12465,12441]],12467:[,,{12441:12468}],12468:[[12467,12441]],12469:[,,{12441:12470}],12470:[[12469,12441]],12471:[,,{12441:12472}],12472:[[12471,12441]],12473:[,,{12441:12474}],12474:[[12473,12441]],12475:[,,{12441:12476}],12476:[[12475,12441]],12477:[,,{12441:12478}],12478:[[12477,12441]],12479:[,,{12441:12480}],12480:[[12479,12441]],12481:[,,{12441:12482}],12482:[[12481,12441]],12484:[,,{12441:12485}],12485:[[12484,12441]],12486:[,,{12441:12487}],12487:[[12486,12441]],12488:[,,{12441:12489}],12489:[[12488,12441]],12495:[,,{12441:12496,12442:12497}],12496:[[12495,12441]],12497:[[12495,12442]],12498:[,,{12441:12499,12442:12500}],12499:[[12498,12441]],12500:[[12498,12442]],12501:[,,{12441:12502,12442:12503}],12502:[[12501,12441]],12503:[[12501,12442]],12504:[,,{12441:12505,12442:12506}],12505:[[12504,12441]],12506:[[12504,12442]],12507:[,,{12441:12508,12442:12509}],12508:[[12507,12441]],12509:[[12507,12442]],12527:[,,{12441:12535}],12528:[,,{12441:12536}],12529:[,,{12441:12537}],12530:[,,{12441:12538}],12532:[[12454,12441]],12535:[[12527,12441]],12536:[[12528,12441]],12537:[[12529,12441]],12538:[[12530,12441]],12541:[,,{12441:12542}],12542:[[12541,12441]],12543:[[12467,12488],256]},
-12544:{12593:[[4352],256],12594:[[4353],256],12595:[[4522],256],12596:[[4354],256],12597:[[4524],256],12598:[[4525],256],12599:[[4355],256],12600:[[4356],256],12601:[[4357],256],12602:[[4528],256],12603:[[4529],256],12604:[[4530],256],12605:[[4531],256],12606:[[4532],256],12607:[[4533],256],12608:[[4378],256],12609:[[4358],256],12610:[[4359],256],12611:[[4360],256],12612:[[4385],256],12613:[[4361],256],12614:[[4362],256],12615:[[4363],256],12616:[[4364],256],12617:[[4365],256],12618:[[4366],256],12619:[[4367],256],12620:[[4368],256],12621:[[4369],256],12622:[[4370],256],12623:[[4449],256],12624:[[4450],256],12625:[[4451],256],12626:[[4452],256],12627:[[4453],256],12628:[[4454],256],12629:[[4455],256],12630:[[4456],256],12631:[[4457],256],12632:[[4458],256],12633:[[4459],256],12634:[[4460],256],12635:[[4461],256],12636:[[4462],256],12637:[[4463],256],12638:[[4464],256],12639:[[4465],256],12640:[[4466],256],12641:[[4467],256],12642:[[4468],256],12643:[[4469],256],12644:[[4448],256],12645:[[4372],256],12646:[[4373],256],12647:[[4551],256],12648:[[4552],256],12649:[[4556],256],12650:[[4558],256],12651:[[4563],256],12652:[[4567],256],12653:[[4569],256],12654:[[4380],256],12655:[[4573],256],12656:[[4575],256],12657:[[4381],256],12658:[[4382],256],12659:[[4384],256],12660:[[4386],256],12661:[[4387],256],12662:[[4391],256],12663:[[4393],256],12664:[[4395],256],12665:[[4396],256],12666:[[4397],256],12667:[[4398],256],12668:[[4399],256],12669:[[4402],256],12670:[[4406],256],12671:[[4416],256],12672:[[4423],256],12673:[[4428],256],12674:[[4593],256],12675:[[4594],256],12676:[[4439],256],12677:[[4440],256],12678:[[4441],256],12679:[[4484],256],12680:[[4485],256],12681:[[4488],256],12682:[[4497],256],12683:[[4498],256],12684:[[4500],256],12685:[[4510],256],12686:[[4513],256],12690:[[19968],256],12691:[[20108],256],12692:[[19977],256],12693:[[22235],256],12694:[[19978],256],12695:[[20013],256],12696:[[19979],256],12697:[[30002],256],12698:[[20057],256],12699:[[19993],256],12700:[[19969],256],12701:[[22825],256],12702:[[22320],256],12703:[[20154],256]},
-12800:{12800:[[40,4352,41],256],12801:[[40,4354,41],256],12802:[[40,4355,41],256],12803:[[40,4357,41],256],12804:[[40,4358,41],256],12805:[[40,4359,41],256],12806:[[40,4361,41],256],12807:[[40,4363,41],256],12808:[[40,4364,41],256],12809:[[40,4366,41],256],12810:[[40,4367,41],256],12811:[[40,4368,41],256],12812:[[40,4369,41],256],12813:[[40,4370,41],256],12814:[[40,4352,4449,41],256],12815:[[40,4354,4449,41],256],12816:[[40,4355,4449,41],256],12817:[[40,4357,4449,41],256],12818:[[40,4358,4449,41],256],12819:[[40,4359,4449,41],256],12820:[[40,4361,4449,41],256],12821:[[40,4363,4449,41],256],12822:[[40,4364,4449,41],256],12823:[[40,4366,4449,41],256],12824:[[40,4367,4449,41],256],12825:[[40,4368,4449,41],256],12826:[[40,4369,4449,41],256],12827:[[40,4370,4449,41],256],12828:[[40,4364,4462,41],256],12829:[[40,4363,4457,4364,4453,4523,41],256],12830:[[40,4363,4457,4370,4462,41],256],12832:[[40,19968,41],256],12833:[[40,20108,41],256],12834:[[40,19977,41],256],12835:[[40,22235,41],256],12836:[[40,20116,41],256],12837:[[40,20845,41],256],12838:[[40,19971,41],256],12839:[[40,20843,41],256],12840:[[40,20061,41],256],12841:[[40,21313,41],256],12842:[[40,26376,41],256],12843:[[40,28779,41],256],12844:[[40,27700,41],256],12845:[[40,26408,41],256],12846:[[40,37329,41],256],12847:[[40,22303,41],256],12848:[[40,26085,41],256],12849:[[40,26666,41],256],12850:[[40,26377,41],256],12851:[[40,31038,41],256],12852:[[40,21517,41],256],12853:[[40,29305,41],256],12854:[[40,36001,41],256],12855:[[40,31069,41],256],12856:[[40,21172,41],256],12857:[[40,20195,41],256],12858:[[40,21628,41],256],12859:[[40,23398,41],256],12860:[[40,30435,41],256],12861:[[40,20225,41],256],12862:[[40,36039,41],256],12863:[[40,21332,41],256],12864:[[40,31085,41],256],12865:[[40,20241,41],256],12866:[[40,33258,41],256],12867:[[40,33267,41],256],12868:[[21839],256],12869:[[24188],256],12870:[[25991],256],12871:[[31631],256],12880:[[80,84,69],256],12881:[[50,49],256],12882:[[50,50],256],12883:[[50,51],256],12884:[[50,52],256],12885:[[50,53],256],12886:[[50,54],256],12887:[[50,55],256],12888:[[50,56],256],12889:[[50,57],256],12890:[[51,48],256],12891:[[51,49],256],12892:[[51,50],256],12893:[[51,51],256],12894:[[51,52],256],12895:[[51,53],256],12896:[[4352],256],12897:[[4354],256],12898:[[4355],256],12899:[[4357],256],12900:[[4358],256],12901:[[4359],256],12902:[[4361],256],12903:[[4363],256],12904:[[4364],256],12905:[[4366],256],12906:[[4367],256],12907:[[4368],256],12908:[[4369],256],12909:[[4370],256],12910:[[4352,4449],256],12911:[[4354,4449],256],12912:[[4355,4449],256],12913:[[4357,4449],256],12914:[[4358,4449],256],12915:[[4359,4449],256],12916:[[4361,4449],256],12917:[[4363,4449],256],12918:[[4364,4449],256],12919:[[4366,4449],256],12920:[[4367,4449],256],12921:[[4368,4449],256],12922:[[4369,4449],256],12923:[[4370,4449],256],12924:[[4366,4449,4535,4352,4457],256],12925:[[4364,4462,4363,4468],256],12926:[[4363,4462],256],12928:[[19968],256],12929:[[20108],256],12930:[[19977],256],12931:[[22235],256],12932:[[20116],256],12933:[[20845],256],12934:[[19971],256],12935:[[20843],256],12936:[[20061],256],12937:[[21313],256],12938:[[26376],256],12939:[[28779],256],12940:[[27700],256],12941:[[26408],256],12942:[[37329],256],12943:[[22303],256],12944:[[26085],256],12945:[[26666],256],12946:[[26377],256],12947:[[31038],256],12948:[[21517],256],12949:[[29305],256],12950:[[36001],256],12951:[[31069],256],12952:[[21172],256],12953:[[31192],256],12954:[[30007],256],12955:[[22899],256],12956:[[36969],256],12957:[[20778],256],12958:[[21360],256],12959:[[27880],256],12960:[[38917],256],12961:[[20241],256],12962:[[20889],256],12963:[[27491],256],12964:[[19978],256],12965:[[20013],256],12966:[[19979],256],12967:[[24038],256],12968:[[21491],256],12969:[[21307],256],12970:[[23447],256],12971:[[23398],256],12972:[[30435],256],12973:[[20225],256],12974:[[36039],256],12975:[[21332],256],12976:[[22812],256],12977:[[51,54],256],12978:[[51,55],256],12979:[[51,56],256],12980:[[51,57],256],12981:[[52,48],256],12982:[[52,49],256],12983:[[52,50],256],12984:[[52,51],256],12985:[[52,52],256],12986:[[52,53],256],12987:[[52,54],256],12988:[[52,55],256],12989:[[52,56],256],12990:[[52,57],256],12991:[[53,48],256],12992:[[49,26376],256],12993:[[50,26376],256],12994:[[51,26376],256],12995:[[52,26376],256],12996:[[53,26376],256],12997:[[54,26376],256],12998:[[55,26376],256],12999:[[56,26376],256],13000:[[57,26376],256],13001:[[49,48,26376],256],13002:[[49,49,26376],256],13003:[[49,50,26376],256],13004:[[72,103],256],13005:[[101,114,103],256],13006:[[101,86],256],13007:[[76,84,68],256],13008:[[12450],256],13009:[[12452],256],13010:[[12454],256],13011:[[12456],256],13012:[[12458],256],13013:[[12459],256],13014:[[12461],256],13015:[[12463],256],13016:[[12465],256],13017:[[12467],256],13018:[[12469],256],13019:[[12471],256],13020:[[12473],256],13021:[[12475],256],13022:[[12477],256],13023:[[12479],256],13024:[[12481],256],13025:[[12484],256],13026:[[12486],256],13027:[[12488],256],13028:[[12490],256],13029:[[12491],256],13030:[[12492],256],13031:[[12493],256],13032:[[12494],256],13033:[[12495],256],13034:[[12498],256],13035:[[12501],256],13036:[[12504],256],13037:[[12507],256],13038:[[12510],256],13039:[[12511],256],13040:[[12512],256],13041:[[12513],256],13042:[[12514],256],13043:[[12516],256],13044:[[12518],256],13045:[[12520],256],13046:[[12521],256],13047:[[12522],256],13048:[[12523],256],13049:[[12524],256],13050:[[12525],256],13051:[[12527],256],13052:[[12528],256],13053:[[12529],256],13054:[[12530],256]},
-13056:{13056:[[12450,12497,12540,12488],256],13057:[[12450,12523,12501,12449],256],13058:[[12450,12531,12506,12450],256],13059:[[12450,12540,12523],256],13060:[[12452,12491,12531,12464],256],13061:[[12452,12531,12481],256],13062:[[12454,12457,12531],256],13063:[[12456,12473,12463,12540,12489],256],13064:[[12456,12540,12459,12540],256],13065:[[12458,12531,12473],256],13066:[[12458,12540,12512],256],13067:[[12459,12452,12522],256],13068:[[12459,12521,12483,12488],256],13069:[[12459,12525,12522,12540],256],13070:[[12460,12525,12531],256],13071:[[12460,12531,12510],256],13072:[[12462,12460],256],13073:[[12462,12491,12540],256],13074:[[12461,12517,12522,12540],256],13075:[[12462,12523,12480,12540],256],13076:[[12461,12525],256],13077:[[12461,12525,12464,12521,12512],256],13078:[[12461,12525,12513,12540,12488,12523],256],13079:[[12461,12525,12527,12483,12488],256],13080:[[12464,12521,12512],256],13081:[[12464,12521,12512,12488,12531],256],13082:[[12463,12523,12476,12452,12525],256],13083:[[12463,12525,12540,12493],256],13084:[[12465,12540,12473],256],13085:[[12467,12523,12490],256],13086:[[12467,12540,12509],256],13087:[[12469,12452,12463,12523],256],13088:[[12469,12531,12481,12540,12512],256],13089:[[12471,12522,12531,12464],256],13090:[[12475,12531,12481],256],13091:[[12475,12531,12488],256],13092:[[12480,12540,12473],256],13093:[[12487,12471],256],13094:[[12489,12523],256],13095:[[12488,12531],256],13096:[[12490,12494],256],13097:[[12494,12483,12488],256],13098:[[12495,12452,12484],256],13099:[[12497,12540,12475,12531,12488],256],13100:[[12497,12540,12484],256],13101:[[12496,12540,12524,12523],256],13102:[[12500,12450,12473,12488,12523],256],13103:[[12500,12463,12523],256],13104:[[12500,12467],256],13105:[[12499,12523],256],13106:[[12501,12449,12521,12483,12489],256],13107:[[12501,12451,12540,12488],256],13108:[[12502,12483,12471,12455,12523],256],13109:[[12501,12521,12531],256],13110:[[12504,12463,12479,12540,12523],256],13111:[[12506,12477],256],13112:[[12506,12491,12498],256],13113:[[12504,12523,12484],256],13114:[[12506,12531,12473],256],13115:[[12506,12540,12472],256],13116:[[12505,12540,12479],256],13117:[[12509,12452,12531,12488],256],13118:[[12508,12523,12488],256],13119:[[12507,12531],256],13120:[[12509,12531,12489],256],13121:[[12507,12540,12523],256],13122:[[12507,12540,12531],256],13123:[[12510,12452,12463,12525],256],13124:[[12510,12452,12523],256],13125:[[12510,12483,12495],256],13126:[[12510,12523,12463],256],13127:[[12510,12531,12471,12519,12531],256],13128:[[12511,12463,12525,12531],256],13129:[[12511,12522],256],13130:[[12511,12522,12496,12540,12523],256],13131:[[12513,12460],256],13132:[[12513,12460,12488,12531],256],13133:[[12513,12540,12488,12523],256],13134:[[12516,12540,12489],256],13135:[[12516,12540,12523],256],13136:[[12518,12450,12531],256],13137:[[12522,12483,12488,12523],256],13138:[[12522,12521],256],13139:[[12523,12500,12540],256],13140:[[12523,12540,12502,12523],256],13141:[[12524,12512],256],13142:[[12524,12531,12488,12466,12531],256],13143:[[12527,12483,12488],256],13144:[[48,28857],256],13145:[[49,28857],256],13146:[[50,28857],256],13147:[[51,28857],256],13148:[[52,28857],256],13149:[[53,28857],256],13150:[[54,28857],256],13151:[[55,28857],256],13152:[[56,28857],256],13153:[[57,28857],256],13154:[[49,48,28857],256],13155:[[49,49,28857],256],13156:[[49,50,28857],256],13157:[[49,51,28857],256],13158:[[49,52,28857],256],13159:[[49,53,28857],256],13160:[[49,54,28857],256],13161:[[49,55,28857],256],13162:[[49,56,28857],256],13163:[[49,57,28857],256],13164:[[50,48,28857],256],13165:[[50,49,28857],256],13166:[[50,50,28857],256],13167:[[50,51,28857],256],13168:[[50,52,28857],256],13169:[[104,80,97],256],13170:[[100,97],256],13171:[[65,85],256],13172:[[98,97,114],256],13173:[[111,86],256],13174:[[112,99],256],13175:[[100,109],256],13176:[[100,109,178],256],13177:[[100,109,179],256],13178:[[73,85],256],13179:[[24179,25104],256],13180:[[26157,21644],256],13181:[[22823,27491],256],13182:[[26126,27835],256],13183:[[26666,24335,20250,31038],256],13184:[[112,65],256],13185:[[110,65],256],13186:[[956,65],256],13187:[[109,65],256],13188:[[107,65],256],13189:[[75,66],256],13190:[[77,66],256],13191:[[71,66],256],13192:[[99,97,108],256],13193:[[107,99,97,108],256],13194:[[112,70],256],13195:[[110,70],256],13196:[[956,70],256],13197:[[956,103],256],13198:[[109,103],256],13199:[[107,103],256],13200:[[72,122],256],13201:[[107,72,122],256],13202:[[77,72,122],256],13203:[[71,72,122],256],13204:[[84,72,122],256],13205:[[956,8467],256],13206:[[109,8467],256],13207:[[100,8467],256],13208:[[107,8467],256],13209:[[102,109],256],13210:[[110,109],256],13211:[[956,109],256],13212:[[109,109],256],13213:[[99,109],256],13214:[[107,109],256],13215:[[109,109,178],256],13216:[[99,109,178],256],13217:[[109,178],256],13218:[[107,109,178],256],13219:[[109,109,179],256],13220:[[99,109,179],256],13221:[[109,179],256],13222:[[107,109,179],256],13223:[[109,8725,115],256],13224:[[109,8725,115,178],256],13225:[[80,97],256],13226:[[107,80,97],256],13227:[[77,80,97],256],13228:[[71,80,97],256],13229:[[114,97,100],256],13230:[[114,97,100,8725,115],256],13231:[[114,97,100,8725,115,178],256],13232:[[112,115],256],13233:[[110,115],256],13234:[[956,115],256],13235:[[109,115],256],13236:[[112,86],256],13237:[[110,86],256],13238:[[956,86],256],13239:[[109,86],256],13240:[[107,86],256],13241:[[77,86],256],13242:[[112,87],256],13243:[[110,87],256],13244:[[956,87],256],13245:[[109,87],256],13246:[[107,87],256],13247:[[77,87],256],13248:[[107,937],256],13249:[[77,937],256],13250:[[97,46,109,46],256],13251:[[66,113],256],13252:[[99,99],256],13253:[[99,100],256],13254:[[67,8725,107,103],256],13255:[[67,111,46],256],13256:[[100,66],256],13257:[[71,121],256],13258:[[104,97],256],13259:[[72,80],256],13260:[[105,110],256],13261:[[75,75],256],13262:[[75,77],256],13263:[[107,116],256],13264:[[108,109],256],13265:[[108,110],256],13266:[[108,111,103],256],13267:[[108,120],256],13268:[[109,98],256],13269:[[109,105,108],256],13270:[[109,111,108],256],13271:[[80,72],256],13272:[[112,46,109,46],256],13273:[[80,80,77],256],13274:[[80,82],256],13275:[[115,114],256],13276:[[83,118],256],13277:[[87,98],256],13278:[[86,8725,109],256],13279:[[65,8725,109],256],13280:[[49,26085],256],13281:[[50,26085],256],13282:[[51,26085],256],13283:[[52,26085],256],13284:[[53,26085],256],13285:[[54,26085],256],13286:[[55,26085],256],13287:[[56,26085],256],13288:[[57,26085],256],13289:[[49,48,26085],256],13290:[[49,49,26085],256],13291:[[49,50,26085],256],13292:[[49,51,26085],256],13293:[[49,52,26085],256],13294:[[49,53,26085],256],13295:[[49,54,26085],256],13296:[[49,55,26085],256],13297:[[49,56,26085],256],13298:[[49,57,26085],256],13299:[[50,48,26085],256],13300:[[50,49,26085],256],13301:[[50,50,26085],256],13302:[[50,51,26085],256],13303:[[50,52,26085],256],13304:[[50,53,26085],256],13305:[[50,54,26085],256],13306:[[50,55,26085],256],13307:[[50,56,26085],256],13308:[[50,57,26085],256],13309:[[51,48,26085],256],13310:[[51,49,26085],256],13311:[[103,97,108],256]},
-27136:{92912:[,1],92913:[,1],92914:[,1],92915:[,1],92916:[,1]},
-27392:{92976:[,230],92977:[,230],92978:[,230],92979:[,230],92980:[,230],92981:[,230],92982:[,230]},
-42496:{42607:[,230],42612:[,230],42613:[,230],42614:[,230],42615:[,230],42616:[,230],42617:[,230],42618:[,230],42619:[,230],42620:[,230],42621:[,230],42652:[[1098],256],42653:[[1100],256],42655:[,230],42736:[,230],42737:[,230]},
-42752:{42864:[[42863],256],43000:[[294],256],43001:[[339],256]},
-43008:{43014:[,9],43204:[,9],43232:[,230],43233:[,230],43234:[,230],43235:[,230],43236:[,230],43237:[,230],43238:[,230],43239:[,230],43240:[,230],43241:[,230],43242:[,230],43243:[,230],43244:[,230],43245:[,230],43246:[,230],43247:[,230],43248:[,230],43249:[,230]},
-43264:{43307:[,220],43308:[,220],43309:[,220],43347:[,9],43443:[,7],43456:[,9]},
-43520:{43696:[,230],43698:[,230],43699:[,230],43700:[,220],43703:[,230],43704:[,230],43710:[,230],43711:[,230],43713:[,230],43766:[,9]},
-43776:{43868:[[42791],256],43869:[[43831],256],43870:[[619],256],43871:[[43858],256],44013:[,9]},
-48128:{113822:[,1]},
-53504:{119134:[[119127,119141],512],119135:[[119128,119141],512],119136:[[119135,119150],512],119137:[[119135,119151],512],119138:[[119135,119152],512],119139:[[119135,119153],512],119140:[[119135,119154],512],119141:[,216],119142:[,216],119143:[,1],119144:[,1],119145:[,1],119149:[,226],119150:[,216],119151:[,216],119152:[,216],119153:[,216],119154:[,216],119163:[,220],119164:[,220],119165:[,220],119166:[,220],119167:[,220],119168:[,220],119169:[,220],119170:[,220],119173:[,230],119174:[,230],119175:[,230],119176:[,230],119177:[,230],119178:[,220],119179:[,220],119210:[,230],119211:[,230],119212:[,230],119213:[,230],119227:[[119225,119141],512],119228:[[119226,119141],512],119229:[[119227,119150],512],119230:[[119228,119150],512],119231:[[119227,119151],512],119232:[[119228,119151],512]},
-53760:{119362:[,230],119363:[,230],119364:[,230]},
-54272:{119808:[[65],256],119809:[[66],256],119810:[[67],256],119811:[[68],256],119812:[[69],256],119813:[[70],256],119814:[[71],256],119815:[[72],256],119816:[[73],256],119817:[[74],256],119818:[[75],256],119819:[[76],256],119820:[[77],256],119821:[[78],256],119822:[[79],256],119823:[[80],256],119824:[[81],256],119825:[[82],256],119826:[[83],256],119827:[[84],256],119828:[[85],256],119829:[[86],256],119830:[[87],256],119831:[[88],256],119832:[[89],256],119833:[[90],256],119834:[[97],256],119835:[[98],256],119836:[[99],256],119837:[[100],256],119838:[[101],256],119839:[[102],256],119840:[[103],256],119841:[[104],256],119842:[[105],256],119843:[[106],256],119844:[[107],256],119845:[[108],256],119846:[[109],256],119847:[[110],256],119848:[[111],256],119849:[[112],256],119850:[[113],256],119851:[[114],256],119852:[[115],256],119853:[[116],256],119854:[[117],256],119855:[[118],256],119856:[[119],256],119857:[[120],256],119858:[[121],256],119859:[[122],256],119860:[[65],256],119861:[[66],256],119862:[[67],256],119863:[[68],256],119864:[[69],256],119865:[[70],256],119866:[[71],256],119867:[[72],256],119868:[[73],256],119869:[[74],256],119870:[[75],256],119871:[[76],256],119872:[[77],256],119873:[[78],256],119874:[[79],256],119875:[[80],256],119876:[[81],256],119877:[[82],256],119878:[[83],256],119879:[[84],256],119880:[[85],256],119881:[[86],256],119882:[[87],256],119883:[[88],256],119884:[[89],256],119885:[[90],256],119886:[[97],256],119887:[[98],256],119888:[[99],256],119889:[[100],256],119890:[[101],256],119891:[[102],256],119892:[[103],256],119894:[[105],256],119895:[[106],256],119896:[[107],256],119897:[[108],256],119898:[[109],256],119899:[[110],256],119900:[[111],256],119901:[[112],256],119902:[[113],256],119903:[[114],256],119904:[[115],256],119905:[[116],256],119906:[[117],256],119907:[[118],256],119908:[[119],256],119909:[[120],256],119910:[[121],256],119911:[[122],256],119912:[[65],256],119913:[[66],256],119914:[[67],256],119915:[[68],256],119916:[[69],256],119917:[[70],256],119918:[[71],256],119919:[[72],256],119920:[[73],256],119921:[[74],256],119922:[[75],256],119923:[[76],256],119924:[[77],256],119925:[[78],256],119926:[[79],256],119927:[[80],256],119928:[[81],256],119929:[[82],256],119930:[[83],256],119931:[[84],256],119932:[[85],256],119933:[[86],256],119934:[[87],256],119935:[[88],256],119936:[[89],256],119937:[[90],256],119938:[[97],256],119939:[[98],256],119940:[[99],256],119941:[[100],256],119942:[[101],256],119943:[[102],256],119944:[[103],256],119945:[[104],256],119946:[[105],256],119947:[[106],256],119948:[[107],256],119949:[[108],256],119950:[[109],256],119951:[[110],256],119952:[[111],256],119953:[[112],256],119954:[[113],256],119955:[[114],256],119956:[[115],256],119957:[[116],256],119958:[[117],256],119959:[[118],256],119960:[[119],256],119961:[[120],256],119962:[[121],256],119963:[[122],256],119964:[[65],256],119966:[[67],256],119967:[[68],256],119970:[[71],256],119973:[[74],256],119974:[[75],256],119977:[[78],256],119978:[[79],256],119979:[[80],256],119980:[[81],256],119982:[[83],256],119983:[[84],256],119984:[[85],256],119985:[[86],256],119986:[[87],256],119987:[[88],256],119988:[[89],256],119989:[[90],256],119990:[[97],256],119991:[[98],256],119992:[[99],256],119993:[[100],256],119995:[[102],256],119997:[[104],256],119998:[[105],256],119999:[[106],256],120000:[[107],256],120001:[[108],256],120002:[[109],256],120003:[[110],256],120005:[[112],256],120006:[[113],256],120007:[[114],256],120008:[[115],256],120009:[[116],256],120010:[[117],256],120011:[[118],256],120012:[[119],256],120013:[[120],256],120014:[[121],256],120015:[[122],256],120016:[[65],256],120017:[[66],256],120018:[[67],256],120019:[[68],256],120020:[[69],256],120021:[[70],256],120022:[[71],256],120023:[[72],256],120024:[[73],256],120025:[[74],256],120026:[[75],256],120027:[[76],256],120028:[[77],256],120029:[[78],256],120030:[[79],256],120031:[[80],256],120032:[[81],256],120033:[[82],256],120034:[[83],256],120035:[[84],256],120036:[[85],256],120037:[[86],256],120038:[[87],256],120039:[[88],256],120040:[[89],256],120041:[[90],256],120042:[[97],256],120043:[[98],256],120044:[[99],256],120045:[[100],256],120046:[[101],256],120047:[[102],256],120048:[[103],256],120049:[[104],256],120050:[[105],256],120051:[[106],256],120052:[[107],256],120053:[[108],256],120054:[[109],256],120055:[[110],256],120056:[[111],256],120057:[[112],256],120058:[[113],256],120059:[[114],256],120060:[[115],256],120061:[[116],256],120062:[[117],256],120063:[[118],256]},
-54528:{120064:[[119],256],120065:[[120],256],120066:[[121],256],120067:[[122],256],120068:[[65],256],120069:[[66],256],120071:[[68],256],120072:[[69],256],120073:[[70],256],120074:[[71],256],120077:[[74],256],120078:[[75],256],120079:[[76],256],120080:[[77],256],120081:[[78],256],120082:[[79],256],120083:[[80],256],120084:[[81],256],120086:[[83],256],120087:[[84],256],120088:[[85],256],120089:[[86],256],120090:[[87],256],120091:[[88],256],120092:[[89],256],120094:[[97],256],120095:[[98],256],120096:[[99],256],120097:[[100],256],120098:[[101],256],120099:[[102],256],120100:[[103],256],120101:[[104],256],120102:[[105],256],120103:[[106],256],120104:[[107],256],120105:[[108],256],120106:[[109],256],120107:[[110],256],120108:[[111],256],120109:[[112],256],120110:[[113],256],120111:[[114],256],120112:[[115],256],120113:[[116],256],120114:[[117],256],120115:[[118],256],120116:[[119],256],120117:[[120],256],120118:[[121],256],120119:[[122],256],120120:[[65],256],120121:[[66],256],120123:[[68],256],120124:[[69],256],120125:[[70],256],120126:[[71],256],120128:[[73],256],120129:[[74],256],120130:[[75],256],120131:[[76],256],120132:[[77],256],120134:[[79],256],120138:[[83],256],120139:[[84],256],120140:[[85],256],120141:[[86],256],120142:[[87],256],120143:[[88],256],120144:[[89],256],120146:[[97],256],120147:[[98],256],120148:[[99],256],120149:[[100],256],120150:[[101],256],120151:[[102],256],120152:[[103],256],120153:[[104],256],120154:[[105],256],120155:[[106],256],120156:[[107],256],120157:[[108],256],120158:[[109],256],120159:[[110],256],120160:[[111],256],120161:[[112],256],120162:[[113],256],120163:[[114],256],120164:[[115],256],120165:[[116],256],120166:[[117],256],120167:[[118],256],120168:[[119],256],120169:[[120],256],120170:[[121],256],120171:[[122],256],120172:[[65],256],120173:[[66],256],120174:[[67],256],120175:[[68],256],120176:[[69],256],120177:[[70],256],120178:[[71],256],120179:[[72],256],120180:[[73],256],120181:[[74],256],120182:[[75],256],120183:[[76],256],120184:[[77],256],120185:[[78],256],120186:[[79],256],120187:[[80],256],120188:[[81],256],120189:[[82],256],120190:[[83],256],120191:[[84],256],120192:[[85],256],120193:[[86],256],120194:[[87],256],120195:[[88],256],120196:[[89],256],120197:[[90],256],120198:[[97],256],120199:[[98],256],120200:[[99],256],120201:[[100],256],120202:[[101],256],120203:[[102],256],120204:[[103],256],120205:[[104],256],120206:[[105],256],120207:[[106],256],120208:[[107],256],120209:[[108],256],120210:[[109],256],120211:[[110],256],120212:[[111],256],120213:[[112],256],120214:[[113],256],120215:[[114],256],120216:[[115],256],120217:[[116],256],120218:[[117],256],120219:[[118],256],120220:[[119],256],120221:[[120],256],120222:[[121],256],120223:[[122],256],120224:[[65],256],120225:[[66],256],120226:[[67],256],120227:[[68],256],120228:[[69],256],120229:[[70],256],120230:[[71],256],120231:[[72],256],120232:[[73],256],120233:[[74],256],120234:[[75],256],120235:[[76],256],120236:[[77],256],120237:[[78],256],120238:[[79],256],120239:[[80],256],120240:[[81],256],120241:[[82],256],120242:[[83],256],120243:[[84],256],120244:[[85],256],120245:[[86],256],120246:[[87],256],120247:[[88],256],120248:[[89],256],120249:[[90],256],120250:[[97],256],120251:[[98],256],120252:[[99],256],120253:[[100],256],120254:[[101],256],120255:[[102],256],120256:[[103],256],120257:[[104],256],120258:[[105],256],120259:[[106],256],120260:[[107],256],120261:[[108],256],120262:[[109],256],120263:[[110],256],120264:[[111],256],120265:[[112],256],120266:[[113],256],120267:[[114],256],120268:[[115],256],120269:[[116],256],120270:[[117],256],120271:[[118],256],120272:[[119],256],120273:[[120],256],120274:[[121],256],120275:[[122],256],120276:[[65],256],120277:[[66],256],120278:[[67],256],120279:[[68],256],120280:[[69],256],120281:[[70],256],120282:[[71],256],120283:[[72],256],120284:[[73],256],120285:[[74],256],120286:[[75],256],120287:[[76],256],120288:[[77],256],120289:[[78],256],120290:[[79],256],120291:[[80],256],120292:[[81],256],120293:[[82],256],120294:[[83],256],120295:[[84],256],120296:[[85],256],120297:[[86],256],120298:[[87],256],120299:[[88],256],120300:[[89],256],120301:[[90],256],120302:[[97],256],120303:[[98],256],120304:[[99],256],120305:[[100],256],120306:[[101],256],120307:[[102],256],120308:[[103],256],120309:[[104],256],120310:[[105],256],120311:[[106],256],120312:[[107],256],120313:[[108],256],120314:[[109],256],120315:[[110],256],120316:[[111],256],120317:[[112],256],120318:[[113],256],120319:[[114],256]},
-54784:{120320:[[115],256],120321:[[116],256],120322:[[117],256],120323:[[118],256],120324:[[119],256],120325:[[120],256],120326:[[121],256],120327:[[122],256],120328:[[65],256],120329:[[66],256],120330:[[67],256],120331:[[68],256],120332:[[69],256],120333:[[70],256],120334:[[71],256],120335:[[72],256],120336:[[73],256],120337:[[74],256],120338:[[75],256],120339:[[76],256],120340:[[77],256],120341:[[78],256],120342:[[79],256],120343:[[80],256],120344:[[81],256],120345:[[82],256],120346:[[83],256],120347:[[84],256],120348:[[85],256],120349:[[86],256],120350:[[87],256],120351:[[88],256],120352:[[89],256],120353:[[90],256],120354:[[97],256],120355:[[98],256],120356:[[99],256],120357:[[100],256],120358:[[101],256],120359:[[102],256],120360:[[103],256],120361:[[104],256],120362:[[105],256],120363:[[106],256],120364:[[107],256],120365:[[108],256],120366:[[109],256],120367:[[110],256],120368:[[111],256],120369:[[112],256],120370:[[113],256],120371:[[114],256],120372:[[115],256],120373:[[116],256],120374:[[117],256],120375:[[118],256],120376:[[119],256],120377:[[120],256],120378:[[121],256],120379:[[122],256],120380:[[65],256],120381:[[66],256],120382:[[67],256],120383:[[68],256],120384:[[69],256],120385:[[70],256],120386:[[71],256],120387:[[72],256],120388:[[73],256],120389:[[74],256],120390:[[75],256],120391:[[76],256],120392:[[77],256],120393:[[78],256],120394:[[79],256],120395:[[80],256],120396:[[81],256],120397:[[82],256],120398:[[83],256],120399:[[84],256],120400:[[85],256],120401:[[86],256],120402:[[87],256],120403:[[88],256],120404:[[89],256],120405:[[90],256],120406:[[97],256],120407:[[98],256],120408:[[99],256],120409:[[100],256],120410:[[101],256],120411:[[102],256],120412:[[103],256],120413:[[104],256],120414:[[105],256],120415:[[106],256],120416:[[107],256],120417:[[108],256],120418:[[109],256],120419:[[110],256],120420:[[111],256],120421:[[112],256],120422:[[113],256],120423:[[114],256],120424:[[115],256],120425:[[116],256],120426:[[117],256],120427:[[118],256],120428:[[119],256],120429:[[120],256],120430:[[121],256],120431:[[122],256],120432:[[65],256],120433:[[66],256],120434:[[67],256],120435:[[68],256],120436:[[69],256],120437:[[70],256],120438:[[71],256],120439:[[72],256],120440:[[73],256],120441:[[74],256],120442:[[75],256],120443:[[76],256],120444:[[77],256],120445:[[78],256],120446:[[79],256],120447:[[80],256],120448:[[81],256],120449:[[82],256],120450:[[83],256],120451:[[84],256],120452:[[85],256],120453:[[86],256],120454:[[87],256],120455:[[88],256],120456:[[89],256],120457:[[90],256],120458:[[97],256],120459:[[98],256],120460:[[99],256],120461:[[100],256],120462:[[101],256],120463:[[102],256],120464:[[103],256],120465:[[104],256],120466:[[105],256],120467:[[106],256],120468:[[107],256],120469:[[108],256],120470:[[109],256],120471:[[110],256],120472:[[111],256],120473:[[112],256],120474:[[113],256],120475:[[114],256],120476:[[115],256],120477:[[116],256],120478:[[117],256],120479:[[118],256],120480:[[119],256],120481:[[120],256],120482:[[121],256],120483:[[122],256],120484:[[305],256],120485:[[567],256],120488:[[913],256],120489:[[914],256],120490:[[915],256],120491:[[916],256],120492:[[917],256],120493:[[918],256],120494:[[919],256],120495:[[920],256],120496:[[921],256],120497:[[922],256],120498:[[923],256],120499:[[924],256],120500:[[925],256],120501:[[926],256],120502:[[927],256],120503:[[928],256],120504:[[929],256],120505:[[1012],256],120506:[[931],256],120507:[[932],256],120508:[[933],256],120509:[[934],256],120510:[[935],256],120511:[[936],256],120512:[[937],256],120513:[[8711],256],120514:[[945],256],120515:[[946],256],120516:[[947],256],120517:[[948],256],120518:[[949],256],120519:[[950],256],120520:[[951],256],120521:[[952],256],120522:[[953],256],120523:[[954],256],120524:[[955],256],120525:[[956],256],120526:[[957],256],120527:[[958],256],120528:[[959],256],120529:[[960],256],120530:[[961],256],120531:[[962],256],120532:[[963],256],120533:[[964],256],120534:[[965],256],120535:[[966],256],120536:[[967],256],120537:[[968],256],120538:[[969],256],120539:[[8706],256],120540:[[1013],256],120541:[[977],256],120542:[[1008],256],120543:[[981],256],120544:[[1009],256],120545:[[982],256],120546:[[913],256],120547:[[914],256],120548:[[915],256],120549:[[916],256],120550:[[917],256],120551:[[918],256],120552:[[919],256],120553:[[920],256],120554:[[921],256],120555:[[922],256],120556:[[923],256],120557:[[924],256],120558:[[925],256],120559:[[926],256],120560:[[927],256],120561:[[928],256],120562:[[929],256],120563:[[1012],256],120564:[[931],256],120565:[[932],256],120566:[[933],256],120567:[[934],256],120568:[[935],256],120569:[[936],256],120570:[[937],256],120571:[[8711],256],120572:[[945],256],120573:[[946],256],120574:[[947],256],120575:[[948],256]},
-55040:{120576:[[949],256],120577:[[950],256],120578:[[951],256],120579:[[952],256],120580:[[953],256],120581:[[954],256],120582:[[955],256],120583:[[956],256],120584:[[957],256],120585:[[958],256],120586:[[959],256],120587:[[960],256],120588:[[961],256],120589:[[962],256],120590:[[963],256],120591:[[964],256],120592:[[965],256],120593:[[966],256],120594:[[967],256],120595:[[968],256],120596:[[969],256],120597:[[8706],256],120598:[[1013],256],120599:[[977],256],120600:[[1008],256],120601:[[981],256],120602:[[1009],256],120603:[[982],256],120604:[[913],256],120605:[[914],256],120606:[[915],256],120607:[[916],256],120608:[[917],256],120609:[[918],256],120610:[[919],256],120611:[[920],256],120612:[[921],256],120613:[[922],256],120614:[[923],256],120615:[[924],256],120616:[[925],256],120617:[[926],256],120618:[[927],256],120619:[[928],256],120620:[[929],256],120621:[[1012],256],120622:[[931],256],120623:[[932],256],120624:[[933],256],120625:[[934],256],120626:[[935],256],120627:[[936],256],120628:[[937],256],120629:[[8711],256],120630:[[945],256],120631:[[946],256],120632:[[947],256],120633:[[948],256],120634:[[949],256],120635:[[950],256],120636:[[951],256],120637:[[952],256],120638:[[953],256],120639:[[954],256],120640:[[955],256],120641:[[956],256],120642:[[957],256],120643:[[958],256],120644:[[959],256],120645:[[960],256],120646:[[961],256],120647:[[962],256],120648:[[963],256],120649:[[964],256],120650:[[965],256],120651:[[966],256],120652:[[967],256],120653:[[968],256],120654:[[969],256],120655:[[8706],256],120656:[[1013],256],120657:[[977],256],120658:[[1008],256],120659:[[981],256],120660:[[1009],256],120661:[[982],256],120662:[[913],256],120663:[[914],256],120664:[[915],256],120665:[[916],256],120666:[[917],256],120667:[[918],256],120668:[[919],256],120669:[[920],256],120670:[[921],256],120671:[[922],256],120672:[[923],256],120673:[[924],256],120674:[[925],256],120675:[[926],256],120676:[[927],256],120677:[[928],256],120678:[[929],256],120679:[[1012],256],120680:[[931],256],120681:[[932],256],120682:[[933],256],120683:[[934],256],120684:[[935],256],120685:[[936],256],120686:[[937],256],120687:[[8711],256],120688:[[945],256],120689:[[946],256],120690:[[947],256],120691:[[948],256],120692:[[949],256],120693:[[950],256],120694:[[951],256],120695:[[952],256],120696:[[953],256],120697:[[954],256],120698:[[955],256],120699:[[956],256],120700:[[957],256],120701:[[958],256],120702:[[959],256],120703:[[960],256],120704:[[961],256],120705:[[962],256],120706:[[963],256],120707:[[964],256],120708:[[965],256],120709:[[966],256],120710:[[967],256],120711:[[968],256],120712:[[969],256],120713:[[8706],256],120714:[[1013],256],120715:[[977],256],120716:[[1008],256],120717:[[981],256],120718:[[1009],256],120719:[[982],256],120720:[[913],256],120721:[[914],256],120722:[[915],256],120723:[[916],256],120724:[[917],256],120725:[[918],256],120726:[[919],256],120727:[[920],256],120728:[[921],256],120729:[[922],256],120730:[[923],256],120731:[[924],256],120732:[[925],256],120733:[[926],256],120734:[[927],256],120735:[[928],256],120736:[[929],256],120737:[[1012],256],120738:[[931],256],120739:[[932],256],120740:[[933],256],120741:[[934],256],120742:[[935],256],120743:[[936],256],120744:[[937],256],120745:[[8711],256],120746:[[945],256],120747:[[946],256],120748:[[947],256],120749:[[948],256],120750:[[949],256],120751:[[950],256],120752:[[951],256],120753:[[952],256],120754:[[953],256],120755:[[954],256],120756:[[955],256],120757:[[956],256],120758:[[957],256],120759:[[958],256],120760:[[959],256],120761:[[960],256],120762:[[961],256],120763:[[962],256],120764:[[963],256],120765:[[964],256],120766:[[965],256],120767:[[966],256],120768:[[967],256],120769:[[968],256],120770:[[969],256],120771:[[8706],256],120772:[[1013],256],120773:[[977],256],120774:[[1008],256],120775:[[981],256],120776:[[1009],256],120777:[[982],256],120778:[[988],256],120779:[[989],256],120782:[[48],256],120783:[[49],256],120784:[[50],256],120785:[[51],256],120786:[[52],256],120787:[[53],256],120788:[[54],256],120789:[[55],256],120790:[[56],256],120791:[[57],256],120792:[[48],256],120793:[[49],256],120794:[[50],256],120795:[[51],256],120796:[[52],256],120797:[[53],256],120798:[[54],256],120799:[[55],256],120800:[[56],256],120801:[[57],256],120802:[[48],256],120803:[[49],256],120804:[[50],256],120805:[[51],256],120806:[[52],256],120807:[[53],256],120808:[[54],256],120809:[[55],256],120810:[[56],256],120811:[[57],256],120812:[[48],256],120813:[[49],256],120814:[[50],256],120815:[[51],256],120816:[[52],256],120817:[[53],256],120818:[[54],256],120819:[[55],256],120820:[[56],256],120821:[[57],256],120822:[[48],256],120823:[[49],256],120824:[[50],256],120825:[[51],256],120826:[[52],256],120827:[[53],256],120828:[[54],256],120829:[[55],256],120830:[[56],256],120831:[[57],256]},
-59392:{125136:[,220],125137:[,220],125138:[,220],125139:[,220],125140:[,220],125141:[,220],125142:[,220]},
-60928:{126464:[[1575],256],126465:[[1576],256],126466:[[1580],256],126467:[[1583],256],126469:[[1608],256],126470:[[1586],256],126471:[[1581],256],126472:[[1591],256],126473:[[1610],256],126474:[[1603],256],126475:[[1604],256],126476:[[1605],256],126477:[[1606],256],126478:[[1587],256],126479:[[1593],256],126480:[[1601],256],126481:[[1589],256],126482:[[1602],256],126483:[[1585],256],126484:[[1588],256],126485:[[1578],256],126486:[[1579],256],126487:[[1582],256],126488:[[1584],256],126489:[[1590],256],126490:[[1592],256],126491:[[1594],256],126492:[[1646],256],126493:[[1722],256],126494:[[1697],256],126495:[[1647],256],126497:[[1576],256],126498:[[1580],256],126500:[[1607],256],126503:[[1581],256],126505:[[1610],256],126506:[[1603],256],126507:[[1604],256],126508:[[1605],256],126509:[[1606],256],126510:[[1587],256],126511:[[1593],256],126512:[[1601],256],126513:[[1589],256],126514:[[1602],256],126516:[[1588],256],126517:[[1578],256],126518:[[1579],256],126519:[[1582],256],126521:[[1590],256],126523:[[1594],256],126530:[[1580],256],126535:[[1581],256],126537:[[1610],256],126539:[[1604],256],126541:[[1606],256],126542:[[1587],256],126543:[[1593],256],126545:[[1589],256],126546:[[1602],256],126548:[[1588],256],126551:[[1582],256],126553:[[1590],256],126555:[[1594],256],126557:[[1722],256],126559:[[1647],256],126561:[[1576],256],126562:[[1580],256],126564:[[1607],256],126567:[[1581],256],126568:[[1591],256],126569:[[1610],256],126570:[[1603],256],126572:[[1605],256],126573:[[1606],256],126574:[[1587],256],126575:[[1593],256],126576:[[1601],256],126577:[[1589],256],126578:[[1602],256],126580:[[1588],256],126581:[[1578],256],126582:[[1579],256],126583:[[1582],256],126585:[[1590],256],126586:[[1592],256],126587:[[1594],256],126588:[[1646],256],126590:[[1697],256],126592:[[1575],256],126593:[[1576],256],126594:[[1580],256],126595:[[1583],256],126596:[[1607],256],126597:[[1608],256],126598:[[1586],256],126599:[[1581],256],126600:[[1591],256],126601:[[1610],256],126603:[[1604],256],126604:[[1605],256],126605:[[1606],256],126606:[[1587],256],126607:[[1593],256],126608:[[1601],256],126609:[[1589],256],126610:[[1602],256],126611:[[1585],256],126612:[[1588],256],126613:[[1578],256],126614:[[1579],256],126615:[[1582],256],126616:[[1584],256],126617:[[1590],256],126618:[[1592],256],126619:[[1594],256],126625:[[1576],256],126626:[[1580],256],126627:[[1583],256],126629:[[1608],256],126630:[[1586],256],126631:[[1581],256],126632:[[1591],256],126633:[[1610],256],126635:[[1604],256],126636:[[1605],256],126637:[[1606],256],126638:[[1587],256],126639:[[1593],256],126640:[[1601],256],126641:[[1589],256],126642:[[1602],256],126643:[[1585],256],126644:[[1588],256],126645:[[1578],256],126646:[[1579],256],126647:[[1582],256],126648:[[1584],256],126649:[[1590],256],126650:[[1592],256],126651:[[1594],256]},
-61696:{127232:[[48,46],256],127233:[[48,44],256],127234:[[49,44],256],127235:[[50,44],256],127236:[[51,44],256],127237:[[52,44],256],127238:[[53,44],256],127239:[[54,44],256],127240:[[55,44],256],127241:[[56,44],256],127242:[[57,44],256],127248:[[40,65,41],256],127249:[[40,66,41],256],127250:[[40,67,41],256],127251:[[40,68,41],256],127252:[[40,69,41],256],127253:[[40,70,41],256],127254:[[40,71,41],256],127255:[[40,72,41],256],127256:[[40,73,41],256],127257:[[40,74,41],256],127258:[[40,75,41],256],127259:[[40,76,41],256],127260:[[40,77,41],256],127261:[[40,78,41],256],127262:[[40,79,41],256],127263:[[40,80,41],256],127264:[[40,81,41],256],127265:[[40,82,41],256],127266:[[40,83,41],256],127267:[[40,84,41],256],127268:[[40,85,41],256],127269:[[40,86,41],256],127270:[[40,87,41],256],127271:[[40,88,41],256],127272:[[40,89,41],256],127273:[[40,90,41],256],127274:[[12308,83,12309],256],127275:[[67],256],127276:[[82],256],127277:[[67,68],256],127278:[[87,90],256],127280:[[65],256],127281:[[66],256],127282:[[67],256],127283:[[68],256],127284:[[69],256],127285:[[70],256],127286:[[71],256],127287:[[72],256],127288:[[73],256],127289:[[74],256],127290:[[75],256],127291:[[76],256],127292:[[77],256],127293:[[78],256],127294:[[79],256],127295:[[80],256],127296:[[81],256],127297:[[82],256],127298:[[83],256],127299:[[84],256],127300:[[85],256],127301:[[86],256],127302:[[87],256],127303:[[88],256],127304:[[89],256],127305:[[90],256],127306:[[72,86],256],127307:[[77,86],256],127308:[[83,68],256],127309:[[83,83],256],127310:[[80,80,86],256],127311:[[87,67],256],127338:[[77,67],256],127339:[[77,68],256],127376:[[68,74],256]},
-61952:{127488:[[12411,12363],256],127489:[[12467,12467],256],127490:[[12469],256],127504:[[25163],256],127505:[[23383],256],127506:[[21452],256],127507:[[12487],256],127508:[[20108],256],127509:[[22810],256],127510:[[35299],256],127511:[[22825],256],127512:[[20132],256],127513:[[26144],256],127514:[[28961],256],127515:[[26009],256],127516:[[21069],256],127517:[[24460],256],127518:[[20877],256],127519:[[26032],256],127520:[[21021],256],127521:[[32066],256],127522:[[29983],256],127523:[[36009],256],127524:[[22768],256],127525:[[21561],256],127526:[[28436],256],127527:[[25237],256],127528:[[25429],256],127529:[[19968],256],127530:[[19977],256],127531:[[36938],256],127532:[[24038],256],127533:[[20013],256],127534:[[21491],256],127535:[[25351],256],127536:[[36208],256],127537:[[25171],256],127538:[[31105],256],127539:[[31354],256],127540:[[21512],256],127541:[[28288],256],127542:[[26377],256],127543:[[26376],256],127544:[[30003],256],127545:[[21106],256],127546:[[21942],256],127552:[[12308,26412,12309],256],127553:[[12308,19977,12309],256],127554:[[12308,20108,12309],256],127555:[[12308,23433,12309],256],127556:[[12308,28857,12309],256],127557:[[12308,25171,12309],256],127558:[[12308,30423,12309],256],127559:[[12308,21213,12309],256],127560:[[12308,25943,12309],256],127568:[[24471],256],127569:[[21487],256]},
-63488:{194560:[[20029]],194561:[[20024]],194562:[[20033]],194563:[[131362]],194564:[[20320]],194565:[[20398]],194566:[[20411]],194567:[[20482]],194568:[[20602]],194569:[[20633]],194570:[[20711]],194571:[[20687]],194572:[[13470]],194573:[[132666]],194574:[[20813]],194575:[[20820]],194576:[[20836]],194577:[[20855]],194578:[[132380]],194579:[[13497]],194580:[[20839]],194581:[[20877]],194582:[[132427]],194583:[[20887]],194584:[[20900]],194585:[[20172]],194586:[[20908]],194587:[[20917]],194588:[[168415]],194589:[[20981]],194590:[[20995]],194591:[[13535]],194592:[[21051]],194593:[[21062]],194594:[[21106]],194595:[[21111]],194596:[[13589]],194597:[[21191]],194598:[[21193]],194599:[[21220]],194600:[[21242]],194601:[[21253]],194602:[[21254]],194603:[[21271]],194604:[[21321]],194605:[[21329]],194606:[[21338]],194607:[[21363]],194608:[[21373]],194609:[[21375]],194610:[[21375]],194611:[[21375]],194612:[[133676]],194613:[[28784]],194614:[[21450]],194615:[[21471]],194616:[[133987]],194617:[[21483]],194618:[[21489]],194619:[[21510]],194620:[[21662]],194621:[[21560]],194622:[[21576]],194623:[[21608]],194624:[[21666]],194625:[[21750]],194626:[[21776]],194627:[[21843]],194628:[[21859]],194629:[[21892]],194630:[[21892]],194631:[[21913]],194632:[[21931]],194633:[[21939]],194634:[[21954]],194635:[[22294]],194636:[[22022]],194637:[[22295]],194638:[[22097]],194639:[[22132]],194640:[[20999]],194641:[[22766]],194642:[[22478]],194643:[[22516]],194644:[[22541]],194645:[[22411]],194646:[[22578]],194647:[[22577]],194648:[[22700]],194649:[[136420]],194650:[[22770]],194651:[[22775]],194652:[[22790]],194653:[[22810]],194654:[[22818]],194655:[[22882]],194656:[[136872]],194657:[[136938]],194658:[[23020]],194659:[[23067]],194660:[[23079]],194661:[[23000]],194662:[[23142]],194663:[[14062]],194664:[[14076]],194665:[[23304]],194666:[[23358]],194667:[[23358]],194668:[[137672]],194669:[[23491]],194670:[[23512]],194671:[[23527]],194672:[[23539]],194673:[[138008]],194674:[[23551]],194675:[[23558]],194676:[[24403]],194677:[[23586]],194678:[[14209]],194679:[[23648]],194680:[[23662]],194681:[[23744]],194682:[[23693]],194683:[[138724]],194684:[[23875]],194685:[[138726]],194686:[[23918]],194687:[[23915]],194688:[[23932]],194689:[[24033]],194690:[[24034]],194691:[[14383]],194692:[[24061]],194693:[[24104]],194694:[[24125]],194695:[[24169]],194696:[[14434]],194697:[[139651]],194698:[[14460]],194699:[[24240]],194700:[[24243]],194701:[[24246]],194702:[[24266]],194703:[[172946]],194704:[[24318]],194705:[[140081]],194706:[[140081]],194707:[[33281]],194708:[[24354]],194709:[[24354]],194710:[[14535]],194711:[[144056]],194712:[[156122]],194713:[[24418]],194714:[[24427]],194715:[[14563]],194716:[[24474]],194717:[[24525]],194718:[[24535]],194719:[[24569]],194720:[[24705]],194721:[[14650]],194722:[[14620]],194723:[[24724]],194724:[[141012]],194725:[[24775]],194726:[[24904]],194727:[[24908]],194728:[[24910]],194729:[[24908]],194730:[[24954]],194731:[[24974]],194732:[[25010]],194733:[[24996]],194734:[[25007]],194735:[[25054]],194736:[[25074]],194737:[[25078]],194738:[[25104]],194739:[[25115]],194740:[[25181]],194741:[[25265]],194742:[[25300]],194743:[[25424]],194744:[[142092]],194745:[[25405]],194746:[[25340]],194747:[[25448]],194748:[[25475]],194749:[[25572]],194750:[[142321]],194751:[[25634]],194752:[[25541]],194753:[[25513]],194754:[[14894]],194755:[[25705]],194756:[[25726]],194757:[[25757]],194758:[[25719]],194759:[[14956]],194760:[[25935]],194761:[[25964]],194762:[[143370]],194763:[[26083]],194764:[[26360]],194765:[[26185]],194766:[[15129]],194767:[[26257]],194768:[[15112]],194769:[[15076]],194770:[[20882]],194771:[[20885]],194772:[[26368]],194773:[[26268]],194774:[[32941]],194775:[[17369]],194776:[[26391]],194777:[[26395]],194778:[[26401]],194779:[[26462]],194780:[[26451]],194781:[[144323]],194782:[[15177]],194783:[[26618]],194784:[[26501]],194785:[[26706]],194786:[[26757]],194787:[[144493]],194788:[[26766]],194789:[[26655]],194790:[[26900]],194791:[[15261]],194792:[[26946]],194793:[[27043]],194794:[[27114]],194795:[[27304]],194796:[[145059]],194797:[[27355]],194798:[[15384]],194799:[[27425]],194800:[[145575]],194801:[[27476]],194802:[[15438]],194803:[[27506]],194804:[[27551]],194805:[[27578]],194806:[[27579]],194807:[[146061]],194808:[[138507]],194809:[[146170]],194810:[[27726]],194811:[[146620]],194812:[[27839]],194813:[[27853]],194814:[[27751]],194815:[[27926]]},
-63744:{63744:[[35912]],63745:[[26356]],63746:[[36554]],63747:[[36040]],63748:[[28369]],63749:[[20018]],63750:[[21477]],63751:[[40860]],63752:[[40860]],63753:[[22865]],63754:[[37329]],63755:[[21895]],63756:[[22856]],63757:[[25078]],63758:[[30313]],63759:[[32645]],63760:[[34367]],63761:[[34746]],63762:[[35064]],63763:[[37007]],63764:[[27138]],63765:[[27931]],63766:[[28889]],63767:[[29662]],63768:[[33853]],63769:[[37226]],63770:[[39409]],63771:[[20098]],63772:[[21365]],63773:[[27396]],63774:[[29211]],63775:[[34349]],63776:[[40478]],63777:[[23888]],63778:[[28651]],63779:[[34253]],63780:[[35172]],63781:[[25289]],63782:[[33240]],63783:[[34847]],63784:[[24266]],63785:[[26391]],63786:[[28010]],63787:[[29436]],63788:[[37070]],63789:[[20358]],63790:[[20919]],63791:[[21214]],63792:[[25796]],63793:[[27347]],63794:[[29200]],63795:[[30439]],63796:[[32769]],63797:[[34310]],63798:[[34396]],63799:[[36335]],63800:[[38706]],63801:[[39791]],63802:[[40442]],63803:[[30860]],63804:[[31103]],63805:[[32160]],63806:[[33737]],63807:[[37636]],63808:[[40575]],63809:[[35542]],63810:[[22751]],63811:[[24324]],63812:[[31840]],63813:[[32894]],63814:[[29282]],63815:[[30922]],63816:[[36034]],63817:[[38647]],63818:[[22744]],63819:[[23650]],63820:[[27155]],63821:[[28122]],63822:[[28431]],63823:[[32047]],63824:[[32311]],63825:[[38475]],63826:[[21202]],63827:[[32907]],63828:[[20956]],63829:[[20940]],63830:[[31260]],63831:[[32190]],63832:[[33777]],63833:[[38517]],63834:[[35712]],63835:[[25295]],63836:[[27138]],63837:[[35582]],63838:[[20025]],63839:[[23527]],63840:[[24594]],63841:[[29575]],63842:[[30064]],63843:[[21271]],63844:[[30971]],63845:[[20415]],63846:[[24489]],63847:[[19981]],63848:[[27852]],63849:[[25976]],63850:[[32034]],63851:[[21443]],63852:[[22622]],63853:[[30465]],63854:[[33865]],63855:[[35498]],63856:[[27578]],63857:[[36784]],63858:[[27784]],63859:[[25342]],63860:[[33509]],63861:[[25504]],63862:[[30053]],63863:[[20142]],63864:[[20841]],63865:[[20937]],63866:[[26753]],63867:[[31975]],63868:[[33391]],63869:[[35538]],63870:[[37327]],63871:[[21237]],63872:[[21570]],63873:[[22899]],63874:[[24300]],63875:[[26053]],63876:[[28670]],63877:[[31018]],63878:[[38317]],63879:[[39530]],63880:[[40599]],63881:[[40654]],63882:[[21147]],63883:[[26310]],63884:[[27511]],63885:[[36706]],63886:[[24180]],63887:[[24976]],63888:[[25088]],63889:[[25754]],63890:[[28451]],63891:[[29001]],63892:[[29833]],63893:[[31178]],63894:[[32244]],63895:[[32879]],63896:[[36646]],63897:[[34030]],63898:[[36899]],63899:[[37706]],63900:[[21015]],63901:[[21155]],63902:[[21693]],63903:[[28872]],63904:[[35010]],63905:[[35498]],63906:[[24265]],63907:[[24565]],63908:[[25467]],63909:[[27566]],63910:[[31806]],63911:[[29557]],63912:[[20196]],63913:[[22265]],63914:[[23527]],63915:[[23994]],63916:[[24604]],63917:[[29618]],63918:[[29801]],63919:[[32666]],63920:[[32838]],63921:[[37428]],63922:[[38646]],63923:[[38728]],63924:[[38936]],63925:[[20363]],63926:[[31150]],63927:[[37300]],63928:[[38584]],63929:[[24801]],63930:[[20102]],63931:[[20698]],63932:[[23534]],63933:[[23615]],63934:[[26009]],63935:[[27138]],63936:[[29134]],63937:[[30274]],63938:[[34044]],63939:[[36988]],63940:[[40845]],63941:[[26248]],63942:[[38446]],63943:[[21129]],63944:[[26491]],63945:[[26611]],63946:[[27969]],63947:[[28316]],63948:[[29705]],63949:[[30041]],63950:[[30827]],63951:[[32016]],63952:[[39006]],63953:[[20845]],63954:[[25134]],63955:[[38520]],63956:[[20523]],63957:[[23833]],63958:[[28138]],63959:[[36650]],63960:[[24459]],63961:[[24900]],63962:[[26647]],63963:[[29575]],63964:[[38534]],63965:[[21033]],63966:[[21519]],63967:[[23653]],63968:[[26131]],63969:[[26446]],63970:[[26792]],63971:[[27877]],63972:[[29702]],63973:[[30178]],63974:[[32633]],63975:[[35023]],63976:[[35041]],63977:[[37324]],63978:[[38626]],63979:[[21311]],63980:[[28346]],63981:[[21533]],63982:[[29136]],63983:[[29848]],63984:[[34298]],63985:[[38563]],63986:[[40023]],63987:[[40607]],63988:[[26519]],63989:[[28107]],63990:[[33256]],63991:[[31435]],63992:[[31520]],63993:[[31890]],63994:[[29376]],63995:[[28825]],63996:[[35672]],63997:[[20160]],63998:[[33590]],63999:[[21050]],194816:[[27966]],194817:[[28023]],194818:[[27969]],194819:[[28009]],194820:[[28024]],194821:[[28037]],194822:[[146718]],194823:[[27956]],194824:[[28207]],194825:[[28270]],194826:[[15667]],194827:[[28363]],194828:[[28359]],194829:[[147153]],194830:[[28153]],194831:[[28526]],194832:[[147294]],194833:[[147342]],194834:[[28614]],194835:[[28729]],194836:[[28702]],194837:[[28699]],194838:[[15766]],194839:[[28746]],194840:[[28797]],194841:[[28791]],194842:[[28845]],194843:[[132389]],194844:[[28997]],194845:[[148067]],194846:[[29084]],194847:[[148395]],194848:[[29224]],194849:[[29237]],194850:[[29264]],194851:[[149000]],194852:[[29312]],194853:[[29333]],194854:[[149301]],194855:[[149524]],194856:[[29562]],194857:[[29579]],194858:[[16044]],194859:[[29605]],194860:[[16056]],194861:[[16056]],194862:[[29767]],194863:[[29788]],194864:[[29809]],194865:[[29829]],194866:[[29898]],194867:[[16155]],194868:[[29988]],194869:[[150582]],194870:[[30014]],194871:[[150674]],194872:[[30064]],194873:[[139679]],194874:[[30224]],194875:[[151457]],194876:[[151480]],194877:[[151620]],194878:[[16380]],194879:[[16392]],194880:[[30452]],194881:[[151795]],194882:[[151794]],194883:[[151833]],194884:[[151859]],194885:[[30494]],194886:[[30495]],194887:[[30495]],194888:[[30538]],194889:[[16441]],194890:[[30603]],194891:[[16454]],194892:[[16534]],194893:[[152605]],194894:[[30798]],194895:[[30860]],194896:[[30924]],194897:[[16611]],194898:[[153126]],194899:[[31062]],194900:[[153242]],194901:[[153285]],194902:[[31119]],194903:[[31211]],194904:[[16687]],194905:[[31296]],194906:[[31306]],194907:[[31311]],194908:[[153980]],194909:[[154279]],194910:[[154279]],194911:[[31470]],194912:[[16898]],194913:[[154539]],194914:[[31686]],194915:[[31689]],194916:[[16935]],194917:[[154752]],194918:[[31954]],194919:[[17056]],194920:[[31976]],194921:[[31971]],194922:[[32000]],194923:[[155526]],194924:[[32099]],194925:[[17153]],194926:[[32199]],194927:[[32258]],194928:[[32325]],194929:[[17204]],194930:[[156200]],194931:[[156231]],194932:[[17241]],194933:[[156377]],194934:[[32634]],194935:[[156478]],194936:[[32661]],194937:[[32762]],194938:[[32773]],194939:[[156890]],194940:[[156963]],194941:[[32864]],194942:[[157096]],194943:[[32880]],194944:[[144223]],194945:[[17365]],194946:[[32946]],194947:[[33027]],194948:[[17419]],194949:[[33086]],194950:[[23221]],194951:[[157607]],194952:[[157621]],194953:[[144275]],194954:[[144284]],194955:[[33281]],194956:[[33284]],194957:[[36766]],194958:[[17515]],194959:[[33425]],194960:[[33419]],194961:[[33437]],194962:[[21171]],194963:[[33457]],194964:[[33459]],194965:[[33469]],194966:[[33510]],194967:[[158524]],194968:[[33509]],194969:[[33565]],194970:[[33635]],194971:[[33709]],194972:[[33571]],194973:[[33725]],194974:[[33767]],194975:[[33879]],194976:[[33619]],194977:[[33738]],194978:[[33740]],194979:[[33756]],194980:[[158774]],194981:[[159083]],194982:[[158933]],194983:[[17707]],194984:[[34033]],194985:[[34035]],194986:[[34070]],194987:[[160714]],194988:[[34148]],194989:[[159532]],194990:[[17757]],194991:[[17761]],194992:[[159665]],194993:[[159954]],194994:[[17771]],194995:[[34384]],194996:[[34396]],194997:[[34407]],194998:[[34409]],194999:[[34473]],195000:[[34440]],195001:[[34574]],195002:[[34530]],195003:[[34681]],195004:[[34600]],195005:[[34667]],195006:[[34694]],195007:[[17879]],195008:[[34785]],195009:[[34817]],195010:[[17913]],195011:[[34912]],195012:[[34915]],195013:[[161383]],195014:[[35031]],195015:[[35038]],195016:[[17973]],195017:[[35066]],195018:[[13499]],195019:[[161966]],195020:[[162150]],195021:[[18110]],195022:[[18119]],195023:[[35488]],195024:[[35565]],195025:[[35722]],195026:[[35925]],195027:[[162984]],195028:[[36011]],195029:[[36033]],195030:[[36123]],195031:[[36215]],195032:[[163631]],195033:[[133124]],195034:[[36299]],195035:[[36284]],195036:[[36336]],195037:[[133342]],195038:[[36564]],195039:[[36664]],195040:[[165330]],195041:[[165357]],195042:[[37012]],195043:[[37105]],195044:[[37137]],195045:[[165678]],195046:[[37147]],195047:[[37432]],195048:[[37591]],195049:[[37592]],195050:[[37500]],195051:[[37881]],195052:[[37909]],195053:[[166906]],195054:[[38283]],195055:[[18837]],195056:[[38327]],195057:[[167287]],195058:[[18918]],195059:[[38595]],195060:[[23986]],195061:[[38691]],195062:[[168261]],195063:[[168474]],195064:[[19054]],195065:[[19062]],195066:[[38880]],195067:[[168970]],195068:[[19122]],195069:[[169110]],195070:[[38923]],195071:[[38923]]},
-64000:{64000:[[20999]],64001:[[24230]],64002:[[25299]],64003:[[31958]],64004:[[23429]],64005:[[27934]],64006:[[26292]],64007:[[36667]],64008:[[34892]],64009:[[38477]],64010:[[35211]],64011:[[24275]],64012:[[20800]],64013:[[21952]],64016:[[22618]],64018:[[26228]],64021:[[20958]],64022:[[29482]],64023:[[30410]],64024:[[31036]],64025:[[31070]],64026:[[31077]],64027:[[31119]],64028:[[38742]],64029:[[31934]],64030:[[32701]],64032:[[34322]],64034:[[35576]],64037:[[36920]],64038:[[37117]],64042:[[39151]],64043:[[39164]],64044:[[39208]],64045:[[40372]],64046:[[37086]],64047:[[38583]],64048:[[20398]],64049:[[20711]],64050:[[20813]],64051:[[21193]],64052:[[21220]],64053:[[21329]],64054:[[21917]],64055:[[22022]],64056:[[22120]],64057:[[22592]],64058:[[22696]],64059:[[23652]],64060:[[23662]],64061:[[24724]],64062:[[24936]],64063:[[24974]],64064:[[25074]],64065:[[25935]],64066:[[26082]],64067:[[26257]],64068:[[26757]],64069:[[28023]],64070:[[28186]],64071:[[28450]],64072:[[29038]],64073:[[29227]],64074:[[29730]],64075:[[30865]],64076:[[31038]],64077:[[31049]],64078:[[31048]],64079:[[31056]],64080:[[31062]],64081:[[31069]],64082:[[31117]],64083:[[31118]],64084:[[31296]],64085:[[31361]],64086:[[31680]],64087:[[32244]],64088:[[32265]],64089:[[32321]],64090:[[32626]],64091:[[32773]],64092:[[33261]],64093:[[33401]],64094:[[33401]],64095:[[33879]],64096:[[35088]],64097:[[35222]],64098:[[35585]],64099:[[35641]],64100:[[36051]],64101:[[36104]],64102:[[36790]],64103:[[36920]],64104:[[38627]],64105:[[38911]],64106:[[38971]],64107:[[24693]],64108:[[148206]],64109:[[33304]],64112:[[20006]],64113:[[20917]],64114:[[20840]],64115:[[20352]],64116:[[20805]],64117:[[20864]],64118:[[21191]],64119:[[21242]],64120:[[21917]],64121:[[21845]],64122:[[21913]],64123:[[21986]],64124:[[22618]],64125:[[22707]],64126:[[22852]],64127:[[22868]],64128:[[23138]],64129:[[23336]],64130:[[24274]],64131:[[24281]],64132:[[24425]],64133:[[24493]],64134:[[24792]],64135:[[24910]],64136:[[24840]],64137:[[24974]],64138:[[24928]],64139:[[25074]],64140:[[25140]],64141:[[25540]],64142:[[25628]],64143:[[25682]],64144:[[25942]],64145:[[26228]],64146:[[26391]],64147:[[26395]],64148:[[26454]],64149:[[27513]],64150:[[27578]],64151:[[27969]],64152:[[28379]],64153:[[28363]],64154:[[28450]],64155:[[28702]],64156:[[29038]],64157:[[30631]],64158:[[29237]],64159:[[29359]],64160:[[29482]],64161:[[29809]],64162:[[29958]],64163:[[30011]],64164:[[30237]],64165:[[30239]],64166:[[30410]],64167:[[30427]],64168:[[30452]],64169:[[30538]],64170:[[30528]],64171:[[30924]],64172:[[31409]],64173:[[31680]],64174:[[31867]],64175:[[32091]],64176:[[32244]],64177:[[32574]],64178:[[32773]],64179:[[33618]],64180:[[33775]],64181:[[34681]],64182:[[35137]],64183:[[35206]],64184:[[35222]],64185:[[35519]],64186:[[35576]],64187:[[35531]],64188:[[35585]],64189:[[35582]],64190:[[35565]],64191:[[35641]],64192:[[35722]],64193:[[36104]],64194:[[36664]],64195:[[36978]],64196:[[37273]],64197:[[37494]],64198:[[38524]],64199:[[38627]],64200:[[38742]],64201:[[38875]],64202:[[38911]],64203:[[38923]],64204:[[38971]],64205:[[39698]],64206:[[40860]],64207:[[141386]],64208:[[141380]],64209:[[144341]],64210:[[15261]],64211:[[16408]],64212:[[16441]],64213:[[152137]],64214:[[154832]],64215:[[163539]],64216:[[40771]],64217:[[40846]],195072:[[38953]],195073:[[169398]],195074:[[39138]],195075:[[19251]],195076:[[39209]],195077:[[39335]],195078:[[39362]],195079:[[39422]],195080:[[19406]],195081:[[170800]],195082:[[39698]],195083:[[40000]],195084:[[40189]],195085:[[19662]],195086:[[19693]],195087:[[40295]],195088:[[172238]],195089:[[19704]],195090:[[172293]],195091:[[172558]],195092:[[172689]],195093:[[40635]],195094:[[19798]],195095:[[40697]],195096:[[40702]],195097:[[40709]],195098:[[40719]],195099:[[40726]],195100:[[40763]],195101:[[173568]]},
-64256:{64256:[[102,102],256],64257:[[102,105],256],64258:[[102,108],256],64259:[[102,102,105],256],64260:[[102,102,108],256],64261:[[383,116],256],64262:[[115,116],256],64275:[[1396,1398],256],64276:[[1396,1381],256],64277:[[1396,1387],256],64278:[[1406,1398],256],64279:[[1396,1389],256],64285:[[1497,1460],512],64286:[,26],64287:[[1522,1463],512],64288:[[1506],256],64289:[[1488],256],64290:[[1491],256],64291:[[1492],256],64292:[[1499],256],64293:[[1500],256],64294:[[1501],256],64295:[[1512],256],64296:[[1514],256],64297:[[43],256],64298:[[1513,1473],512],64299:[[1513,1474],512],64300:[[64329,1473],512],64301:[[64329,1474],512],64302:[[1488,1463],512],64303:[[1488,1464],512],64304:[[1488,1468],512],64305:[[1489,1468],512],64306:[[1490,1468],512],64307:[[1491,1468],512],64308:[[1492,1468],512],64309:[[1493,1468],512],64310:[[1494,1468],512],64312:[[1496,1468],512],64313:[[1497,1468],512],64314:[[1498,1468],512],64315:[[1499,1468],512],64316:[[1500,1468],512],64318:[[1502,1468],512],64320:[[1504,1468],512],64321:[[1505,1468],512],64323:[[1507,1468],512],64324:[[1508,1468],512],64326:[[1510,1468],512],64327:[[1511,1468],512],64328:[[1512,1468],512],64329:[[1513,1468],512],64330:[[1514,1468],512],64331:[[1493,1465],512],64332:[[1489,1471],512],64333:[[1499,1471],512],64334:[[1508,1471],512],64335:[[1488,1500],256],64336:[[1649],256],64337:[[1649],256],64338:[[1659],256],64339:[[1659],256],64340:[[1659],256],64341:[[1659],256],64342:[[1662],256],64343:[[1662],256],64344:[[1662],256],64345:[[1662],256],64346:[[1664],256],64347:[[1664],256],64348:[[1664],256],64349:[[1664],256],64350:[[1658],256],64351:[[1658],256],64352:[[1658],256],64353:[[1658],256],64354:[[1663],256],64355:[[1663],256],64356:[[1663],256],64357:[[1663],256],64358:[[1657],256],64359:[[1657],256],64360:[[1657],256],64361:[[1657],256],64362:[[1700],256],64363:[[1700],256],64364:[[1700],256],64365:[[1700],256],64366:[[1702],256],64367:[[1702],256],64368:[[1702],256],64369:[[1702],256],64370:[[1668],256],64371:[[1668],256],64372:[[1668],256],64373:[[1668],256],64374:[[1667],256],64375:[[1667],256],64376:[[1667],256],64377:[[1667],256],64378:[[1670],256],64379:[[1670],256],64380:[[1670],256],64381:[[1670],256],64382:[[1671],256],64383:[[1671],256],64384:[[1671],256],64385:[[1671],256],64386:[[1677],256],64387:[[1677],256],64388:[[1676],256],64389:[[1676],256],64390:[[1678],256],64391:[[1678],256],64392:[[1672],256],64393:[[1672],256],64394:[[1688],256],64395:[[1688],256],64396:[[1681],256],64397:[[1681],256],64398:[[1705],256],64399:[[1705],256],64400:[[1705],256],64401:[[1705],256],64402:[[1711],256],64403:[[1711],256],64404:[[1711],256],64405:[[1711],256],64406:[[1715],256],64407:[[1715],256],64408:[[1715],256],64409:[[1715],256],64410:[[1713],256],64411:[[1713],256],64412:[[1713],256],64413:[[1713],256],64414:[[1722],256],64415:[[1722],256],64416:[[1723],256],64417:[[1723],256],64418:[[1723],256],64419:[[1723],256],64420:[[1728],256],64421:[[1728],256],64422:[[1729],256],64423:[[1729],256],64424:[[1729],256],64425:[[1729],256],64426:[[1726],256],64427:[[1726],256],64428:[[1726],256],64429:[[1726],256],64430:[[1746],256],64431:[[1746],256],64432:[[1747],256],64433:[[1747],256],64467:[[1709],256],64468:[[1709],256],64469:[[1709],256],64470:[[1709],256],64471:[[1735],256],64472:[[1735],256],64473:[[1734],256],64474:[[1734],256],64475:[[1736],256],64476:[[1736],256],64477:[[1655],256],64478:[[1739],256],64479:[[1739],256],64480:[[1733],256],64481:[[1733],256],64482:[[1737],256],64483:[[1737],256],64484:[[1744],256],64485:[[1744],256],64486:[[1744],256],64487:[[1744],256],64488:[[1609],256],64489:[[1609],256],64490:[[1574,1575],256],64491:[[1574,1575],256],64492:[[1574,1749],256],64493:[[1574,1749],256],64494:[[1574,1608],256],64495:[[1574,1608],256],64496:[[1574,1735],256],64497:[[1574,1735],256],64498:[[1574,1734],256],64499:[[1574,1734],256],64500:[[1574,1736],256],64501:[[1574,1736],256],64502:[[1574,1744],256],64503:[[1574,1744],256],64504:[[1574,1744],256],64505:[[1574,1609],256],64506:[[1574,1609],256],64507:[[1574,1609],256],64508:[[1740],256],64509:[[1740],256],64510:[[1740],256],64511:[[1740],256]},
-64512:{64512:[[1574,1580],256],64513:[[1574,1581],256],64514:[[1574,1605],256],64515:[[1574,1609],256],64516:[[1574,1610],256],64517:[[1576,1580],256],64518:[[1576,1581],256],64519:[[1576,1582],256],64520:[[1576,1605],256],64521:[[1576,1609],256],64522:[[1576,1610],256],64523:[[1578,1580],256],64524:[[1578,1581],256],64525:[[1578,1582],256],64526:[[1578,1605],256],64527:[[1578,1609],256],64528:[[1578,1610],256],64529:[[1579,1580],256],64530:[[1579,1605],256],64531:[[1579,1609],256],64532:[[1579,1610],256],64533:[[1580,1581],256],64534:[[1580,1605],256],64535:[[1581,1580],256],64536:[[1581,1605],256],64537:[[1582,1580],256],64538:[[1582,1581],256],64539:[[1582,1605],256],64540:[[1587,1580],256],64541:[[1587,1581],256],64542:[[1587,1582],256],64543:[[1587,1605],256],64544:[[1589,1581],256],64545:[[1589,1605],256],64546:[[1590,1580],256],64547:[[1590,1581],256],64548:[[1590,1582],256],64549:[[1590,1605],256],64550:[[1591,1581],256],64551:[[1591,1605],256],64552:[[1592,1605],256],64553:[[1593,1580],256],64554:[[1593,1605],256],64555:[[1594,1580],256],64556:[[1594,1605],256],64557:[[1601,1580],256],64558:[[1601,1581],256],64559:[[1601,1582],256],64560:[[1601,1605],256],64561:[[1601,1609],256],64562:[[1601,1610],256],64563:[[1602,1581],256],64564:[[1602,1605],256],64565:[[1602,1609],256],64566:[[1602,1610],256],64567:[[1603,1575],256],64568:[[1603,1580],256],64569:[[1603,1581],256],64570:[[1603,1582],256],64571:[[1603,1604],256],64572:[[1603,1605],256],64573:[[1603,1609],256],64574:[[1603,1610],256],64575:[[1604,1580],256],64576:[[1604,1581],256],64577:[[1604,1582],256],64578:[[1604,1605],256],64579:[[1604,1609],256],64580:[[1604,1610],256],64581:[[1605,1580],256],64582:[[1605,1581],256],64583:[[1605,1582],256],64584:[[1605,1605],256],64585:[[1605,1609],256],64586:[[1605,1610],256],64587:[[1606,1580],256],64588:[[1606,1581],256],64589:[[1606,1582],256],64590:[[1606,1605],256],64591:[[1606,1609],256],64592:[[1606,1610],256],64593:[[1607,1580],256],64594:[[1607,1605],256],64595:[[1607,1609],256],64596:[[1607,1610],256],64597:[[1610,1580],256],64598:[[1610,1581],256],64599:[[1610,1582],256],64600:[[1610,1605],256],64601:[[1610,1609],256],64602:[[1610,1610],256],64603:[[1584,1648],256],64604:[[1585,1648],256],64605:[[1609,1648],256],64606:[[32,1612,1617],256],64607:[[32,1613,1617],256],64608:[[32,1614,1617],256],64609:[[32,1615,1617],256],64610:[[32,1616,1617],256],64611:[[32,1617,1648],256],64612:[[1574,1585],256],64613:[[1574,1586],256],64614:[[1574,1605],256],64615:[[1574,1606],256],64616:[[1574,1609],256],64617:[[1574,1610],256],64618:[[1576,1585],256],64619:[[1576,1586],256],64620:[[1576,1605],256],64621:[[1576,1606],256],64622:[[1576,1609],256],64623:[[1576,1610],256],64624:[[1578,1585],256],64625:[[1578,1586],256],64626:[[1578,1605],256],64627:[[1578,1606],256],64628:[[1578,1609],256],64629:[[1578,1610],256],64630:[[1579,1585],256],64631:[[1579,1586],256],64632:[[1579,1605],256],64633:[[1579,1606],256],64634:[[1579,1609],256],64635:[[1579,1610],256],64636:[[1601,1609],256],64637:[[1601,1610],256],64638:[[1602,1609],256],64639:[[1602,1610],256],64640:[[1603,1575],256],64641:[[1603,1604],256],64642:[[1603,1605],256],64643:[[1603,1609],256],64644:[[1603,1610],256],64645:[[1604,1605],256],64646:[[1604,1609],256],64647:[[1604,1610],256],64648:[[1605,1575],256],64649:[[1605,1605],256],64650:[[1606,1585],256],64651:[[1606,1586],256],64652:[[1606,1605],256],64653:[[1606,1606],256],64654:[[1606,1609],256],64655:[[1606,1610],256],64656:[[1609,1648],256],64657:[[1610,1585],256],64658:[[1610,1586],256],64659:[[1610,1605],256],64660:[[1610,1606],256],64661:[[1610,1609],256],64662:[[1610,1610],256],64663:[[1574,1580],256],64664:[[1574,1581],256],64665:[[1574,1582],256],64666:[[1574,1605],256],64667:[[1574,1607],256],64668:[[1576,1580],256],64669:[[1576,1581],256],64670:[[1576,1582],256],64671:[[1576,1605],256],64672:[[1576,1607],256],64673:[[1578,1580],256],64674:[[1578,1581],256],64675:[[1578,1582],256],64676:[[1578,1605],256],64677:[[1578,1607],256],64678:[[1579,1605],256],64679:[[1580,1581],256],64680:[[1580,1605],256],64681:[[1581,1580],256],64682:[[1581,1605],256],64683:[[1582,1580],256],64684:[[1582,1605],256],64685:[[1587,1580],256],64686:[[1587,1581],256],64687:[[1587,1582],256],64688:[[1587,1605],256],64689:[[1589,1581],256],64690:[[1589,1582],256],64691:[[1589,1605],256],64692:[[1590,1580],256],64693:[[1590,1581],256],64694:[[1590,1582],256],64695:[[1590,1605],256],64696:[[1591,1581],256],64697:[[1592,1605],256],64698:[[1593,1580],256],64699:[[1593,1605],256],64700:[[1594,1580],256],64701:[[1594,1605],256],64702:[[1601,1580],256],64703:[[1601,1581],256],64704:[[1601,1582],256],64705:[[1601,1605],256],64706:[[1602,1581],256],64707:[[1602,1605],256],64708:[[1603,1580],256],64709:[[1603,1581],256],64710:[[1603,1582],256],64711:[[1603,1604],256],64712:[[1603,1605],256],64713:[[1604,1580],256],64714:[[1604,1581],256],64715:[[1604,1582],256],64716:[[1604,1605],256],64717:[[1604,1607],256],64718:[[1605,1580],256],64719:[[1605,1581],256],64720:[[1605,1582],256],64721:[[1605,1605],256],64722:[[1606,1580],256],64723:[[1606,1581],256],64724:[[1606,1582],256],64725:[[1606,1605],256],64726:[[1606,1607],256],64727:[[1607,1580],256],64728:[[1607,1605],256],64729:[[1607,1648],256],64730:[[1610,1580],256],64731:[[1610,1581],256],64732:[[1610,1582],256],64733:[[1610,1605],256],64734:[[1610,1607],256],64735:[[1574,1605],256],64736:[[1574,1607],256],64737:[[1576,1605],256],64738:[[1576,1607],256],64739:[[1578,1605],256],64740:[[1578,1607],256],64741:[[1579,1605],256],64742:[[1579,1607],256],64743:[[1587,1605],256],64744:[[1587,1607],256],64745:[[1588,1605],256],64746:[[1588,1607],256],64747:[[1603,1604],256],64748:[[1603,1605],256],64749:[[1604,1605],256],64750:[[1606,1605],256],64751:[[1606,1607],256],64752:[[1610,1605],256],64753:[[1610,1607],256],64754:[[1600,1614,1617],256],64755:[[1600,1615,1617],256],64756:[[1600,1616,1617],256],64757:[[1591,1609],256],64758:[[1591,1610],256],64759:[[1593,1609],256],64760:[[1593,1610],256],64761:[[1594,1609],256],64762:[[1594,1610],256],64763:[[1587,1609],256],64764:[[1587,1610],256],64765:[[1588,1609],256],64766:[[1588,1610],256],64767:[[1581,1609],256]},
-64768:{64768:[[1581,1610],256],64769:[[1580,1609],256],64770:[[1580,1610],256],64771:[[1582,1609],256],64772:[[1582,1610],256],64773:[[1589,1609],256],64774:[[1589,1610],256],64775:[[1590,1609],256],64776:[[1590,1610],256],64777:[[1588,1580],256],64778:[[1588,1581],256],64779:[[1588,1582],256],64780:[[1588,1605],256],64781:[[1588,1585],256],64782:[[1587,1585],256],64783:[[1589,1585],256],64784:[[1590,1585],256],64785:[[1591,1609],256],64786:[[1591,1610],256],64787:[[1593,1609],256],64788:[[1593,1610],256],64789:[[1594,1609],256],64790:[[1594,1610],256],64791:[[1587,1609],256],64792:[[1587,1610],256],64793:[[1588,1609],256],64794:[[1588,1610],256],64795:[[1581,1609],256],64796:[[1581,1610],256],64797:[[1580,1609],256],64798:[[1580,1610],256],64799:[[1582,1609],256],64800:[[1582,1610],256],64801:[[1589,1609],256],64802:[[1589,1610],256],64803:[[1590,1609],256],64804:[[1590,1610],256],64805:[[1588,1580],256],64806:[[1588,1581],256],64807:[[1588,1582],256],64808:[[1588,1605],256],64809:[[1588,1585],256],64810:[[1587,1585],256],64811:[[1589,1585],256],64812:[[1590,1585],256],64813:[[1588,1580],256],64814:[[1588,1581],256],64815:[[1588,1582],256],64816:[[1588,1605],256],64817:[[1587,1607],256],64818:[[1588,1607],256],64819:[[1591,1605],256],64820:[[1587,1580],256],64821:[[1587,1581],256],64822:[[1587,1582],256],64823:[[1588,1580],256],64824:[[1588,1581],256],64825:[[1588,1582],256],64826:[[1591,1605],256],64827:[[1592,1605],256],64828:[[1575,1611],256],64829:[[1575,1611],256],64848:[[1578,1580,1605],256],64849:[[1578,1581,1580],256],64850:[[1578,1581,1580],256],64851:[[1578,1581,1605],256],64852:[[1578,1582,1605],256],64853:[[1578,1605,1580],256],64854:[[1578,1605,1581],256],64855:[[1578,1605,1582],256],64856:[[1580,1605,1581],256],64857:[[1580,1605,1581],256],64858:[[1581,1605,1610],256],64859:[[1581,1605,1609],256],64860:[[1587,1581,1580],256],64861:[[1587,1580,1581],256],64862:[[1587,1580,1609],256],64863:[[1587,1605,1581],256],64864:[[1587,1605,1581],256],64865:[[1587,1605,1580],256],64866:[[1587,1605,1605],256],64867:[[1587,1605,1605],256],64868:[[1589,1581,1581],256],64869:[[1589,1581,1581],256],64870:[[1589,1605,1605],256],64871:[[1588,1581,1605],256],64872:[[1588,1581,1605],256],64873:[[1588,1580,1610],256],64874:[[1588,1605,1582],256],64875:[[1588,1605,1582],256],64876:[[1588,1605,1605],256],64877:[[1588,1605,1605],256],64878:[[1590,1581,1609],256],64879:[[1590,1582,1605],256],64880:[[1590,1582,1605],256],64881:[[1591,1605,1581],256],64882:[[1591,1605,1581],256],64883:[[1591,1605,1605],256],64884:[[1591,1605,1610],256],64885:[[1593,1580,1605],256],64886:[[1593,1605,1605],256],64887:[[1593,1605,1605],256],64888:[[1593,1605,1609],256],64889:[[1594,1605,1605],256],64890:[[1594,1605,1610],256],64891:[[1594,1605,1609],256],64892:[[1601,1582,1605],256],64893:[[1601,1582,1605],256],64894:[[1602,1605,1581],256],64895:[[1602,1605,1605],256],64896:[[1604,1581,1605],256],64897:[[1604,1581,1610],256],64898:[[1604,1581,1609],256],64899:[[1604,1580,1580],256],64900:[[1604,1580,1580],256],64901:[[1604,1582,1605],256],64902:[[1604,1582,1605],256],64903:[[1604,1605,1581],256],64904:[[1604,1605,1581],256],64905:[[1605,1581,1580],256],64906:[[1605,1581,1605],256],64907:[[1605,1581,1610],256],64908:[[1605,1580,1581],256],64909:[[1605,1580,1605],256],64910:[[1605,1582,1580],256],64911:[[1605,1582,1605],256],64914:[[1605,1580,1582],256],64915:[[1607,1605,1580],256],64916:[[1607,1605,1605],256],64917:[[1606,1581,1605],256],64918:[[1606,1581,1609],256],64919:[[1606,1580,1605],256],64920:[[1606,1580,1605],256],64921:[[1606,1580,1609],256],64922:[[1606,1605,1610],256],64923:[[1606,1605,1609],256],64924:[[1610,1605,1605],256],64925:[[1610,1605,1605],256],64926:[[1576,1582,1610],256],64927:[[1578,1580,1610],256],64928:[[1578,1580,1609],256],64929:[[1578,1582,1610],256],64930:[[1578,1582,1609],256],64931:[[1578,1605,1610],256],64932:[[1578,1605,1609],256],64933:[[1580,1605,1610],256],64934:[[1580,1581,1609],256],64935:[[1580,1605,1609],256],64936:[[1587,1582,1609],256],64937:[[1589,1581,1610],256],64938:[[1588,1581,1610],256],64939:[[1590,1581,1610],256],64940:[[1604,1580,1610],256],64941:[[1604,1605,1610],256],64942:[[1610,1581,1610],256],64943:[[1610,1580,1610],256],64944:[[1610,1605,1610],256],64945:[[1605,1605,1610],256],64946:[[1602,1605,1610],256],64947:[[1606,1581,1610],256],64948:[[1602,1605,1581],256],64949:[[1604,1581,1605],256],64950:[[1593,1605,1610],256],64951:[[1603,1605,1610],256],64952:[[1606,1580,1581],256],64953:[[1605,1582,1610],256],64954:[[1604,1580,1605],256],64955:[[1603,1605,1605],256],64956:[[1604,1580,1605],256],64957:[[1606,1580,1581],256],64958:[[1580,1581,1610],256],64959:[[1581,1580,1610],256],64960:[[1605,1580,1610],256],64961:[[1601,1605,1610],256],64962:[[1576,1581,1610],256],64963:[[1603,1605,1605],256],64964:[[1593,1580,1605],256],64965:[[1589,1605,1605],256],64966:[[1587,1582,1610],256],64967:[[1606,1580,1610],256],65008:[[1589,1604,1746],256],65009:[[1602,1604,1746],256],65010:[[1575,1604,1604,1607],256],65011:[[1575,1603,1576,1585],256],65012:[[1605,1581,1605,1583],256],65013:[[1589,1604,1593,1605],256],65014:[[1585,1587,1608,1604],256],65015:[[1593,1604,1610,1607],256],65016:[[1608,1587,1604,1605],256],65017:[[1589,1604,1609],256],65018:[[1589,1604,1609,32,1575,1604,1604,1607,32,1593,1604,1610,1607,32,1608,1587,1604,1605],256],65019:[[1580,1604,32,1580,1604,1575,1604,1607],256],65020:[[1585,1740,1575,1604],256]},
-65024:{65040:[[44],256],65041:[[12289],256],65042:[[12290],256],65043:[[58],256],65044:[[59],256],65045:[[33],256],65046:[[63],256],65047:[[12310],256],65048:[[12311],256],65049:[[8230],256],65056:[,230],65057:[,230],65058:[,230],65059:[,230],65060:[,230],65061:[,230],65062:[,230],65063:[,220],65064:[,220],65065:[,220],65066:[,220],65067:[,220],65068:[,220],65069:[,220],65072:[[8229],256],65073:[[8212],256],65074:[[8211],256],65075:[[95],256],65076:[[95],256],65077:[[40],256],65078:[[41],256],65079:[[123],256],65080:[[125],256],65081:[[12308],256],65082:[[12309],256],65083:[[12304],256],65084:[[12305],256],65085:[[12298],256],65086:[[12299],256],65087:[[12296],256],65088:[[12297],256],65089:[[12300],256],65090:[[12301],256],65091:[[12302],256],65092:[[12303],256],65095:[[91],256],65096:[[93],256],65097:[[8254],256],65098:[[8254],256],65099:[[8254],256],65100:[[8254],256],65101:[[95],256],65102:[[95],256],65103:[[95],256],65104:[[44],256],65105:[[12289],256],65106:[[46],256],65108:[[59],256],65109:[[58],256],65110:[[63],256],65111:[[33],256],65112:[[8212],256],65113:[[40],256],65114:[[41],256],65115:[[123],256],65116:[[125],256],65117:[[12308],256],65118:[[12309],256],65119:[[35],256],65120:[[38],256],65121:[[42],256],65122:[[43],256],65123:[[45],256],65124:[[60],256],65125:[[62],256],65126:[[61],256],65128:[[92],256],65129:[[36],256],65130:[[37],256],65131:[[64],256],65136:[[32,1611],256],65137:[[1600,1611],256],65138:[[32,1612],256],65140:[[32,1613],256],65142:[[32,1614],256],65143:[[1600,1614],256],65144:[[32,1615],256],65145:[[1600,1615],256],65146:[[32,1616],256],65147:[[1600,1616],256],65148:[[32,1617],256],65149:[[1600,1617],256],65150:[[32,1618],256],65151:[[1600,1618],256],65152:[[1569],256],65153:[[1570],256],65154:[[1570],256],65155:[[1571],256],65156:[[1571],256],65157:[[1572],256],65158:[[1572],256],65159:[[1573],256],65160:[[1573],256],65161:[[1574],256],65162:[[1574],256],65163:[[1574],256],65164:[[1574],256],65165:[[1575],256],65166:[[1575],256],65167:[[1576],256],65168:[[1576],256],65169:[[1576],256],65170:[[1576],256],65171:[[1577],256],65172:[[1577],256],65173:[[1578],256],65174:[[1578],256],65175:[[1578],256],65176:[[1578],256],65177:[[1579],256],65178:[[1579],256],65179:[[1579],256],65180:[[1579],256],65181:[[1580],256],65182:[[1580],256],65183:[[1580],256],65184:[[1580],256],65185:[[1581],256],65186:[[1581],256],65187:[[1581],256],65188:[[1581],256],65189:[[1582],256],65190:[[1582],256],65191:[[1582],256],65192:[[1582],256],65193:[[1583],256],65194:[[1583],256],65195:[[1584],256],65196:[[1584],256],65197:[[1585],256],65198:[[1585],256],65199:[[1586],256],65200:[[1586],256],65201:[[1587],256],65202:[[1587],256],65203:[[1587],256],65204:[[1587],256],65205:[[1588],256],65206:[[1588],256],65207:[[1588],256],65208:[[1588],256],65209:[[1589],256],65210:[[1589],256],65211:[[1589],256],65212:[[1589],256],65213:[[1590],256],65214:[[1590],256],65215:[[1590],256],65216:[[1590],256],65217:[[1591],256],65218:[[1591],256],65219:[[1591],256],65220:[[1591],256],65221:[[1592],256],65222:[[1592],256],65223:[[1592],256],65224:[[1592],256],65225:[[1593],256],65226:[[1593],256],65227:[[1593],256],65228:[[1593],256],65229:[[1594],256],65230:[[1594],256],65231:[[1594],256],65232:[[1594],256],65233:[[1601],256],65234:[[1601],256],65235:[[1601],256],65236:[[1601],256],65237:[[1602],256],65238:[[1602],256],65239:[[1602],256],65240:[[1602],256],65241:[[1603],256],65242:[[1603],256],65243:[[1603],256],65244:[[1603],256],65245:[[1604],256],65246:[[1604],256],65247:[[1604],256],65248:[[1604],256],65249:[[1605],256],65250:[[1605],256],65251:[[1605],256],65252:[[1605],256],65253:[[1606],256],65254:[[1606],256],65255:[[1606],256],65256:[[1606],256],65257:[[1607],256],65258:[[1607],256],65259:[[1607],256],65260:[[1607],256],65261:[[1608],256],65262:[[1608],256],65263:[[1609],256],65264:[[1609],256],65265:[[1610],256],65266:[[1610],256],65267:[[1610],256],65268:[[1610],256],65269:[[1604,1570],256],65270:[[1604,1570],256],65271:[[1604,1571],256],65272:[[1604,1571],256],65273:[[1604,1573],256],65274:[[1604,1573],256],65275:[[1604,1575],256],65276:[[1604,1575],256]},
-65280:{65281:[[33],256],65282:[[34],256],65283:[[35],256],65284:[[36],256],65285:[[37],256],65286:[[38],256],65287:[[39],256],65288:[[40],256],65289:[[41],256],65290:[[42],256],65291:[[43],256],65292:[[44],256],65293:[[45],256],65294:[[46],256],65295:[[47],256],65296:[[48],256],65297:[[49],256],65298:[[50],256],65299:[[51],256],65300:[[52],256],65301:[[53],256],65302:[[54],256],65303:[[55],256],65304:[[56],256],65305:[[57],256],65306:[[58],256],65307:[[59],256],65308:[[60],256],65309:[[61],256],65310:[[62],256],65311:[[63],256],65312:[[64],256],65313:[[65],256],65314:[[66],256],65315:[[67],256],65316:[[68],256],65317:[[69],256],65318:[[70],256],65319:[[71],256],65320:[[72],256],65321:[[73],256],65322:[[74],256],65323:[[75],256],65324:[[76],256],65325:[[77],256],65326:[[78],256],65327:[[79],256],65328:[[80],256],65329:[[81],256],65330:[[82],256],65331:[[83],256],65332:[[84],256],65333:[[85],256],65334:[[86],256],65335:[[87],256],65336:[[88],256],65337:[[89],256],65338:[[90],256],65339:[[91],256],65340:[[92],256],65341:[[93],256],65342:[[94],256],65343:[[95],256],65344:[[96],256],65345:[[97],256],65346:[[98],256],65347:[[99],256],65348:[[100],256],65349:[[101],256],65350:[[102],256],65351:[[103],256],65352:[[104],256],65353:[[105],256],65354:[[106],256],65355:[[107],256],65356:[[108],256],65357:[[109],256],65358:[[110],256],65359:[[111],256],65360:[[112],256],65361:[[113],256],65362:[[114],256],65363:[[115],256],65364:[[116],256],65365:[[117],256],65366:[[118],256],65367:[[119],256],65368:[[120],256],65369:[[121],256],65370:[[122],256],65371:[[123],256],65372:[[124],256],65373:[[125],256],65374:[[126],256],65375:[[10629],256],65376:[[10630],256],65377:[[12290],256],65378:[[12300],256],65379:[[12301],256],65380:[[12289],256],65381:[[12539],256],65382:[[12530],256],65383:[[12449],256],65384:[[12451],256],65385:[[12453],256],65386:[[12455],256],65387:[[12457],256],65388:[[12515],256],65389:[[12517],256],65390:[[12519],256],65391:[[12483],256],65392:[[12540],256],65393:[[12450],256],65394:[[12452],256],65395:[[12454],256],65396:[[12456],256],65397:[[12458],256],65398:[[12459],256],65399:[[12461],256],65400:[[12463],256],65401:[[12465],256],65402:[[12467],256],65403:[[12469],256],65404:[[12471],256],65405:[[12473],256],65406:[[12475],256],65407:[[12477],256],65408:[[12479],256],65409:[[12481],256],65410:[[12484],256],65411:[[12486],256],65412:[[12488],256],65413:[[12490],256],65414:[[12491],256],65415:[[12492],256],65416:[[12493],256],65417:[[12494],256],65418:[[12495],256],65419:[[12498],256],65420:[[12501],256],65421:[[12504],256],65422:[[12507],256],65423:[[12510],256],65424:[[12511],256],65425:[[12512],256],65426:[[12513],256],65427:[[12514],256],65428:[[12516],256],65429:[[12518],256],65430:[[12520],256],65431:[[12521],256],65432:[[12522],256],65433:[[12523],256],65434:[[12524],256],65435:[[12525],256],65436:[[12527],256],65437:[[12531],256],65438:[[12441],256],65439:[[12442],256],65440:[[12644],256],65441:[[12593],256],65442:[[12594],256],65443:[[12595],256],65444:[[12596],256],65445:[[12597],256],65446:[[12598],256],65447:[[12599],256],65448:[[12600],256],65449:[[12601],256],65450:[[12602],256],65451:[[12603],256],65452:[[12604],256],65453:[[12605],256],65454:[[12606],256],65455:[[12607],256],65456:[[12608],256],65457:[[12609],256],65458:[[12610],256],65459:[[12611],256],65460:[[12612],256],65461:[[12613],256],65462:[[12614],256],65463:[[12615],256],65464:[[12616],256],65465:[[12617],256],65466:[[12618],256],65467:[[12619],256],65468:[[12620],256],65469:[[12621],256],65470:[[12622],256],65474:[[12623],256],65475:[[12624],256],65476:[[12625],256],65477:[[12626],256],65478:[[12627],256],65479:[[12628],256],65482:[[12629],256],65483:[[12630],256],65484:[[12631],256],65485:[[12632],256],65486:[[12633],256],65487:[[12634],256],65490:[[12635],256],65491:[[12636],256],65492:[[12637],256],65493:[[12638],256],65494:[[12639],256],65495:[[12640],256],65498:[[12641],256],65499:[[12642],256],65500:[[12643],256],65504:[[162],256],65505:[[163],256],65506:[[172],256],65507:[[175],256],65508:[[166],256],65509:[[165],256],65510:[[8361],256],65512:[[9474],256],65513:[[8592],256],65514:[[8593],256],65515:[[8594],256],65516:[[8595],256],65517:[[9632],256],65518:[[9675],256]}
-
-};
-
-   /***** Module to export */
-   var unorm = {
-      nfc: nfc,
-      nfd: nfd,
-      nfkc: nfkc,
-      nfkd: nfkd
-   };
-
-   /*globals module:true,define:true*/
-
-   // CommonJS
-   if (typeof module === "object") {
-      module.exports = unorm;
-
-   // AMD
-   } else if (typeof define === "function" && define.amd) {
-      define("unorm", function () {
-         return unorm;
-      });
-
-   // Global
-   } else {
-      root.unorm = unorm;
-   }
-
-   /***** Export as shim for String::normalize method *****/
-   /*
-      http://wiki.ecmascript.org/doku.php?id=harmony:specification_drafts#november_8_2013_draft_rev_21
-
-      21.1.3.12 String.prototype.normalize(form="NFC")
-      When the normalize method is called with one argument form, the following steps are taken:
-
-      1. Let O be CheckObjectCoercible(this value).
-      2. Let S be ToString(O).
-      3. ReturnIfAbrupt(S).
-      4. If form is not provided or undefined let form be "NFC".
-      5. Let f be ToString(form).
-      6. ReturnIfAbrupt(f).
-      7. If f is not one of "NFC", "NFD", "NFKC", or "NFKD", then throw a RangeError Exception.
-      8. Let ns be the String value is the result of normalizing S into the normalization form named by f as specified in Unicode Standard Annex #15, UnicodeNormalizatoin Forms.
-      9. Return ns.
-
-      The length property of the normalize method is 0.
-
-      *NOTE* The normalize function is intentionally generic; it does not require that its this value be a String object. Therefore it can be transferred to other kinds of objects for use as a method.
-   */
-    unorm.shimApplied = false;
-
-   if (!String.prototype.normalize) {
-      String.prototype.normalize = function(form) {
-         var str = "" + this;
-         form =  form === undefined ? "NFC" : form;
-
-         if (form === "NFC") {
-            return unorm.nfc(str);
-         } else if (form === "NFD") {
-            return unorm.nfd(str);
-         } else if (form === "NFKC") {
-            return unorm.nfkc(str);
-         } else if (form === "NFKD") {
-            return unorm.nfkd(str);
-         } else {
-            throw new RangeError("Invalid normalization form: " + form);
-         }
-      };
-
-      unorm.shimApplied = true;
-   }
-}(this));
diff --git a/bin/node_modules/unorm/package.json b/bin/node_modules/unorm/package.json
deleted file mode 100644
index a39446a..0000000
--- a/bin/node_modules/unorm/package.json
+++ /dev/null
@@ -1,69 +0,0 @@
-{
-  "name": "unorm",
-  "version": "1.4.1",
-  "description": "JavaScript Unicode 8.0 Normalization - NFC, NFD, NFKC, NFKD. Read <http://unicode.org/reports/tr15/> UAX #15 Unicode Normalization Forms.",
-  "author": {
-    "name": "Bjarke Walling",
-    "email": "bwp@bwp.dk"
-  },
-  "license": "MIT or GPL-2.0",
-  "contributors": [
-    {
-      "name": "Bjarke Walling",
-      "email": "bwp@bwp.dk"
-    },
-    {
-      "name": "Oleg Grenrus",
-      "email": "oleg.grenrus@iki.fi"
-    },
-    {
-      "name": "Matsuza",
-      "email": "matsuza@gmail.com"
-    }
-  ],
-  "repository": {
-    "type": "git",
-    "url": "http://github.com/walling/unorm.git"
-  },
-  "main": "./lib/unorm.js",
-  "engines": {
-    "node": ">= 0.4.0"
-  },
-  "scripts": {
-    "test": "grunt test"
-  },
-  "devDependencies": {
-    "benchmark": "~1.0.0",
-    "unorm": "1.4.1",
-    "grunt-contrib-jshint": "~0.8.0",
-    "grunt-contrib-watch": "~0.5.0",
-    "grunt-simple-mocha": "~0.4.0",
-    "grunt": "~0.4.1"
-  },
-  "gitHead": "e802d0d7844cf74b03742bce1147a82ace218396",
-  "bugs": {
-    "url": "https://github.com/walling/unorm/issues"
-  },
-  "homepage": "https://github.com/walling/unorm",
-  "_id": "unorm@1.4.1",
-  "_shasum": "364200d5f13646ca8bcd44490271335614792300",
-  "_from": "unorm@",
-  "_npmVersion": "1.4.28",
-  "_npmUser": {
-    "name": "walling",
-    "email": "bwp@bwp.dk"
-  },
-  "maintainers": [
-    {
-      "name": "walling",
-      "email": "bwp@bwp.dk"
-    }
-  ],
-  "dist": {
-    "shasum": "364200d5f13646ca8bcd44490271335614792300",
-    "tarball": "http://registry.npmjs.org/unorm/-/unorm-1.4.1.tgz"
-  },
-  "directories": {},
-  "_resolved": "https://registry.npmjs.org/unorm/-/unorm-1.4.1.tgz",
-  "readme": "ERROR: No README data found!"
-}
diff --git a/bin/node_modules/xcode/.npmignore b/bin/node_modules/xcode/.npmignore
deleted file mode 100644
index 65e3ba2..0000000
--- a/bin/node_modules/xcode/.npmignore
+++ /dev/null
@@ -1 +0,0 @@
-test/
diff --git a/bin/node_modules/xcode/AUTHORS b/bin/node_modules/xcode/AUTHORS
deleted file mode 100644
index dcef29f..0000000
--- a/bin/node_modules/xcode/AUTHORS
+++ /dev/null
@@ -1,6 +0,0 @@
-Andrew Lunny (@alunny)
-Anis Kadri (@imhotep)
-Mike Reinstein (@mreinstein)
-Filip Maj (@filmaj)
-Brett Rudd (@goya)
-Bob Easterday (@bobeast)
diff --git a/bin/node_modules/xcode/LICENSE b/bin/node_modules/xcode/LICENSE
deleted file mode 100644
index 45f03a3..0000000
--- a/bin/node_modules/xcode/LICENSE
+++ /dev/null
@@ -1,14 +0,0 @@
-   Copyright 2012 Andrew Lunny, Adobe Systems
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-
diff --git a/bin/node_modules/xcode/Makefile b/bin/node_modules/xcode/Makefile
deleted file mode 100644
index f838310..0000000
--- a/bin/node_modules/xcode/Makefile
+++ /dev/null
@@ -1,5 +0,0 @@
-tests:
-	nodeunit test/* test/parser/*
-
-parser:
-	pegjs lib/parser/pbxproj.pegjs
diff --git a/bin/node_modules/xcode/README.md b/bin/node_modules/xcode/README.md
deleted file mode 100644
index fe902ad..0000000
--- a/bin/node_modules/xcode/README.md
+++ /dev/null
@@ -1,42 +0,0 @@
-# node-xcode
-
-> parser/toolkit for xcodeproj project files
-
-Allows you to edit xcodeproject files and write them back out.
-
-## Example
-
-    // API is a bit wonky right now
-    var xcode = require('xcode'),
-        fs = require('fs'),
-        projectPath = 'myproject.xcodeproj/project.pbxproj',
-        myProj = xcode.project(projectPath);
-
-    // parsing is async, in a different process
-    myProj.parse(function (err) {
-        myProj.addHeaderFile('foo.h');
-        myProj.addSourceFile('foo.m');
-        myProj.addFramework('FooKit.framework');
-        
-        fs.writeFileSync(projectPath, myProj.writeSync());
-        console.log('new project written');
-    });
-
-## Working on the parser
-
-If there's a problem parsing, you will want to edit the grammar under
-`lib/parser/pbxproj.pegjs`. You can test it online with the PEGjs online thingy
-at http://pegjs.majda.cz/online - I have had some mixed results though.
-
-Tests under the `test/parser` directory will compile the parser from the
-grammar. Other tests will use the prebuilt parser (`lib/parser/pbxproj.js`).
-
-To rebuild the parser js file after editing the grammar, run:
-
-    ./node_modules/.bin/pegjs lib/parser/pbxproj.pegjs
-
-(easier if `./node_modules/.bin` is in your path)
-
-## License
-
-MIT
diff --git a/bin/node_modules/xcode/index.js b/bin/node_modules/xcode/index.js
deleted file mode 100644
index c593bb8..0000000
--- a/bin/node_modules/xcode/index.js
+++ /dev/null
@@ -1 +0,0 @@
-exports.project = require('./lib/pbxProject')
diff --git a/bin/node_modules/xcode/lib/parseJob.js b/bin/node_modules/xcode/lib/parseJob.js
deleted file mode 100644
index 9d6bffa..0000000
--- a/bin/node_modules/xcode/lib/parseJob.js
+++ /dev/null
@@ -1,15 +0,0 @@
-// parsing is slow and blocking right now
-// so we do it in a separate process
-var fs = require('fs'),
-    parser = require('./parser/pbxproj'),
-    path = process.argv[2],
-    fileContents, obj;
-
-try {
-    fileContents = fs.readFileSync(path, 'utf-8');
-    obj = parser.parse(fileContents);
-    process.send(obj);
-} catch (e) {
-    process.send(e);
-    process.exitCode = 1;
-}
diff --git a/bin/node_modules/xcode/lib/parser/pbxproj.js b/bin/node_modules/xcode/lib/parser/pbxproj.js
deleted file mode 100644
index f574479..0000000
--- a/bin/node_modules/xcode/lib/parser/pbxproj.js
+++ /dev/null
@@ -1,1843 +0,0 @@
-module.exports = (function() {
-  /*
-   * Generated by PEG.js 0.8.0.
-   *
-   * http://pegjs.majda.cz/
-   */
-
-  function peg$subclass(child, parent) {
-    function ctor() { this.constructor = child; }
-    ctor.prototype = parent.prototype;
-    child.prototype = new ctor();
-  }
-
-  function SyntaxError(message, expected, found, offset, line, column) {
-    this.message  = message;
-    this.expected = expected;
-    this.found    = found;
-    this.offset   = offset;
-    this.line     = line;
-    this.column   = column;
-
-    this.name     = "SyntaxError";
-  }
-
-  peg$subclass(SyntaxError, Error);
-
-  function parse(input) {
-    var options = arguments.length > 1 ? arguments[1] : {},
-
-        peg$FAILED = {},
-
-        peg$startRuleFunctions = { Project: peg$parseProject },
-        peg$startRuleFunction  = peg$parseProject,
-
-        peg$c0 = peg$FAILED,
-        peg$c1 = null,
-        peg$c2 = function(headComment, obj) {
-                var proj = Object.create(null)
-                proj.project = obj
-
-                if (headComment) {
-                    proj.headComment = headComment
-                }
-
-                return proj;
-            },
-        peg$c3 = "{",
-        peg$c4 = { type: "literal", value: "{", description: "\"{\"" },
-        peg$c5 = "}",
-        peg$c6 = { type: "literal", value: "}", description: "\"}\"" },
-        peg$c7 = function(obj) { return obj },
-        peg$c8 = function() { return Object.create(null) },
-        peg$c9 = [],
-        peg$c10 = function(head, tail) { 
-              if (tail) return merge(head,tail)
-              else return head
-            },
-        peg$c11 = function(head, tail) {
-              if (tail) return merge(head,tail)
-              else return head
-            },
-        peg$c12 = "=",
-        peg$c13 = { type: "literal", value: "=", description: "\"=\"" },
-        peg$c14 = ";",
-        peg$c15 = { type: "literal", value: ";", description: "\";\"" },
-        peg$c16 = function(id, val) { 
-              var result = Object.create(null);
-              result[id] = val
-              return result
-            },
-        peg$c17 = function(commentedId, val) {
-                var result = Object.create(null),
-                    commentKey = commentedId.id + '_comment';
-
-                result[commentedId.id] = val;
-                result[commentKey] = commentedId[commentKey];
-                return result;
-
-            },
-        peg$c18 = function(id, commentedVal) {
-                var result = Object.create(null);
-                result[id] = commentedVal.value;
-                result[id + "_comment"] = commentedVal.comment;
-                return result;
-            },
-        peg$c19 = function(id, comment) {
-                var result = Object.create(null);
-                result.id = id;
-                result[id + "_comment"] = comment.trim();
-                return result
-            },
-        peg$c20 = function(literal, comment) {
-                var result = Object.create(null)
-                result.comment = comment.trim();
-                result.value = literal.trim();
-                return result;
-            },
-        peg$c21 = /^[^*]/,
-        peg$c22 = { type: "class", value: "[^*]", description: "[^*]" },
-        peg$c23 = function(body) { return body.join('') },
-        peg$c24 = "/*",
-        peg$c25 = { type: "literal", value: "/*", description: "\"/*\"" },
-        peg$c26 = "*/",
-        peg$c27 = { type: "literal", value: "*/", description: "\"*/\"" },
-        peg$c28 = function(begin, fields) {
-                var section = Object.create(null);
-                section[begin.name] = fields
-
-                return section
-            },
-        peg$c29 = "/* Begin ",
-        peg$c30 = { type: "literal", value: "/* Begin ", description: "\"/* Begin \"" },
-        peg$c31 = " section */",
-        peg$c32 = { type: "literal", value: " section */", description: "\" section */\"" },
-        peg$c33 = function(sectionName) { return { name: sectionName } },
-        peg$c34 = "/* End ",
-        peg$c35 = { type: "literal", value: "/* End ", description: "\"/* End \"" },
-        peg$c36 = "(",
-        peg$c37 = { type: "literal", value: "(", description: "\"(\"" },
-        peg$c38 = ")",
-        peg$c39 = { type: "literal", value: ")", description: "\")\"" },
-        peg$c40 = function(arr) { return arr },
-        peg$c41 = function() { return [] },
-        peg$c42 = function(head, tail) {
-                if (tail) {
-                    tail.unshift(head);
-                    return tail;
-                } else {
-                    return [head];
-                }
-            },
-        peg$c43 = function(val) { return val },
-        peg$c44 = function(val, comment) {
-                var result = Object.create(null);
-                result.value = val.trim();
-                result.comment = comment.trim();
-                return result;
-            },
-        peg$c45 = ",",
-        peg$c46 = { type: "literal", value: ",", description: "\",\"" },
-        peg$c47 = void 0,
-        peg$c48 = /^[A-Za-z0-9_.]/,
-        peg$c49 = { type: "class", value: "[A-Za-z0-9_.]", description: "[A-Za-z0-9_.]" },
-        peg$c50 = function(id) { return id.join('') },
-        peg$c51 = ".",
-        peg$c52 = { type: "literal", value: ".", description: "\".\"" },
-        peg$c53 = function(decimal) { 
-                // store decimals as strings
-                // as JS doesn't differentiate bw strings and numbers
-                return decimal.join('')
-            },
-        peg$c54 = function(number) { return parseInt(number.join(''), 10) },
-        peg$c55 = function(str) { return '"' + str + '"' },
-        peg$c56 = function(str) { return str.join('') },
-        peg$c57 = { type: "any", description: "any character" },
-        peg$c58 = function(char) { return char },
-        peg$c59 = "\\",
-        peg$c60 = { type: "literal", value: "\\", description: "\"\\\\\"" },
-        peg$c61 = function() { return '\\"' },
-        peg$c62 = function(literal) { return literal.join('') },
-        peg$c63 = /^[^;,\n]/,
-        peg$c64 = { type: "class", value: "[^;,\\n]", description: "[^;,\\n]" },
-        peg$c65 = "//",
-        peg$c66 = { type: "literal", value: "//", description: "\"//\"" },
-        peg$c67 = function(contents) { return contents },
-        peg$c68 = function(contents) { return contents.join('') },
-        peg$c69 = /^[0-9]/,
-        peg$c70 = { type: "class", value: "[0-9]", description: "[0-9]" },
-        peg$c71 = /^[A-Za-z]/,
-        peg$c72 = { type: "class", value: "[A-Za-z]", description: "[A-Za-z]" },
-        peg$c73 = "\"",
-        peg$c74 = { type: "literal", value: "\"", description: "\"\\\"\"" },
-        peg$c75 = { type: "other", description: "whitespace" },
-        peg$c76 = /^[\t ]/,
-        peg$c77 = { type: "class", value: "[\\t ]", description: "[\\t ]" },
-        peg$c78 = /^[\n\r]/,
-        peg$c79 = { type: "class", value: "[\\n\\r]", description: "[\\n\\r]" },
-
-        peg$currPos          = 0,
-        peg$reportedPos      = 0,
-        peg$cachedPos        = 0,
-        peg$cachedPosDetails = { line: 1, column: 1, seenCR: false },
-        peg$maxFailPos       = 0,
-        peg$maxFailExpected  = [],
-        peg$silentFails      = 0,
-
-        peg$result;
-
-    if ("startRule" in options) {
-      if (!(options.startRule in peg$startRuleFunctions)) {
-        throw new Error("Can't start parsing from rule \"" + options.startRule + "\".");
-      }
-
-      peg$startRuleFunction = peg$startRuleFunctions[options.startRule];
-    }
-
-    function text() {
-      return input.substring(peg$reportedPos, peg$currPos);
-    }
-
-    function offset() {
-      return peg$reportedPos;
-    }
-
-    function line() {
-      return peg$computePosDetails(peg$reportedPos).line;
-    }
-
-    function column() {
-      return peg$computePosDetails(peg$reportedPos).column;
-    }
-
-    function expected(description) {
-      throw peg$buildException(
-        null,
-        [{ type: "other", description: description }],
-        peg$reportedPos
-      );
-    }
-
-    function error(message) {
-      throw peg$buildException(message, null, peg$reportedPos);
-    }
-
-    function peg$computePosDetails(pos) {
-      function advance(details, startPos, endPos) {
-        var p, ch;
-
-        for (p = startPos; p < endPos; p++) {
-          ch = input.charAt(p);
-          if (ch === "\n") {
-            if (!details.seenCR) { details.line++; }
-            details.column = 1;
-            details.seenCR = false;
-          } else if (ch === "\r" || ch === "\u2028" || ch === "\u2029") {
-            details.line++;
-            details.column = 1;
-            details.seenCR = true;
-          } else {
-            details.column++;
-            details.seenCR = false;
-          }
-        }
-      }
-
-      if (peg$cachedPos !== pos) {
-        if (peg$cachedPos > pos) {
-          peg$cachedPos = 0;
-          peg$cachedPosDetails = { line: 1, column: 1, seenCR: false };
-        }
-        advance(peg$cachedPosDetails, peg$cachedPos, pos);
-        peg$cachedPos = pos;
-      }
-
-      return peg$cachedPosDetails;
-    }
-
-    function peg$fail(expected) {
-      if (peg$currPos < peg$maxFailPos) { return; }
-
-      if (peg$currPos > peg$maxFailPos) {
-        peg$maxFailPos = peg$currPos;
-        peg$maxFailExpected = [];
-      }
-
-      peg$maxFailExpected.push(expected);
-    }
-
-    function peg$buildException(message, expected, pos) {
-      function cleanupExpected(expected) {
-        var i = 1;
-
-        expected.sort(function(a, b) {
-          if (a.description < b.description) {
-            return -1;
-          } else if (a.description > b.description) {
-            return 1;
-          } else {
-            return 0;
-          }
-        });
-
-        while (i < expected.length) {
-          if (expected[i - 1] === expected[i]) {
-            expected.splice(i, 1);
-          } else {
-            i++;
-          }
-        }
-      }
-
-      function buildMessage(expected, found) {
-        function stringEscape(s) {
-          function hex(ch) { return ch.charCodeAt(0).toString(16).toUpperCase(); }
-
-          return s
-            .replace(/\\/g,   '\\\\')
-            .replace(/"/g,    '\\"')
-            .replace(/\x08/g, '\\b')
-            .replace(/\t/g,   '\\t')
-            .replace(/\n/g,   '\\n')
-            .replace(/\f/g,   '\\f')
-            .replace(/\r/g,   '\\r')
-            .replace(/[\x00-\x07\x0B\x0E\x0F]/g, function(ch) { return '\\x0' + hex(ch); })
-            .replace(/[\x10-\x1F\x80-\xFF]/g,    function(ch) { return '\\x'  + hex(ch); })
-            .replace(/[\u0180-\u0FFF]/g,         function(ch) { return '\\u0' + hex(ch); })
-            .replace(/[\u1080-\uFFFF]/g,         function(ch) { return '\\u'  + hex(ch); });
-        }
-
-        var expectedDescs = new Array(expected.length),
-            expectedDesc, foundDesc, i;
-
-        for (i = 0; i < expected.length; i++) {
-          expectedDescs[i] = expected[i].description;
-        }
-
-        expectedDesc = expected.length > 1
-          ? expectedDescs.slice(0, -1).join(", ")
-              + " or "
-              + expectedDescs[expected.length - 1]
-          : expectedDescs[0];
-
-        foundDesc = found ? "\"" + stringEscape(found) + "\"" : "end of input";
-
-        return "Expected " + expectedDesc + " but " + foundDesc + " found.";
-      }
-
-      var posDetails = peg$computePosDetails(pos),
-          found      = pos < input.length ? input.charAt(pos) : null;
-
-      if (expected !== null) {
-        cleanupExpected(expected);
-      }
-
-      return new SyntaxError(
-        message !== null ? message : buildMessage(expected, found),
-        expected,
-        found,
-        pos,
-        posDetails.line,
-        posDetails.column
-      );
-    }
-
-    function peg$parseProject() {
-      var s0, s1, s2, s3, s4, s5, s6;
-
-      s0 = peg$currPos;
-      s1 = peg$parseSingleLineComment();
-      if (s1 === peg$FAILED) {
-        s1 = peg$c1;
-      }
-      if (s1 !== peg$FAILED) {
-        s2 = peg$parseInlineComment();
-        if (s2 === peg$FAILED) {
-          s2 = peg$c1;
-        }
-        if (s2 !== peg$FAILED) {
-          s3 = peg$parse_();
-          if (s3 !== peg$FAILED) {
-            s4 = peg$parseObject();
-            if (s4 !== peg$FAILED) {
-              s5 = peg$parseNewLine();
-              if (s5 !== peg$FAILED) {
-                s6 = peg$parse_();
-                if (s6 !== peg$FAILED) {
-                  peg$reportedPos = s0;
-                  s1 = peg$c2(s1, s4);
-                  s0 = s1;
-                } else {
-                  peg$currPos = s0;
-                  s0 = peg$c0;
-                }
-              } else {
-                peg$currPos = s0;
-                s0 = peg$c0;
-              }
-            } else {
-              peg$currPos = s0;
-              s0 = peg$c0;
-            }
-          } else {
-            peg$currPos = s0;
-            s0 = peg$c0;
-          }
-        } else {
-          peg$currPos = s0;
-          s0 = peg$c0;
-        }
-      } else {
-        peg$currPos = s0;
-        s0 = peg$c0;
-      }
-
-      return s0;
-    }
-
-    function peg$parseObject() {
-      var s0, s1, s2, s3;
-
-      s0 = peg$currPos;
-      if (input.charCodeAt(peg$currPos) === 123) {
-        s1 = peg$c3;
-        peg$currPos++;
-      } else {
-        s1 = peg$FAILED;
-        if (peg$silentFails === 0) { peg$fail(peg$c4); }
-      }
-      if (s1 !== peg$FAILED) {
-        s2 = peg$parseAssignmentList();
-        if (s2 === peg$FAILED) {
-          s2 = peg$parseEmptyBody();
-        }
-        if (s2 !== peg$FAILED) {
-          if (input.charCodeAt(peg$currPos) === 125) {
-            s3 = peg$c5;
-            peg$currPos++;
-          } else {
-            s3 = peg$FAILED;
-            if (peg$silentFails === 0) { peg$fail(peg$c6); }
-          }
-          if (s3 !== peg$FAILED) {
-            peg$reportedPos = s0;
-            s1 = peg$c7(s2);
-            s0 = s1;
-          } else {
-            peg$currPos = s0;
-            s0 = peg$c0;
-          }
-        } else {
-          peg$currPos = s0;
-          s0 = peg$c0;
-        }
-      } else {
-        peg$currPos = s0;
-        s0 = peg$c0;
-      }
-
-      return s0;
-    }
-
-    function peg$parseEmptyBody() {
-      var s0, s1;
-
-      s0 = peg$currPos;
-      s1 = peg$parse_();
-      if (s1 !== peg$FAILED) {
-        peg$reportedPos = s0;
-        s1 = peg$c8();
-      }
-      s0 = s1;
-
-      return s0;
-    }
-
-    function peg$parseAssignmentList() {
-      var s0, s1, s2, s3, s4, s5;
-
-      s0 = peg$currPos;
-      s1 = peg$parse_();
-      if (s1 !== peg$FAILED) {
-        s2 = peg$parseAssignment();
-        if (s2 !== peg$FAILED) {
-          s3 = peg$parse_();
-          if (s3 !== peg$FAILED) {
-            s4 = [];
-            s5 = peg$parseAssignmentList();
-            while (s5 !== peg$FAILED) {
-              s4.push(s5);
-              s5 = peg$parseAssignmentList();
-            }
-            if (s4 !== peg$FAILED) {
-              s5 = peg$parse_();
-              if (s5 !== peg$FAILED) {
-                peg$reportedPos = s0;
-                s1 = peg$c10(s2, s4);
-                s0 = s1;
-              } else {
-                peg$currPos = s0;
-                s0 = peg$c0;
-              }
-            } else {
-              peg$currPos = s0;
-              s0 = peg$c0;
-            }
-          } else {
-            peg$currPos = s0;
-            s0 = peg$c0;
-          }
-        } else {
-          peg$currPos = s0;
-          s0 = peg$c0;
-        }
-      } else {
-        peg$currPos = s0;
-        s0 = peg$c0;
-      }
-      if (s0 === peg$FAILED) {
-        s0 = peg$currPos;
-        s1 = peg$parse_();
-        if (s1 !== peg$FAILED) {
-          s2 = peg$parseDelimitedSection();
-          if (s2 !== peg$FAILED) {
-            s3 = peg$parse_();
-            if (s3 !== peg$FAILED) {
-              s4 = [];
-              s5 = peg$parseAssignmentList();
-              while (s5 !== peg$FAILED) {
-                s4.push(s5);
-                s5 = peg$parseAssignmentList();
-              }
-              if (s4 !== peg$FAILED) {
-                peg$reportedPos = s0;
-                s1 = peg$c11(s2, s4);
-                s0 = s1;
-              } else {
-                peg$currPos = s0;
-                s0 = peg$c0;
-              }
-            } else {
-              peg$currPos = s0;
-              s0 = peg$c0;
-            }
-          } else {
-            peg$currPos = s0;
-            s0 = peg$c0;
-          }
-        } else {
-          peg$currPos = s0;
-          s0 = peg$c0;
-        }
-      }
-
-      return s0;
-    }
-
-    function peg$parseAssignment() {
-      var s0;
-
-      s0 = peg$parseSimpleAssignment();
-      if (s0 === peg$FAILED) {
-        s0 = peg$parseCommentedAssignment();
-      }
-
-      return s0;
-    }
-
-    function peg$parseSimpleAssignment() {
-      var s0, s1, s2, s3, s4, s5, s6;
-
-      s0 = peg$currPos;
-      s1 = peg$parseIdentifier();
-      if (s1 !== peg$FAILED) {
-        s2 = peg$parse_();
-        if (s2 !== peg$FAILED) {
-          if (input.charCodeAt(peg$currPos) === 61) {
-            s3 = peg$c12;
-            peg$currPos++;
-          } else {
-            s3 = peg$FAILED;
-            if (peg$silentFails === 0) { peg$fail(peg$c13); }
-          }
-          if (s3 !== peg$FAILED) {
-            s4 = peg$parse_();
-            if (s4 !== peg$FAILED) {
-              s5 = peg$parseValue();
-              if (s5 !== peg$FAILED) {
-                if (input.charCodeAt(peg$currPos) === 59) {
-                  s6 = peg$c14;
-                  peg$currPos++;
-                } else {
-                  s6 = peg$FAILED;
-                  if (peg$silentFails === 0) { peg$fail(peg$c15); }
-                }
-                if (s6 !== peg$FAILED) {
-                  peg$reportedPos = s0;
-                  s1 = peg$c16(s1, s5);
-                  s0 = s1;
-                } else {
-                  peg$currPos = s0;
-                  s0 = peg$c0;
-                }
-              } else {
-                peg$currPos = s0;
-                s0 = peg$c0;
-              }
-            } else {
-              peg$currPos = s0;
-              s0 = peg$c0;
-            }
-          } else {
-            peg$currPos = s0;
-            s0 = peg$c0;
-          }
-        } else {
-          peg$currPos = s0;
-          s0 = peg$c0;
-        }
-      } else {
-        peg$currPos = s0;
-        s0 = peg$c0;
-      }
-
-      return s0;
-    }
-
-    function peg$parseCommentedAssignment() {
-      var s0, s1, s2, s3, s4, s5, s6;
-
-      s0 = peg$currPos;
-      s1 = peg$parseCommentedIdentifier();
-      if (s1 !== peg$FAILED) {
-        s2 = peg$parse_();
-        if (s2 !== peg$FAILED) {
-          if (input.charCodeAt(peg$currPos) === 61) {
-            s3 = peg$c12;
-            peg$currPos++;
-          } else {
-            s3 = peg$FAILED;
-            if (peg$silentFails === 0) { peg$fail(peg$c13); }
-          }
-          if (s3 !== peg$FAILED) {
-            s4 = peg$parse_();
-            if (s4 !== peg$FAILED) {
-              s5 = peg$parseValue();
-              if (s5 !== peg$FAILED) {
-                if (input.charCodeAt(peg$currPos) === 59) {
-                  s6 = peg$c14;
-                  peg$currPos++;
-                } else {
-                  s6 = peg$FAILED;
-                  if (peg$silentFails === 0) { peg$fail(peg$c15); }
-                }
-                if (s6 !== peg$FAILED) {
-                  peg$reportedPos = s0;
-                  s1 = peg$c17(s1, s5);
-                  s0 = s1;
-                } else {
-                  peg$currPos = s0;
-                  s0 = peg$c0;
-                }
-              } else {
-                peg$currPos = s0;
-                s0 = peg$c0;
-              }
-            } else {
-              peg$currPos = s0;
-              s0 = peg$c0;
-            }
-          } else {
-            peg$currPos = s0;
-            s0 = peg$c0;
-          }
-        } else {
-          peg$currPos = s0;
-          s0 = peg$c0;
-        }
-      } else {
-        peg$currPos = s0;
-        s0 = peg$c0;
-      }
-      if (s0 === peg$FAILED) {
-        s0 = peg$currPos;
-        s1 = peg$parseIdentifier();
-        if (s1 !== peg$FAILED) {
-          s2 = peg$parse_();
-          if (s2 !== peg$FAILED) {
-            if (input.charCodeAt(peg$currPos) === 61) {
-              s3 = peg$c12;
-              peg$currPos++;
-            } else {
-              s3 = peg$FAILED;
-              if (peg$silentFails === 0) { peg$fail(peg$c13); }
-            }
-            if (s3 !== peg$FAILED) {
-              s4 = peg$parse_();
-              if (s4 !== peg$FAILED) {
-                s5 = peg$parseCommentedValue();
-                if (s5 !== peg$FAILED) {
-                  if (input.charCodeAt(peg$currPos) === 59) {
-                    s6 = peg$c14;
-                    peg$currPos++;
-                  } else {
-                    s6 = peg$FAILED;
-                    if (peg$silentFails === 0) { peg$fail(peg$c15); }
-                  }
-                  if (s6 !== peg$FAILED) {
-                    peg$reportedPos = s0;
-                    s1 = peg$c18(s1, s5);
-                    s0 = s1;
-                  } else {
-                    peg$currPos = s0;
-                    s0 = peg$c0;
-                  }
-                } else {
-                  peg$currPos = s0;
-                  s0 = peg$c0;
-                }
-              } else {
-                peg$currPos = s0;
-                s0 = peg$c0;
-              }
-            } else {
-              peg$currPos = s0;
-              s0 = peg$c0;
-            }
-          } else {
-            peg$currPos = s0;
-            s0 = peg$c0;
-          }
-        } else {
-          peg$currPos = s0;
-          s0 = peg$c0;
-        }
-      }
-
-      return s0;
-    }
-
-    function peg$parseCommentedIdentifier() {
-      var s0, s1, s2, s3;
-
-      s0 = peg$currPos;
-      s1 = peg$parseIdentifier();
-      if (s1 !== peg$FAILED) {
-        s2 = peg$parse_();
-        if (s2 !== peg$FAILED) {
-          s3 = peg$parseInlineComment();
-          if (s3 !== peg$FAILED) {
-            peg$reportedPos = s0;
-            s1 = peg$c19(s1, s3);
-            s0 = s1;
-          } else {
-            peg$currPos = s0;
-            s0 = peg$c0;
-          }
-        } else {
-          peg$currPos = s0;
-          s0 = peg$c0;
-        }
-      } else {
-        peg$currPos = s0;
-        s0 = peg$c0;
-      }
-
-      return s0;
-    }
-
-    function peg$parseCommentedValue() {
-      var s0, s1, s2, s3;
-
-      s0 = peg$currPos;
-      s1 = peg$parseValue();
-      if (s1 !== peg$FAILED) {
-        s2 = peg$parse_();
-        if (s2 !== peg$FAILED) {
-          s3 = peg$parseInlineComment();
-          if (s3 !== peg$FAILED) {
-            peg$reportedPos = s0;
-            s1 = peg$c20(s1, s3);
-            s0 = s1;
-          } else {
-            peg$currPos = s0;
-            s0 = peg$c0;
-          }
-        } else {
-          peg$currPos = s0;
-          s0 = peg$c0;
-        }
-      } else {
-        peg$currPos = s0;
-        s0 = peg$c0;
-      }
-
-      return s0;
-    }
-
-    function peg$parseInlineComment() {
-      var s0, s1, s2, s3;
-
-      s0 = peg$currPos;
-      s1 = peg$parseInlineCommentOpen();
-      if (s1 !== peg$FAILED) {
-        s2 = [];
-        if (peg$c21.test(input.charAt(peg$currPos))) {
-          s3 = input.charAt(peg$currPos);
-          peg$currPos++;
-        } else {
-          s3 = peg$FAILED;
-          if (peg$silentFails === 0) { peg$fail(peg$c22); }
-        }
-        if (s3 !== peg$FAILED) {
-          while (s3 !== peg$FAILED) {
-            s2.push(s3);
-            if (peg$c21.test(input.charAt(peg$currPos))) {
-              s3 = input.charAt(peg$currPos);
-              peg$currPos++;
-            } else {
-              s3 = peg$FAILED;
-              if (peg$silentFails === 0) { peg$fail(peg$c22); }
-            }
-          }
-        } else {
-          s2 = peg$c0;
-        }
-        if (s2 !== peg$FAILED) {
-          s3 = peg$parseInlineCommentClose();
-          if (s3 !== peg$FAILED) {
-            peg$reportedPos = s0;
-            s1 = peg$c23(s2);
-            s0 = s1;
-          } else {
-            peg$currPos = s0;
-            s0 = peg$c0;
-          }
-        } else {
-          peg$currPos = s0;
-          s0 = peg$c0;
-        }
-      } else {
-        peg$currPos = s0;
-        s0 = peg$c0;
-      }
-
-      return s0;
-    }
-
-    function peg$parseInlineCommentOpen() {
-      var s0;
-
-      if (input.substr(peg$currPos, 2) === peg$c24) {
-        s0 = peg$c24;
-        peg$currPos += 2;
-      } else {
-        s0 = peg$FAILED;
-        if (peg$silentFails === 0) { peg$fail(peg$c25); }
-      }
-
-      return s0;
-    }
-
-    function peg$parseInlineCommentClose() {
-      var s0;
-
-      if (input.substr(peg$currPos, 2) === peg$c26) {
-        s0 = peg$c26;
-        peg$currPos += 2;
-      } else {
-        s0 = peg$FAILED;
-        if (peg$silentFails === 0) { peg$fail(peg$c27); }
-      }
-
-      return s0;
-    }
-
-    function peg$parseDelimitedSection() {
-      var s0, s1, s2, s3, s4, s5;
-
-      s0 = peg$currPos;
-      s1 = peg$parseDelimitedSectionBegin();
-      if (s1 !== peg$FAILED) {
-        s2 = peg$parse_();
-        if (s2 !== peg$FAILED) {
-          s3 = peg$parseAssignmentList();
-          if (s3 === peg$FAILED) {
-            s3 = peg$parseEmptyBody();
-          }
-          if (s3 !== peg$FAILED) {
-            s4 = peg$parse_();
-            if (s4 !== peg$FAILED) {
-              s5 = peg$parseDelimitedSectionEnd();
-              if (s5 !== peg$FAILED) {
-                peg$reportedPos = s0;
-                s1 = peg$c28(s1, s3);
-                s0 = s1;
-              } else {
-                peg$currPos = s0;
-                s0 = peg$c0;
-              }
-            } else {
-              peg$currPos = s0;
-              s0 = peg$c0;
-            }
-          } else {
-            peg$currPos = s0;
-            s0 = peg$c0;
-          }
-        } else {
-          peg$currPos = s0;
-          s0 = peg$c0;
-        }
-      } else {
-        peg$currPos = s0;
-        s0 = peg$c0;
-      }
-
-      return s0;
-    }
-
-    function peg$parseDelimitedSectionBegin() {
-      var s0, s1, s2, s3, s4;
-
-      s0 = peg$currPos;
-      if (input.substr(peg$currPos, 9) === peg$c29) {
-        s1 = peg$c29;
-        peg$currPos += 9;
-      } else {
-        s1 = peg$FAILED;
-        if (peg$silentFails === 0) { peg$fail(peg$c30); }
-      }
-      if (s1 !== peg$FAILED) {
-        s2 = peg$parseIdentifier();
-        if (s2 !== peg$FAILED) {
-          if (input.substr(peg$currPos, 11) === peg$c31) {
-            s3 = peg$c31;
-            peg$currPos += 11;
-          } else {
-            s3 = peg$FAILED;
-            if (peg$silentFails === 0) { peg$fail(peg$c32); }
-          }
-          if (s3 !== peg$FAILED) {
-            s4 = peg$parseNewLine();
-            if (s4 !== peg$FAILED) {
-              peg$reportedPos = s0;
-              s1 = peg$c33(s2);
-              s0 = s1;
-            } else {
-              peg$currPos = s0;
-              s0 = peg$c0;
-            }
-          } else {
-            peg$currPos = s0;
-            s0 = peg$c0;
-          }
-        } else {
-          peg$currPos = s0;
-          s0 = peg$c0;
-        }
-      } else {
-        peg$currPos = s0;
-        s0 = peg$c0;
-      }
-
-      return s0;
-    }
-
-    function peg$parseDelimitedSectionEnd() {
-      var s0, s1, s2, s3, s4;
-
-      s0 = peg$currPos;
-      if (input.substr(peg$currPos, 7) === peg$c34) {
-        s1 = peg$c34;
-        peg$currPos += 7;
-      } else {
-        s1 = peg$FAILED;
-        if (peg$silentFails === 0) { peg$fail(peg$c35); }
-      }
-      if (s1 !== peg$FAILED) {
-        s2 = peg$parseIdentifier();
-        if (s2 !== peg$FAILED) {
-          if (input.substr(peg$currPos, 11) === peg$c31) {
-            s3 = peg$c31;
-            peg$currPos += 11;
-          } else {
-            s3 = peg$FAILED;
-            if (peg$silentFails === 0) { peg$fail(peg$c32); }
-          }
-          if (s3 !== peg$FAILED) {
-            s4 = peg$parseNewLine();
-            if (s4 !== peg$FAILED) {
-              peg$reportedPos = s0;
-              s1 = peg$c33(s2);
-              s0 = s1;
-            } else {
-              peg$currPos = s0;
-              s0 = peg$c0;
-            }
-          } else {
-            peg$currPos = s0;
-            s0 = peg$c0;
-          }
-        } else {
-          peg$currPos = s0;
-          s0 = peg$c0;
-        }
-      } else {
-        peg$currPos = s0;
-        s0 = peg$c0;
-      }
-
-      return s0;
-    }
-
-    function peg$parseArray() {
-      var s0, s1, s2, s3;
-
-      s0 = peg$currPos;
-      if (input.charCodeAt(peg$currPos) === 40) {
-        s1 = peg$c36;
-        peg$currPos++;
-      } else {
-        s1 = peg$FAILED;
-        if (peg$silentFails === 0) { peg$fail(peg$c37); }
-      }
-      if (s1 !== peg$FAILED) {
-        s2 = peg$parseArrayBody();
-        if (s2 === peg$FAILED) {
-          s2 = peg$parseEmptyArray();
-        }
-        if (s2 !== peg$FAILED) {
-          if (input.charCodeAt(peg$currPos) === 41) {
-            s3 = peg$c38;
-            peg$currPos++;
-          } else {
-            s3 = peg$FAILED;
-            if (peg$silentFails === 0) { peg$fail(peg$c39); }
-          }
-          if (s3 !== peg$FAILED) {
-            peg$reportedPos = s0;
-            s1 = peg$c40(s2);
-            s0 = s1;
-          } else {
-            peg$currPos = s0;
-            s0 = peg$c0;
-          }
-        } else {
-          peg$currPos = s0;
-          s0 = peg$c0;
-        }
-      } else {
-        peg$currPos = s0;
-        s0 = peg$c0;
-      }
-
-      return s0;
-    }
-
-    function peg$parseEmptyArray() {
-      var s0, s1;
-
-      s0 = peg$currPos;
-      s1 = peg$parse_();
-      if (s1 !== peg$FAILED) {
-        peg$reportedPos = s0;
-        s1 = peg$c41();
-      }
-      s0 = s1;
-
-      return s0;
-    }
-
-    function peg$parseArrayBody() {
-      var s0, s1, s2, s3, s4, s5;
-
-      s0 = peg$currPos;
-      s1 = peg$parse_();
-      if (s1 !== peg$FAILED) {
-        s2 = peg$parseArrayEntry();
-        if (s2 !== peg$FAILED) {
-          s3 = peg$parse_();
-          if (s3 !== peg$FAILED) {
-            s4 = peg$parseArrayBody();
-            if (s4 === peg$FAILED) {
-              s4 = peg$c1;
-            }
-            if (s4 !== peg$FAILED) {
-              s5 = peg$parse_();
-              if (s5 !== peg$FAILED) {
-                peg$reportedPos = s0;
-                s1 = peg$c42(s2, s4);
-                s0 = s1;
-              } else {
-                peg$currPos = s0;
-                s0 = peg$c0;
-              }
-            } else {
-              peg$currPos = s0;
-              s0 = peg$c0;
-            }
-          } else {
-            peg$currPos = s0;
-            s0 = peg$c0;
-          }
-        } else {
-          peg$currPos = s0;
-          s0 = peg$c0;
-        }
-      } else {
-        peg$currPos = s0;
-        s0 = peg$c0;
-      }
-
-      return s0;
-    }
-
-    function peg$parseArrayEntry() {
-      var s0;
-
-      s0 = peg$parseSimpleArrayEntry();
-      if (s0 === peg$FAILED) {
-        s0 = peg$parseCommentedArrayEntry();
-      }
-
-      return s0;
-    }
-
-    function peg$parseSimpleArrayEntry() {
-      var s0, s1, s2;
-
-      s0 = peg$currPos;
-      s1 = peg$parseValue();
-      if (s1 !== peg$FAILED) {
-        s2 = peg$parseEndArrayEntry();
-        if (s2 !== peg$FAILED) {
-          peg$reportedPos = s0;
-          s1 = peg$c43(s1);
-          s0 = s1;
-        } else {
-          peg$currPos = s0;
-          s0 = peg$c0;
-        }
-      } else {
-        peg$currPos = s0;
-        s0 = peg$c0;
-      }
-
-      return s0;
-    }
-
-    function peg$parseCommentedArrayEntry() {
-      var s0, s1, s2, s3, s4;
-
-      s0 = peg$currPos;
-      s1 = peg$parseValue();
-      if (s1 !== peg$FAILED) {
-        s2 = peg$parse_();
-        if (s2 !== peg$FAILED) {
-          s3 = peg$parseInlineComment();
-          if (s3 !== peg$FAILED) {
-            s4 = peg$parseEndArrayEntry();
-            if (s4 !== peg$FAILED) {
-              peg$reportedPos = s0;
-              s1 = peg$c44(s1, s3);
-              s0 = s1;
-            } else {
-              peg$currPos = s0;
-              s0 = peg$c0;
-            }
-          } else {
-            peg$currPos = s0;
-            s0 = peg$c0;
-          }
-        } else {
-          peg$currPos = s0;
-          s0 = peg$c0;
-        }
-      } else {
-        peg$currPos = s0;
-        s0 = peg$c0;
-      }
-
-      return s0;
-    }
-
-    function peg$parseEndArrayEntry() {
-      var s0, s1, s2, s3;
-
-      if (input.charCodeAt(peg$currPos) === 44) {
-        s0 = peg$c45;
-        peg$currPos++;
-      } else {
-        s0 = peg$FAILED;
-        if (peg$silentFails === 0) { peg$fail(peg$c46); }
-      }
-      if (s0 === peg$FAILED) {
-        s0 = peg$currPos;
-        s1 = peg$parse_();
-        if (s1 !== peg$FAILED) {
-          s2 = peg$currPos;
-          peg$silentFails++;
-          if (input.charCodeAt(peg$currPos) === 41) {
-            s3 = peg$c38;
-            peg$currPos++;
-          } else {
-            s3 = peg$FAILED;
-            if (peg$silentFails === 0) { peg$fail(peg$c39); }
-          }
-          peg$silentFails--;
-          if (s3 !== peg$FAILED) {
-            peg$currPos = s2;
-            s2 = peg$c47;
-          } else {
-            s2 = peg$c0;
-          }
-          if (s2 !== peg$FAILED) {
-            s1 = [s1, s2];
-            s0 = s1;
-          } else {
-            peg$currPos = s0;
-            s0 = peg$c0;
-          }
-        } else {
-          peg$currPos = s0;
-          s0 = peg$c0;
-        }
-      }
-
-      return s0;
-    }
-
-    function peg$parseIdentifier() {
-      var s0, s1, s2;
-
-      s0 = peg$currPos;
-      s1 = [];
-      if (peg$c48.test(input.charAt(peg$currPos))) {
-        s2 = input.charAt(peg$currPos);
-        peg$currPos++;
-      } else {
-        s2 = peg$FAILED;
-        if (peg$silentFails === 0) { peg$fail(peg$c49); }
-      }
-      if (s2 !== peg$FAILED) {
-        while (s2 !== peg$FAILED) {
-          s1.push(s2);
-          if (peg$c48.test(input.charAt(peg$currPos))) {
-            s2 = input.charAt(peg$currPos);
-            peg$currPos++;
-          } else {
-            s2 = peg$FAILED;
-            if (peg$silentFails === 0) { peg$fail(peg$c49); }
-          }
-        }
-      } else {
-        s1 = peg$c0;
-      }
-      if (s1 !== peg$FAILED) {
-        peg$reportedPos = s0;
-        s1 = peg$c50(s1);
-      }
-      s0 = s1;
-      if (s0 === peg$FAILED) {
-        s0 = peg$parseQuotedString();
-      }
-
-      return s0;
-    }
-
-    function peg$parseValue() {
-      var s0;
-
-      s0 = peg$parseObject();
-      if (s0 === peg$FAILED) {
-        s0 = peg$parseArray();
-        if (s0 === peg$FAILED) {
-          s0 = peg$parseNumberValue();
-          if (s0 === peg$FAILED) {
-            s0 = peg$parseStringValue();
-          }
-        }
-      }
-
-      return s0;
-    }
-
-    function peg$parseNumberValue() {
-      var s0;
-
-      s0 = peg$parseDecimalValue();
-      if (s0 === peg$FAILED) {
-        s0 = peg$parseIntegerValue();
-      }
-
-      return s0;
-    }
-
-    function peg$parseDecimalValue() {
-      var s0, s1, s2, s3, s4;
-
-      s0 = peg$currPos;
-      s1 = peg$currPos;
-      s2 = peg$parseIntegerValue();
-      if (s2 !== peg$FAILED) {
-        if (input.charCodeAt(peg$currPos) === 46) {
-          s3 = peg$c51;
-          peg$currPos++;
-        } else {
-          s3 = peg$FAILED;
-          if (peg$silentFails === 0) { peg$fail(peg$c52); }
-        }
-        if (s3 !== peg$FAILED) {
-          s4 = peg$parseIntegerValue();
-          if (s4 !== peg$FAILED) {
-            s2 = [s2, s3, s4];
-            s1 = s2;
-          } else {
-            peg$currPos = s1;
-            s1 = peg$c0;
-          }
-        } else {
-          peg$currPos = s1;
-          s1 = peg$c0;
-        }
-      } else {
-        peg$currPos = s1;
-        s1 = peg$c0;
-      }
-      if (s1 !== peg$FAILED) {
-        peg$reportedPos = s0;
-        s1 = peg$c53(s1);
-      }
-      s0 = s1;
-
-      return s0;
-    }
-
-    function peg$parseIntegerValue() {
-      var s0, s1, s2, s3, s4;
-
-      s0 = peg$currPos;
-      s1 = peg$currPos;
-      peg$silentFails++;
-      s2 = peg$parseAlpha();
-      peg$silentFails--;
-      if (s2 === peg$FAILED) {
-        s1 = peg$c47;
-      } else {
-        peg$currPos = s1;
-        s1 = peg$c0;
-      }
-      if (s1 !== peg$FAILED) {
-        s2 = [];
-        s3 = peg$parseDigit();
-        if (s3 !== peg$FAILED) {
-          while (s3 !== peg$FAILED) {
-            s2.push(s3);
-            s3 = peg$parseDigit();
-          }
-        } else {
-          s2 = peg$c0;
-        }
-        if (s2 !== peg$FAILED) {
-          s3 = peg$currPos;
-          peg$silentFails++;
-          s4 = peg$parseNonTerminator();
-          peg$silentFails--;
-          if (s4 === peg$FAILED) {
-            s3 = peg$c47;
-          } else {
-            peg$currPos = s3;
-            s3 = peg$c0;
-          }
-          if (s3 !== peg$FAILED) {
-            peg$reportedPos = s0;
-            s1 = peg$c54(s2);
-            s0 = s1;
-          } else {
-            peg$currPos = s0;
-            s0 = peg$c0;
-          }
-        } else {
-          peg$currPos = s0;
-          s0 = peg$c0;
-        }
-      } else {
-        peg$currPos = s0;
-        s0 = peg$c0;
-      }
-
-      return s0;
-    }
-
-    function peg$parseStringValue() {
-      var s0;
-
-      s0 = peg$parseQuotedString();
-      if (s0 === peg$FAILED) {
-        s0 = peg$parseLiteralString();
-      }
-
-      return s0;
-    }
-
-    function peg$parseQuotedString() {
-      var s0, s1, s2, s3;
-
-      s0 = peg$currPos;
-      s1 = peg$parseDoubleQuote();
-      if (s1 !== peg$FAILED) {
-        s2 = peg$parseQuotedBody();
-        if (s2 !== peg$FAILED) {
-          s3 = peg$parseDoubleQuote();
-          if (s3 !== peg$FAILED) {
-            peg$reportedPos = s0;
-            s1 = peg$c55(s2);
-            s0 = s1;
-          } else {
-            peg$currPos = s0;
-            s0 = peg$c0;
-          }
-        } else {
-          peg$currPos = s0;
-          s0 = peg$c0;
-        }
-      } else {
-        peg$currPos = s0;
-        s0 = peg$c0;
-      }
-
-      return s0;
-    }
-
-    function peg$parseQuotedBody() {
-      var s0, s1, s2;
-
-      s0 = peg$currPos;
-      s1 = [];
-      s2 = peg$parseNonQuote();
-      if (s2 !== peg$FAILED) {
-        while (s2 !== peg$FAILED) {
-          s1.push(s2);
-          s2 = peg$parseNonQuote();
-        }
-      } else {
-        s1 = peg$c0;
-      }
-      if (s1 !== peg$FAILED) {
-        peg$reportedPos = s0;
-        s1 = peg$c56(s1);
-      }
-      s0 = s1;
-
-      return s0;
-    }
-
-    function peg$parseNonQuote() {
-      var s0, s1, s2;
-
-      s0 = peg$parseEscapedQuote();
-      if (s0 === peg$FAILED) {
-        s0 = peg$currPos;
-        s1 = peg$currPos;
-        peg$silentFails++;
-        s2 = peg$parseDoubleQuote();
-        peg$silentFails--;
-        if (s2 === peg$FAILED) {
-          s1 = peg$c47;
-        } else {
-          peg$currPos = s1;
-          s1 = peg$c0;
-        }
-        if (s1 !== peg$FAILED) {
-          if (input.length > peg$currPos) {
-            s2 = input.charAt(peg$currPos);
-            peg$currPos++;
-          } else {
-            s2 = peg$FAILED;
-            if (peg$silentFails === 0) { peg$fail(peg$c57); }
-          }
-          if (s2 !== peg$FAILED) {
-            peg$reportedPos = s0;
-            s1 = peg$c58(s2);
-            s0 = s1;
-          } else {
-            peg$currPos = s0;
-            s0 = peg$c0;
-          }
-        } else {
-          peg$currPos = s0;
-          s0 = peg$c0;
-        }
-      }
-
-      return s0;
-    }
-
-    function peg$parseEscapedQuote() {
-      var s0, s1, s2;
-
-      s0 = peg$currPos;
-      if (input.charCodeAt(peg$currPos) === 92) {
-        s1 = peg$c59;
-        peg$currPos++;
-      } else {
-        s1 = peg$FAILED;
-        if (peg$silentFails === 0) { peg$fail(peg$c60); }
-      }
-      if (s1 !== peg$FAILED) {
-        s2 = peg$parseDoubleQuote();
-        if (s2 !== peg$FAILED) {
-          peg$reportedPos = s0;
-          s1 = peg$c61();
-          s0 = s1;
-        } else {
-          peg$currPos = s0;
-          s0 = peg$c0;
-        }
-      } else {
-        peg$currPos = s0;
-        s0 = peg$c0;
-      }
-
-      return s0;
-    }
-
-    function peg$parseLiteralString() {
-      var s0, s1, s2;
-
-      s0 = peg$currPos;
-      s1 = [];
-      s2 = peg$parseLiteralChar();
-      if (s2 !== peg$FAILED) {
-        while (s2 !== peg$FAILED) {
-          s1.push(s2);
-          s2 = peg$parseLiteralChar();
-        }
-      } else {
-        s1 = peg$c0;
-      }
-      if (s1 !== peg$FAILED) {
-        peg$reportedPos = s0;
-        s1 = peg$c62(s1);
-      }
-      s0 = s1;
-
-      return s0;
-    }
-
-    function peg$parseLiteralChar() {
-      var s0, s1, s2, s3;
-
-      s0 = peg$currPos;
-      s1 = peg$currPos;
-      peg$silentFails++;
-      s2 = peg$parseInlineCommentOpen();
-      peg$silentFails--;
-      if (s2 === peg$FAILED) {
-        s1 = peg$c47;
-      } else {
-        peg$currPos = s1;
-        s1 = peg$c0;
-      }
-      if (s1 !== peg$FAILED) {
-        s2 = peg$currPos;
-        peg$silentFails++;
-        s3 = peg$parseLineTerminator();
-        peg$silentFails--;
-        if (s3 === peg$FAILED) {
-          s2 = peg$c47;
-        } else {
-          peg$currPos = s2;
-          s2 = peg$c0;
-        }
-        if (s2 !== peg$FAILED) {
-          s3 = peg$parseNonTerminator();
-          if (s3 !== peg$FAILED) {
-            peg$reportedPos = s0;
-            s1 = peg$c58(s3);
-            s0 = s1;
-          } else {
-            peg$currPos = s0;
-            s0 = peg$c0;
-          }
-        } else {
-          peg$currPos = s0;
-          s0 = peg$c0;
-        }
-      } else {
-        peg$currPos = s0;
-        s0 = peg$c0;
-      }
-
-      return s0;
-    }
-
-    function peg$parseNonTerminator() {
-      var s0;
-
-      if (peg$c63.test(input.charAt(peg$currPos))) {
-        s0 = input.charAt(peg$currPos);
-        peg$currPos++;
-      } else {
-        s0 = peg$FAILED;
-        if (peg$silentFails === 0) { peg$fail(peg$c64); }
-      }
-
-      return s0;
-    }
-
-    function peg$parseSingleLineComment() {
-      var s0, s1, s2, s3, s4;
-
-      s0 = peg$currPos;
-      if (input.substr(peg$currPos, 2) === peg$c65) {
-        s1 = peg$c65;
-        peg$currPos += 2;
-      } else {
-        s1 = peg$FAILED;
-        if (peg$silentFails === 0) { peg$fail(peg$c66); }
-      }
-      if (s1 !== peg$FAILED) {
-        s2 = peg$parse_();
-        if (s2 !== peg$FAILED) {
-          s3 = peg$parseOneLineString();
-          if (s3 !== peg$FAILED) {
-            s4 = peg$parseNewLine();
-            if (s4 !== peg$FAILED) {
-              peg$reportedPos = s0;
-              s1 = peg$c67(s3);
-              s0 = s1;
-            } else {
-              peg$currPos = s0;
-              s0 = peg$c0;
-            }
-          } else {
-            peg$currPos = s0;
-            s0 = peg$c0;
-          }
-        } else {
-          peg$currPos = s0;
-          s0 = peg$c0;
-        }
-      } else {
-        peg$currPos = s0;
-        s0 = peg$c0;
-      }
-
-      return s0;
-    }
-
-    function peg$parseOneLineString() {
-      var s0, s1, s2;
-
-      s0 = peg$currPos;
-      s1 = [];
-      s2 = peg$parseNonLine();
-      while (s2 !== peg$FAILED) {
-        s1.push(s2);
-        s2 = peg$parseNonLine();
-      }
-      if (s1 !== peg$FAILED) {
-        peg$reportedPos = s0;
-        s1 = peg$c68(s1);
-      }
-      s0 = s1;
-
-      return s0;
-    }
-
-    function peg$parseDigit() {
-      var s0;
-
-      if (peg$c69.test(input.charAt(peg$currPos))) {
-        s0 = input.charAt(peg$currPos);
-        peg$currPos++;
-      } else {
-        s0 = peg$FAILED;
-        if (peg$silentFails === 0) { peg$fail(peg$c70); }
-      }
-
-      return s0;
-    }
-
-    function peg$parseAlpha() {
-      var s0;
-
-      if (peg$c71.test(input.charAt(peg$currPos))) {
-        s0 = input.charAt(peg$currPos);
-        peg$currPos++;
-      } else {
-        s0 = peg$FAILED;
-        if (peg$silentFails === 0) { peg$fail(peg$c72); }
-      }
-
-      return s0;
-    }
-
-    function peg$parseDoubleQuote() {
-      var s0;
-
-      if (input.charCodeAt(peg$currPos) === 34) {
-        s0 = peg$c73;
-        peg$currPos++;
-      } else {
-        s0 = peg$FAILED;
-        if (peg$silentFails === 0) { peg$fail(peg$c74); }
-      }
-
-      return s0;
-    }
-
-    function peg$parse_() {
-      var s0, s1;
-
-      peg$silentFails++;
-      s0 = [];
-      s1 = peg$parsewhitespace();
-      while (s1 !== peg$FAILED) {
-        s0.push(s1);
-        s1 = peg$parsewhitespace();
-      }
-      peg$silentFails--;
-      if (s0 === peg$FAILED) {
-        s1 = peg$FAILED;
-        if (peg$silentFails === 0) { peg$fail(peg$c75); }
-      }
-
-      return s0;
-    }
-
-    function peg$parsewhitespace() {
-      var s0;
-
-      s0 = peg$parseNewLine();
-      if (s0 === peg$FAILED) {
-        if (peg$c76.test(input.charAt(peg$currPos))) {
-          s0 = input.charAt(peg$currPos);
-          peg$currPos++;
-        } else {
-          s0 = peg$FAILED;
-          if (peg$silentFails === 0) { peg$fail(peg$c77); }
-        }
-      }
-
-      return s0;
-    }
-
-    function peg$parseNonLine() {
-      var s0, s1, s2;
-
-      s0 = peg$currPos;
-      s1 = peg$currPos;
-      peg$silentFails++;
-      s2 = peg$parseNewLine();
-      peg$silentFails--;
-      if (s2 === peg$FAILED) {
-        s1 = peg$c47;
-      } else {
-        peg$currPos = s1;
-        s1 = peg$c0;
-      }
-      if (s1 !== peg$FAILED) {
-        s2 = peg$parseChar();
-        if (s2 !== peg$FAILED) {
-          peg$reportedPos = s0;
-          s1 = peg$c58(s2);
-          s0 = s1;
-        } else {
-          peg$currPos = s0;
-          s0 = peg$c0;
-        }
-      } else {
-        peg$currPos = s0;
-        s0 = peg$c0;
-      }
-
-      return s0;
-    }
-
-    function peg$parseLineTerminator() {
-      var s0;
-
-      s0 = peg$parseNewLine();
-      if (s0 === peg$FAILED) {
-        if (input.charCodeAt(peg$currPos) === 59) {
-          s0 = peg$c14;
-          peg$currPos++;
-        } else {
-          s0 = peg$FAILED;
-          if (peg$silentFails === 0) { peg$fail(peg$c15); }
-        }
-      }
-
-      return s0;
-    }
-
-    function peg$parseNewLine() {
-      var s0;
-
-      if (peg$c78.test(input.charAt(peg$currPos))) {
-        s0 = input.charAt(peg$currPos);
-        peg$currPos++;
-      } else {
-        s0 = peg$FAILED;
-        if (peg$silentFails === 0) { peg$fail(peg$c79); }
-      }
-
-      return s0;
-    }
-
-    function peg$parseChar() {
-      var s0;
-
-      if (input.length > peg$currPos) {
-        s0 = input.charAt(peg$currPos);
-        peg$currPos++;
-      } else {
-        s0 = peg$FAILED;
-        if (peg$silentFails === 0) { peg$fail(peg$c57); }
-      }
-
-      return s0;
-    }
-
-
-        function merge(hash, secondHash) {
-            secondHash = secondHash[0]
-            for(var i in secondHash) {
-           		hash[i] = merge_obj(hash[i], secondHash[i]);
-            }
-
-            return hash;
-        }
-        
-        function merge_obj(obj, secondObj) {
-        	if (!obj)
-        		return secondObj;
-
-            for(var i in secondObj)
-                obj[i] = merge_obj(obj[i], secondObj[i]);
-
-            return obj;
-        }
-
-
-    peg$result = peg$startRuleFunction();
-
-    if (peg$result !== peg$FAILED && peg$currPos === input.length) {
-      return peg$result;
-    } else {
-      if (peg$result !== peg$FAILED && peg$currPos < input.length) {
-        peg$fail({ type: "end", description: "end of input" });
-      }
-
-      throw peg$buildException(null, peg$maxFailExpected, peg$maxFailPos);
-    }
-  }
-
-  return {
-    SyntaxError: SyntaxError,
-    parse:       parse
-  };
-})();
diff --git a/bin/node_modules/xcode/lib/parser/pbxproj.pegjs b/bin/node_modules/xcode/lib/parser/pbxproj.pegjs
deleted file mode 100644
index 5140c05..0000000
--- a/bin/node_modules/xcode/lib/parser/pbxproj.pegjs
+++ /dev/null
@@ -1,273 +0,0 @@
-{
-    function merge(hash, secondHash) {
-        secondHash = secondHash[0]
-        for(var i in secondHash) {
-       		hash[i] = merge_obj(hash[i], secondHash[i]);
-        }
-
-        return hash;
-    }
-    
-    function merge_obj(obj, secondObj) {
-    	if (!obj)
-    		return secondObj;
-
-        for(var i in secondObj)
-            obj[i] = merge_obj(obj[i], secondObj[i]);
-
-        return obj;
-    }
-}
-
-/*
- *  Project: point of entry from pbxproj file
- */
-Project
-  = headComment:SingleLineComment? InlineComment? _ obj:Object NewLine _
-    {
-        var proj = Object.create(null)
-        proj.project = obj
-
-        if (headComment) {
-            proj.headComment = headComment
-        }
-
-        return proj;
-    }
-
-/*
- *  Object: basic hash data structure with Assignments
- */
-Object
-  = "{" obj:(AssignmentList / EmptyBody) "}"
-    { return obj }
-
-EmptyBody
-  = _
-    { return Object.create(null) }
-
-AssignmentList
-  = _ head:Assignment _ tail:AssignmentList* _
-    { 
-      if (tail) return merge(head,tail)
-      else return head
-    }
-    / _ head:DelimitedSection _ tail:AssignmentList*
-    {
-      if (tail) return merge(head,tail)
-      else return head
-    }
-
-/*
- *  Assignments
- *  can be simple "key = value"
- *  or commented "key /* real key * / = value"
- */
-Assignment
-  = SimpleAssignment / CommentedAssignment
-
-SimpleAssignment
-  = id:Identifier _ "=" _ val:Value ";"
-    { 
-      var result = Object.create(null);
-      result[id] = val
-      return result
-    }
-
-CommentedAssignment
-  = commentedId:CommentedIdentifier _ "=" _ val:Value ";"
-    {
-        var result = Object.create(null),
-            commentKey = commentedId.id + '_comment';
-
-        result[commentedId.id] = val;
-        result[commentKey] = commentedId[commentKey];
-        return result;
-
-    }
-    /
-    id:Identifier _ "=" _ commentedVal:CommentedValue ";"
-    {
-        var result = Object.create(null);
-        result[id] = commentedVal.value;
-        result[id + "_comment"] = commentedVal.comment;
-        return result;
-    }
-
-CommentedIdentifier
-  = id:Identifier _ comment:InlineComment
-    {
-        var result = Object.create(null);
-        result.id = id;
-        result[id + "_comment"] = comment.trim();
-        return result
-    }
-
-CommentedValue
-  = literal:Value _ comment:InlineComment
-    {
-        var result = Object.create(null)
-        result.comment = comment.trim();
-        result.value = literal.trim();
-        return result;
-    }
-
-InlineComment
-  = InlineCommentOpen body:[^*]+ InlineCommentClose
-    { return body.join('') }
-
-InlineCommentOpen
-  = "/*"
-
-InlineCommentClose
-  = "*/"
-
-/*
- *  DelimitedSection - ad hoc project structure pbxproj files use
- */
-DelimitedSection
-  = begin:DelimitedSectionBegin _ fields:(AssignmentList / EmptyBody) _ DelimitedSectionEnd
-    {
-        var section = Object.create(null);
-        section[begin.name] = fields
-
-        return section
-    }
-
-DelimitedSectionBegin
-  = "/* Begin " sectionName:Identifier " section */" NewLine
-    { return { name: sectionName } }
-
-DelimitedSectionEnd
-  = "/* End " sectionName:Identifier " section */" NewLine
-    { return { name: sectionName } }
-
-/*
- * Arrays: lists of values, possible wth comments
- */
-Array
-  = "(" arr:(ArrayBody / EmptyArray ) ")" { return arr }
-
-EmptyArray
-  = _ { return [] }
-
-ArrayBody
-  = _ head:ArrayEntry _ tail:ArrayBody? _
-    {
-        if (tail) {
-            tail.unshift(head);
-            return tail;
-        } else {
-            return [head];
-        }
-    }
-
-ArrayEntry
-  = SimpleArrayEntry / CommentedArrayEntry
-
-SimpleArrayEntry
-  = val:Value EndArrayEntry { return val }
-
-CommentedArrayEntry
-  = val:Value _ comment:InlineComment EndArrayEntry
-    {
-        var result = Object.create(null);
-        result.value = val.trim();
-        result.comment = comment.trim();
-        return result;
-    }
-
-EndArrayEntry
-  = "," / _ &")"
-
-/*
- *  Identifiers and Values
- */
-Identifier
-  = id:[A-Za-z0-9_.]+ { return id.join('') }
-  / QuotedString
-
-Value
-  = Object / Array / NumberValue / StringValue
-
-NumberValue
-  = DecimalValue / IntegerValue
-
-DecimalValue
-  = decimal:(IntegerValue "." IntegerValue)
-    { 
-        // store decimals as strings
-        // as JS doesn't differentiate bw strings and numbers
-        return decimal.join('')
-    }
-
-IntegerValue
-  = !Alpha number:Digit+ !NonTerminator
-    { return parseInt(number.join(''), 10) }
-
-StringValue
- = QuotedString / LiteralString
-
-QuotedString
- = DoubleQuote str:QuotedBody DoubleQuote { return '"' + str + '"' }
-
-QuotedBody
- = str:NonQuote+ { return str.join('') }
-
-NonQuote
-  = EscapedQuote / !DoubleQuote char:. { return char }
-
-EscapedQuote
-  = "\\" DoubleQuote { return '\\"' }
-
-LiteralString
-  = literal:LiteralChar+ { return literal.join('') }
-
-LiteralChar
-  = !InlineCommentOpen !LineTerminator char:NonTerminator
-    { return char }
-
-NonTerminator
-  = [^;,\n]
-
-/*
- * SingleLineComment - used for the encoding comment
- */
-SingleLineComment
-  = "//" _ contents:OneLineString NewLine
-    { return contents }
-
-OneLineString
-  = contents:NonLine*
-    { return contents.join('') }
-
-/*
- *  Simple character checking rules
- */
-Digit
-  = [0-9]
-
-Alpha
-  = [A-Za-z]
-
-DoubleQuote
-  = '"'
-
-_ "whitespace"
-  = whitespace*
-
-whitespace
-  = NewLine / [\t ]
-
-NonLine
-  = !NewLine char:Char
-    { return char }
-
-LineTerminator
-  = NewLine / ";"
-
-NewLine
-    = [\n\r]
-
-Char
-  = .
diff --git a/bin/node_modules/xcode/lib/pbxFile.js b/bin/node_modules/xcode/lib/pbxFile.js
deleted file mode 100644
index 4431f0d..0000000
--- a/bin/node_modules/xcode/lib/pbxFile.js
+++ /dev/null
@@ -1,194 +0,0 @@
-var path = require('path'),
-    util = require('util');
-
-var DEFAULT_SOURCETREE = '"<group>"',
-    DEFAULT_PRODUCT_SOURCETREE = 'BUILT_PRODUCTS_DIR',
-    DEFAULT_FILEENCODING = 4,
-    DEFAULT_GROUP = 'Resources',
-    DEFAULT_FILETYPE = 'unknown';
-
-var FILETYPE_BY_EXTENSION = {
-        a: 'archive.ar',
-        app: 'wrapper.application',
-        appex: 'wrapper.app-extension',
-        bundle: 'wrapper.plug-in',
-        dylib: 'compiled.mach-o.dylib',
-        framework: 'wrapper.framework',
-        h: 'sourcecode.c.h',
-        m: 'sourcecode.c.objc',
-        markdown: 'text',
-        mdimporter: 'wrapper.cfbundle',
-        octest: 'wrapper.cfbundle',
-        pch: 'sourcecode.c.h',
-        plist: 'text.plist.xml',
-        sh: 'text.script.sh',
-        swift: 'sourcecode.swift',
-        xcassets: 'folder.assetcatalog',
-        xcconfig: 'text.xcconfig',
-        xcdatamodel: 'wrapper.xcdatamodel',
-        xcodeproj: 'wrapper.pb-project',
-        xctest: 'wrapper.cfbundle',
-        xib: 'file.xib'
-    },
-    GROUP_BY_FILETYPE = {
-        'archive.ar': 'Frameworks',
-        'compiled.mach-o.dylib': 'Frameworks',
-        'wrapper.framework': 'Frameworks',
-        'sourcecode.c.h': 'Resources',
-        'sourcecode.c.objc': 'Sources',
-        'sourcecode.swift': 'Sources'
-    },
-    PATH_BY_FILETYPE = {
-        'compiled.mach-o.dylib': 'usr/lib/',
-        'wrapper.framework': 'System/Library/Frameworks/'
-    },
-    SOURCETREE_BY_FILETYPE = {
-        'compiled.mach-o.dylib': 'SDKROOT',
-        'wrapper.framework': 'SDKROOT'
-    },
-    ENCODING_BY_FILETYPE = {
-        'sourcecode.c.h': 4,
-        'sourcecode.c.h': 4,
-        'sourcecode.c.objc': 4,
-        'sourcecode.swift': 4,
-        'text': 4,
-        'text.plist.xml': 4,
-        'text.script.sh': 4,
-        'text.xcconfig': 4
-    };
-
-
-function unquoted(text){
-    return text.replace (/(^")|("$)/g, '')
-}
-
-function detectType(filePath) {
-    var extension = path.extname(filePath).substring(1),
-        filetype = FILETYPE_BY_EXTENSION[unquoted(extension)];
-
-    if (!filetype) {
-        return DEFAULT_FILETYPE;
-    }
-
-    return filetype;
-}
-
-function defaultExtension(fileRef) {
-    var filetype = fileRef.lastKnownFileType || fileRef.explicitFileType;
-
-    for(var extension in FILETYPE_BY_EXTENSION) {
-        if(FILETYPE_BY_EXTENSION.hasOwnProperty(unquoted(extension)) ) {
-             if(FILETYPE_BY_EXTENSION[unquoted(extension)] === filetype )
-                 return extension;
-        }
-    }
-}
-
-function defaultEncoding(fileRef) {
-    var filetype = fileRef.lastKnownFileType || fileRef.explicitFileType,
-        encoding = ENCODING_BY_FILETYPE[unquoted(filetype)];
-
-    if (encoding) {
-        return encoding;
-    }
-}
-
-function detectGroup(fileRef) {
-    var filetype = fileRef.lastKnownFileType || fileRef.explicitFileType,
-        groupName = GROUP_BY_FILETYPE[unquoted(filetype)];
-
-    if (!groupName) {
-        return DEFAULT_GROUP;
-    }
-
-    return groupName;
-}
-
-function detectSourcetree(fileRef) {
-    
-    var filetype = fileRef.lastKnownFileType || fileRef.explicitFileType,
-        sourcetree = SOURCETREE_BY_FILETYPE[unquoted(filetype)];
-
-    if (fileRef.explicitFileType) {
-        return DEFAULT_PRODUCT_SOURCETREE;
-    }
-    
-    if (fileRef.customFramework) {
-        return DEFAULT_SOURCETREE;
-    }
-    
-    if (!sourcetree) {
-        return DEFAULT_SOURCETREE;
-    }
-
-    return sourcetree;
-}
-
-function defaultPath(fileRef, filePath) {
-    var filetype = fileRef.lastKnownFileType || fileRef.explicitFileType,
-        defaultPath = PATH_BY_FILETYPE[unquoted(filetype)];
-
-    if (fileRef.customFramework) {
-        return filePath;
-    }
-    
-    if (defaultPath) {
-        return path.join(defaultPath, path.basename(filePath));
-    }
-
-    return filePath;
-}
-
-function defaultGroup(fileRef) {
-    var groupName = GROUP_BY_FILETYPE[fileRef.lastKnownFileType];
-
-    if (!groupName) {
-        return DEFAULT_GROUP;
-    }
-
-    return defaultGroup;
-}
-
-function pbxFile(filepath, opt) {
-    var opt = opt || {};
-    
-    self = this;
-
-    this.lastKnownFileType = opt.lastKnownFileType || detectType(filepath);
-    this.group = detectGroup(self);
-
-    // for custom frameworks
-    if (opt.customFramework == true) {
-        this.customFramework = true;
-        this.dirname = path.dirname(filepath);
-    }
-
-    this.basename = path.basename(filepath);
-    this.path = defaultPath(this, filepath);
-    this.fileEncoding = this.defaultEncoding = opt.defaultEncoding || defaultEncoding(self);
-
-
-    // When referencing products / build output files
-    if (opt.explicitFileType) {
-        this.explicitFileType = opt.explicitFileType;
-        this.basename = this.basename + '.' + defaultExtension(this);
-        delete this.path;
-        delete this.lastKnownFileType;
-        delete this.group;
-        delete this.defaultEncoding;
-    }
-
-    this.sourceTree = opt.sourceTree || detectSourcetree(self);
-    this.includeInIndex = 0;
-
-    if (opt.weak && opt.weak === true)
-        this.settings = { ATTRIBUTES: ['Weak'] };
-
-    if (opt.compilerFlags) {
-        if (!this.settings)
-            this.settings = {};
-        this.settings.COMPILER_FLAGS = util.format('"%s"', opt.compilerFlags);
-    }
-}
-
-module.exports = pbxFile;
diff --git a/bin/node_modules/xcode/lib/pbxProject.js b/bin/node_modules/xcode/lib/pbxProject.js
deleted file mode 100644
index 5270588..0000000
--- a/bin/node_modules/xcode/lib/pbxProject.js
+++ /dev/null
@@ -1,1623 +0,0 @@
-var util = require('util'),
-    f = util.format,
-    EventEmitter = require('events').EventEmitter,
-    path = require('path'),
-    uuid = require('node-uuid'),
-    fork = require('child_process').fork,
-    pbxWriter = require('./pbxWriter'),
-    pbxFile = require('./pbxFile'),
-    fs = require('fs'),
-    parser = require('./parser/pbxproj'),
-    COMMENT_KEY = /_comment$/
-
-function pbxProject(filename) {
-    if (!(this instanceof pbxProject))
-        return new pbxProject(filename);
-
-    this.filepath = path.resolve(filename)
-}
-
-util.inherits(pbxProject, EventEmitter)
-
-pbxProject.prototype.parse = function(cb) {
-    var worker = fork(__dirname + '/parseJob.js', [this.filepath])
-
-    worker.on('message', function(msg) {
-        if (msg.name == 'SyntaxError' || msg.code) {
-            this.emit('error', msg);
-        } else {
-            this.hash = msg;
-            this.emit('end', null, msg)
-        }
-    }.bind(this));
-
-    if (cb) {
-        this.on('error', cb);
-        this.on('end', cb);
-    }
-
-    return this;
-}
-
-pbxProject.prototype.parseSync = function() {
-    var file_contents = fs.readFileSync(this.filepath, 'utf-8');
-
-    this.hash = parser.parse(file_contents);
-    return this;
-}
-
-pbxProject.prototype.writeSync = function() {
-    this.writer = new pbxWriter(this.hash);
-    return this.writer.writeSync();
-}
-
-pbxProject.prototype.allUuids = function() {
-    var sections = this.hash.project.objects,
-        uuids = [],
-        section;
-
-    for (key in sections) {
-        section = sections[key]
-        uuids = uuids.concat(Object.keys(section))
-    }
-
-    uuids = uuids.filter(function(str) {
-        return !COMMENT_KEY.test(str) && str.length == 24;
-    });
-
-    return uuids;
-}
-
-pbxProject.prototype.generateUuid = function() {
-    var id = uuid.v4()
-        .replace(/-/g, '')
-        .substr(0, 24)
-        .toUpperCase()
-
-    if (this.allUuids().indexOf(id) >= 0) {
-        return this.generateUuid();
-    } else {
-        return id;
-    }
-}
-
-pbxProject.prototype.addPluginFile = function(path, opt) {
-    var file = new pbxFile(path, opt);
-
-    file.plugin = true; // durr
-    correctForPluginsPath(file, this);
-
-    // null is better for early errors
-    if (this.hasFile(file.path)) return null;
-
-    file.fileRef = this.generateUuid();
-
-    this.addToPbxFileReferenceSection(file);    // PBXFileReference
-    this.addToPluginsPbxGroup(file);            // PBXGroup
-
-    return file;
-}
-
-pbxProject.prototype.removePluginFile = function(path, opt) {
-    var file = new pbxFile(path, opt);
-    correctForPluginsPath(file, this);
-
-    this.removeFromPbxFileReferenceSection(file);    // PBXFileReference
-    this.removeFromPluginsPbxGroup(file);            // PBXGroup
-
-    return file;
-}
-
-pbxProject.prototype.addProductFile = function(targetPath, opt) {
-    var file = new pbxFile(targetPath, opt);
-
-    file.includeInIndex = 0;
-    file.fileRef = this.generateUuid();
-    file.target = opt ? opt.target : undefined;
-    file.group = opt ? opt.group : undefined;
-    file.uuid = this.generateUuid();
-    file.path = file.basename;
-
-    this.addToPbxFileReferenceSection(file);
-    this.addToProductsPbxGroup(file);                // PBXGroup
-
-    return file;
-}
-
-pbxProject.prototype.removeProductFile = function(path, opt) {
-    var file = new pbxFile(path, opt);
-
-    this.removeFromProductsPbxGroup(file);           // PBXGroup
-
-    return file;
-}
-
-/**
- *
- * @param path {String}
- * @param opt {Object} see pbxFile for avail options
- * @param group {String} group key
- * @returns {Object} file; see pbxFile
- */
-pbxProject.prototype.addSourceFile = function (path, opt, group) {
-    var file;
-    if (group) {
-        file = this.addFile(path, group, opt);
-    }
-    else {
-        file = this.addPluginFile(path, opt);
-    }
-
-    if (!file) return false;
-
-    file.target = opt ? opt.target : undefined;
-    file.uuid = this.generateUuid();
-
-    this.addToPbxBuildFileSection(file);        // PBXBuildFile
-    this.addToPbxSourcesBuildPhase(file);       // PBXSourcesBuildPhase
-
-    return file;
-}
-
-/**
- *
- * @param path {String}
- * @param opt {Object} see pbxFile for avail options
- * @param group {String} group key
- * @returns {Object} file; see pbxFile
- */
-pbxProject.prototype.removeSourceFile = function (path, opt, group) {
-    var file;
-    if (group) {
-        file = this.removeFile(path, group, opt);
-    }
-    else {
-        file = this.removePluginFile(path, opt);
-    }
-    file.target = opt ? opt.target : undefined;
-    this.removeFromPbxBuildFileSection(file);        // PBXBuildFile
-    this.removeFromPbxSourcesBuildPhase(file);       // PBXSourcesBuildPhase
-
-    return file;
-}
-
-/**
- *
- * @param path {String}
- * @param opt {Object} see pbxFile for avail options
- * @param group {String} group key
- * @returns {Object} file; see pbxFile
- */
-pbxProject.prototype.addHeaderFile = function (path, opt, group) {
-    if (group) {
-        return this.addFile(path, group, opt);
-    }
-    else {
-        return this.addPluginFile(path, opt);
-    }
-}
-
-/**
- *
- * @param path {String}
- * @param opt {Object} see pbxFile for avail options
- * @param group {String} group key
- * @returns {Object} file; see pbxFile
- */
-pbxProject.prototype.removeHeaderFile = function (path, opt, group) {
-    if (group) {
-        return this.removeFile(path, group, opt);
-    }
-    else {
-        return this.removePluginFile(path, opt);
-    }
-}
-
-pbxProject.prototype.addResourceFile = function(path, opt) {
-    opt = opt || {};
-
-    var file;
-
-    if (opt.plugin) {
-        file = this.addPluginFile(path, opt);
-        if (!file) return false;
-    } else {
-        file = new pbxFile(path, opt);
-        if (this.hasFile(file.path)) return false;
-    }
-
-    file.uuid = this.generateUuid();
-    file.target = opt ? opt.target : undefined;
-
-    if (!opt.plugin) {
-        correctForResourcesPath(file, this);
-        file.fileRef = this.generateUuid();
-    }
-
-    this.addToPbxBuildFileSection(file);        // PBXBuildFile
-    this.addToPbxResourcesBuildPhase(file);     // PBXResourcesBuildPhase
-
-    if (!opt.plugin) {
-        this.addToPbxFileReferenceSection(file);    // PBXFileReference
-        this.addToResourcesPbxGroup(file);          // PBXGroup
-    }
-
-    return file;
-}
-
-pbxProject.prototype.removeResourceFile = function(path, opt) {
-    var file = new pbxFile(path, opt);
-    file.target = opt ? opt.target : undefined;
-
-    correctForResourcesPath(file, this);
-
-    this.removeFromPbxBuildFileSection(file);        // PBXBuildFile
-    this.removeFromPbxFileReferenceSection(file);    // PBXFileReference
-    this.removeFromResourcesPbxGroup(file);          // PBXGroup
-    this.removeFromPbxResourcesBuildPhase(file);     // PBXResourcesBuildPhase
-
-    return file;
-}
-
-pbxProject.prototype.addFramework = function(fpath, opt) {
-
-    var file = new pbxFile(fpath, opt);
-
-    file.uuid = this.generateUuid();
-    file.fileRef = this.generateUuid();
-    file.target = opt ? opt.target : undefined;
-
-    if (this.hasFile(file.path)) return false;
-
-    this.addToPbxBuildFileSection(file);        // PBXBuildFile
-    this.addToPbxFileReferenceSection(file);    // PBXFileReference
-    this.addToFrameworksPbxGroup(file);         // PBXGroup
-    this.addToPbxFrameworksBuildPhase(file);    // PBXFrameworksBuildPhase
-
-    if (opt && opt.customFramework == true) {
-        this.addToFrameworkSearchPaths(file);
-    }
-
-    return file;
-}
-
-pbxProject.prototype.removeFramework = function(fpath, opt) {
-    var file = new pbxFile(fpath, opt);
-    file.target = opt ? opt.target : undefined;
-
-    this.removeFromPbxBuildFileSection(file);        // PBXBuildFile
-    this.removeFromPbxFileReferenceSection(file);    // PBXFileReference
-    this.removeFromFrameworksPbxGroup(file);         // PBXGroup
-    this.removeFromPbxFrameworksBuildPhase(file);    // PBXFrameworksBuildPhase
-
-    if (opt && opt.customFramework) {
-        this.removeFromFrameworkSearchPaths(path.dirname(fpath));
-    }
-
-    return file;
-}
-
-
-pbxProject.prototype.addCopyfile = function(fpath, opt) {
-    var file = new pbxFile(fpath, opt);
-
-    // catch duplicates
-    if (this.hasFile(file.path)) {
-        file = this.hasFile(file.path);
-    }
-
-    file.fileRef = file.uuid = this.generateUuid();
-    file.target = opt ? opt.target : undefined;
-
-    this.addToPbxBuildFileSection(file);        // PBXBuildFile
-    this.addToPbxFileReferenceSection(file);    // PBXFileReference
-    this.addToPbxCopyfilesBuildPhase(file);     // PBXCopyFilesBuildPhase
-
-    return file;
-}
-
-pbxProject.prototype.pbxCopyfilesBuildPhaseObj = function(target) {
-    return this.buildPhaseObject('PBXCopyFilesBuildPhase', 'Copy Files', target);
-}
-
-pbxProject.prototype.addToPbxCopyfilesBuildPhase = function(file) {
-    var sources = this.buildPhaseObject('PBXCopyFilesBuildPhase', 'Copy Files', file.target);
-    sources.files.push(pbxBuildPhaseObj(file));
-}
-
-pbxProject.prototype.removeCopyfile = function(fpath, opt) {
-    var file = new pbxFile(fpath, opt);
-    file.target = opt ? opt.target : undefined;
-
-    this.removeFromPbxBuildFileSection(file);        // PBXBuildFile
-    this.removeFromPbxFileReferenceSection(file);    // PBXFileReference
-    this.removeFromPbxCopyfilesBuildPhase(file);    // PBXFrameworksBuildPhase
-
-    return file;
-}
-
-pbxProject.prototype.removeFromPbxCopyfilesBuildPhase = function(file) {
-    var sources = this.pbxCopyfilesBuildPhaseObj(file.target);
-    for (i in sources.files) {
-        if (sources.files[i].comment == longComment(file)) {
-            sources.files.splice(i, 1);
-            break;
-        }
-    }
-}
-
-pbxProject.prototype.addStaticLibrary = function(path, opt) {
-    opt = opt || {};
-
-    var file;
-
-    if (opt.plugin) {
-        file = this.addPluginFile(path, opt);
-        if (!file) return false;
-    } else {
-        file = new pbxFile(path, opt);
-        if (this.hasFile(file.path)) return false;
-    }
-
-    file.uuid = this.generateUuid();
-    file.target = opt ? opt.target : undefined;
-
-    if (!opt.plugin) {
-        file.fileRef = this.generateUuid();
-        this.addToPbxFileReferenceSection(file);    // PBXFileReference
-    }
-
-    this.addToPbxBuildFileSection(file);        // PBXBuildFile
-    this.addToPbxFrameworksBuildPhase(file);    // PBXFrameworksBuildPhase
-    this.addToLibrarySearchPaths(file);        // make sure it gets built!
-
-    return file;
-}
-
-// helper addition functions
-pbxProject.prototype.addToPbxBuildFileSection = function(file) {
-    var commentKey = f("%s_comment", file.uuid);
-
-    this.pbxBuildFileSection()[file.uuid] = pbxBuildFileObj(file);
-    this.pbxBuildFileSection()[commentKey] = pbxBuildFileComment(file);
-}
-
-pbxProject.prototype.removeFromPbxBuildFileSection = function(file) {
-    var uuid;
-
-    for (uuid in this.pbxBuildFileSection()) {
-        if (this.pbxBuildFileSection()[uuid].fileRef_comment == file.basename) {
-            file.uuid = uuid;
-            delete this.pbxBuildFileSection()[uuid];
-        }
-    }
-    var commentKey = f("%s_comment", file.uuid);
-    delete this.pbxBuildFileSection()[commentKey];
-}
-
-pbxProject.prototype.addPbxGroup = function(filePathsArray, name, path, sourceTree) {
-    var groups = this.hash.project.objects['PBXGroup'],
-        pbxGroupUuid = this.generateUuid(),
-        commentKey = f("%s_comment", pbxGroupUuid),
-        pbxGroup = {
-            isa: 'PBXGroup',
-            children: [],
-            name: name,
-            path: path,
-            sourceTree: sourceTree ? sourceTree : '"<group>"'
-        },
-        fileReferenceSection = this.pbxFileReferenceSection(),
-        filePathToReference = {};
-
-    for (var key in fileReferenceSection) {
-        // only look for comments
-        if (!COMMENT_KEY.test(key)) continue;
-
-        var fileReferenceKey = key.split(COMMENT_KEY)[0],
-            fileReference = fileReferenceSection[fileReferenceKey];
-
-        filePathToReference[fileReference.path] = { fileRef: fileReferenceKey, basename: fileReferenceSection[key] };
-    }
-
-    for (var index = 0; index < filePathsArray.length; index++) {
-        var filePath = filePathsArray[index],
-            filePathQuoted = "\"" + filePath + "\"";
-        if (filePathToReference[filePath]) {
-            pbxGroup.children.push(pbxGroupChild(filePathToReference[filePath]));
-            continue;
-        } else if (filePathToReference[filePathQuoted]) {
-            pbxGroup.children.push(pbxGroupChild(filePathToReference[filePathQuoted]));
-            continue;
-        }
-
-        var file = new pbxFile(filePath);
-        file.uuid = this.generateUuid();
-        file.fileRef = this.generateUuid();
-        this.addToPbxFileReferenceSection(file);    // PBXFileReference
-        this.addToPbxBuildFileSection(file);        // PBXBuildFile
-        pbxGroup.children.push(pbxGroupChild(file));
-    }
-
-    if (groups) {
-        groups[pbxGroupUuid] = pbxGroup;
-        groups[commentKey] = name;
-    }
-
-    return { uuid: pbxGroupUuid, pbxGroup: pbxGroup };
-}
-
-pbxProject.prototype.addToPbxProjectSection = function(target) {
-
-    var newTarget = {
-            value: target.uuid,
-            comment: pbxNativeTargetComment(target.pbxNativeTarget)
-        };
-
-    this.pbxProjectSection()[this.getFirstProject()['uuid']]['targets'].push(newTarget);
-}
-
-pbxProject.prototype.addToPbxNativeTargetSection = function(target) {
-    var commentKey = f("%s_comment", target.uuid);
-
-    this.pbxNativeTargetSection()[target.uuid] = target.pbxNativeTarget;
-    this.pbxNativeTargetSection()[commentKey] = target.pbxNativeTarget.name;
-}
-
-pbxProject.prototype.addToPbxFileReferenceSection = function(file) {
-    var commentKey = f("%s_comment", file.fileRef);
-
-    this.pbxFileReferenceSection()[file.fileRef] = pbxFileReferenceObj(file);
-    this.pbxFileReferenceSection()[commentKey] = pbxFileReferenceComment(file);
-}
-
-pbxProject.prototype.removeFromPbxFileReferenceSection = function(file) {
-
-    var i;
-    var refObj = pbxFileReferenceObj(file);
-    for (i in this.pbxFileReferenceSection()) {
-        if (this.pbxFileReferenceSection()[i].name == refObj.name ||
-            ('"' + this.pbxFileReferenceSection()[i].name + '"') == refObj.name ||
-            this.pbxFileReferenceSection()[i].path == refObj.path ||
-            ('"' + this.pbxFileReferenceSection()[i].path + '"') == refObj.path) {
-            file.fileRef = file.uuid = i;
-            delete this.pbxFileReferenceSection()[i];
-            break;
-        }
-    }
-    var commentKey = f("%s_comment", file.fileRef);
-    if (this.pbxFileReferenceSection()[commentKey] != undefined) {
-        delete this.pbxFileReferenceSection()[commentKey];
-    }
-
-    return file;
-}
-
-pbxProject.prototype.addToPluginsPbxGroup = function(file) {
-    var pluginsGroup = this.pbxGroupByName('Plugins');
-    pluginsGroup.children.push(pbxGroupChild(file));
-}
-
-pbxProject.prototype.removeFromPluginsPbxGroup = function(file) {
-    var pluginsGroupChildren = this.pbxGroupByName('Plugins').children, i;
-    for (i in pluginsGroupChildren) {
-        if (pbxGroupChild(file).value == pluginsGroupChildren[i].value &&
-            pbxGroupChild(file).comment == pluginsGroupChildren[i].comment) {
-            pluginsGroupChildren.splice(i, 1);
-            break;
-        }
-    }
-}
-
-pbxProject.prototype.addToResourcesPbxGroup = function(file) {
-    var pluginsGroup = this.pbxGroupByName('Resources');
-    pluginsGroup.children.push(pbxGroupChild(file));
-}
-
-pbxProject.prototype.removeFromResourcesPbxGroup = function(file) {
-    var pluginsGroupChildren = this.pbxGroupByName('Resources').children, i;
-    for (i in pluginsGroupChildren) {
-        if (pbxGroupChild(file).value == pluginsGroupChildren[i].value &&
-            pbxGroupChild(file).comment == pluginsGroupChildren[i].comment) {
-            pluginsGroupChildren.splice(i, 1);
-            break;
-        }
-    }
-}
-
-pbxProject.prototype.addToFrameworksPbxGroup = function(file) {
-    var pluginsGroup = this.pbxGroupByName('Frameworks');
-    pluginsGroup.children.push(pbxGroupChild(file));
-}
-
-pbxProject.prototype.removeFromFrameworksPbxGroup = function(file) {
-    var pluginsGroupChildren = this.pbxGroupByName('Frameworks').children;
-
-    for (i in pluginsGroupChildren) {
-        if (pbxGroupChild(file).value == pluginsGroupChildren[i].value &&
-            pbxGroupChild(file).comment == pluginsGroupChildren[i].comment) {
-            pluginsGroupChildren.splice(i, 1);
-            break;
-        }
-    }
-}
-
-
-pbxProject.prototype.addToProductsPbxGroup = function(file) {
-    var productsGroup = this.pbxGroupByName('Products');
-    productsGroup.children.push(pbxGroupChild(file));
-}
-
-pbxProject.prototype.removeFromProductsPbxGroup = function(file) {
-    var productsGroupChildren = this.pbxGroupByName('Products').children, i;
-    for (i in productsGroupChildren) {
-        if (pbxGroupChild(file).value == productsGroupChildren[i].value &&
-            pbxGroupChild(file).comment == productsGroupChildren[i].comment) {
-            productsGroupChildren.splice(i, 1);
-            break;
-        }
-    }
-}
-
-pbxProject.prototype.addToPbxSourcesBuildPhase = function(file) {
-    var sources = this.pbxSourcesBuildPhaseObj(file.target);
-    sources.files.push(pbxBuildPhaseObj(file));
-}
-
-pbxProject.prototype.removeFromPbxSourcesBuildPhase = function(file) {
-
-    var sources = this.pbxSourcesBuildPhaseObj(file.target), i;
-    for (i in sources.files) {
-        if (sources.files[i].comment == longComment(file)) {
-            sources.files.splice(i, 1);
-            break;
-        }
-    }
-}
-
-pbxProject.prototype.addToPbxResourcesBuildPhase = function(file) {
-    var sources = this.pbxResourcesBuildPhaseObj(file.target);
-    sources.files.push(pbxBuildPhaseObj(file));
-}
-
-pbxProject.prototype.removeFromPbxResourcesBuildPhase = function(file) {
-    var sources = this.pbxResourcesBuildPhaseObj(file.target), i;
-
-    for (i in sources.files) {
-        if (sources.files[i].comment == longComment(file)) {
-            sources.files.splice(i, 1);
-            break;
-        }
-    }
-}
-
-pbxProject.prototype.addToPbxFrameworksBuildPhase = function(file) {
-    var sources = this.pbxFrameworksBuildPhaseObj(file.target);
-    sources.files.push(pbxBuildPhaseObj(file));
-}
-
-pbxProject.prototype.removeFromPbxFrameworksBuildPhase = function(file) {
-    var sources = this.pbxFrameworksBuildPhaseObj(file.target);
-    for (i in sources.files) {
-        if (sources.files[i].comment == longComment(file)) {
-            sources.files.splice(i, 1);
-            break;
-        }
-    }
-}
-
-pbxProject.prototype.addXCConfigurationList = function(configurationObjectsArray, defaultConfigurationName, comment) {
-    var pbxBuildConfigurationSection = this.pbxXCBuildConfigurationSection(),
-        pbxXCConfigurationListSection = this.pbxXCConfigurationList(),
-        xcConfigurationListUuid = this.generateUuid(),
-        commentKey = f("%s_comment", xcConfigurationListUuid),
-        xcConfigurationList = {
-            isa: 'XCConfigurationList',
-            buildConfigurations: [],
-            defaultConfigurationIsVisible: 0,
-            defaultConfigurationName: defaultConfigurationName
-        };
-
-    for (var index = 0; index < configurationObjectsArray.length; index++) {
-        var configuration = configurationObjectsArray[index],
-            configurationUuid = this.generateUuid(),
-            configurationCommentKey = f("%s_comment", configurationUuid);
-
-        pbxBuildConfigurationSection[configurationUuid] = configuration;
-        pbxBuildConfigurationSection[configurationCommentKey] = configuration.name;
-        xcConfigurationList.buildConfigurations.push({ value: configurationUuid, comment: configuration.name });
-    }
-
-    if (pbxXCConfigurationListSection) {
-        pbxXCConfigurationListSection[xcConfigurationListUuid] = xcConfigurationList;
-        pbxXCConfigurationListSection[commentKey] = comment;
-    }
-
-    return { uuid: xcConfigurationListUuid, xcConfigurationList: xcConfigurationList };
-}
-
-pbxProject.prototype.addTargetDependency = function(target, dependencyTargets) {
-    if (!target)
-        return undefined;
-
-    var nativeTargets = this.pbxNativeTargetSection();
-
-    if (typeof nativeTargets[target] == "undefined")
-        throw new Error("Invalid target: " + target);
-
-    for (var index = 0; index < dependencyTargets.length; index++) {
-        var dependencyTarget = dependencyTargets[index];
-        if (typeof nativeTargets[dependencyTarget] == "undefined")
-            throw new Error("Invalid target: " + dependencyTarget);
-        }
-
-    var pbxTargetDependency = 'PBXTargetDependency',
-        pbxContainerItemProxy = 'PBXContainerItemProxy',
-        pbxTargetDependencySection = this.hash.project.objects[pbxTargetDependency],
-        pbxContainerItemProxySection = this.hash.project.objects[pbxContainerItemProxy];
-
-    for (var index = 0; index < dependencyTargets.length; index++) {
-        var dependencyTargetUuid = dependencyTargets[index],
-            dependencyTargetCommentKey = f("%s_comment", dependencyTargetUuid),
-            targetDependencyUuid = this.generateUuid(),
-            targetDependencyCommentKey = f("%s_comment", targetDependencyUuid),
-            itemProxyUuid = this.generateUuid(),
-            itemProxyCommentKey = f("%s_comment", itemProxyUuid),
-            itemProxy = {
-                isa: pbxContainerItemProxy,
-                containerPortal: this.hash.project['rootObject'],
-                containerPortal_comment: this.hash.project['rootObject_comment'],
-                proxyType: 1,
-                remoteGlobalIDString: dependencyTargetUuid,
-                remoteInfo: nativeTargets[dependencyTargetUuid].name
-            },
-            targetDependency = {
-                isa: pbxTargetDependency,
-                target: dependencyTargetUuid,
-                target_comment: nativeTargets[dependencyTargetCommentKey],
-                targetProxy: itemProxyUuid,
-                targetProxy_comment: pbxContainerItemProxy
-            };
-
-        if (pbxContainerItemProxySection && pbxTargetDependencySection) {
-            pbxContainerItemProxySection[itemProxyUuid] = itemProxy;
-            pbxContainerItemProxySection[itemProxyCommentKey] = pbxContainerItemProxy;
-            pbxTargetDependencySection[targetDependencyUuid] = targetDependency;
-            pbxTargetDependencySection[targetDependencyCommentKey] = pbxTargetDependency;
-            nativeTargets[target].dependencies.push({ value: targetDependencyUuid, comment: pbxTargetDependency })
-        }
-    }
-
-    return { uuid: target, target: nativeTargets[target] };
-}
-
-pbxProject.prototype.addBuildPhase = function(filePathsArray, buildPhaseType, comment, target, folderType, subfolderPath) {
-    var buildPhaseSection,
-        fileReferenceSection = this.pbxFileReferenceSection(),
-        buildFileSection = this.pbxBuildFileSection(),
-        buildPhaseUuid = this.generateUuid(),
-        buildPhaseTargetUuid = target || this.getFirstTarget().uuid,
-        commentKey = f("%s_comment", buildPhaseUuid),
-        buildPhase = {
-            isa: buildPhaseType,
-            buildActionMask: 2147483647,
-            files: [],
-            runOnlyForDeploymentPostprocessing: 0
-        },
-        filePathToBuildFile = {};
-
-    if (buildPhaseType === 'PBXCopyFilesBuildPhase') {
-        buildPhase = pbxCopyFilesBuildPhaseObj(buildPhase, folderType, subfolderPath, comment);
-    }
-
-    if (!this.hash.project.objects[buildPhaseType]) {
-        this.hash.project.objects[buildPhaseType] = new Object();
-    }
-
-    if (!this.hash.project.objects[buildPhaseType][buildPhaseUuid]) {
-        this.hash.project.objects[buildPhaseType][buildPhaseUuid] = buildPhase;
-        this.hash.project.objects[buildPhaseType][commentKey] = comment;
-    }
-
-    if (this.hash.project.objects['PBXNativeTarget'][buildPhaseTargetUuid]['buildPhases']) {
-        this.hash.project.objects['PBXNativeTarget'][buildPhaseTargetUuid]['buildPhases'].push({
-            value: buildPhaseUuid,
-            comment: comment
-        })
-
-    }
-
-
-    for (var key in buildFileSection) {
-        // only look for comments
-        if (!COMMENT_KEY.test(key)) continue;
-
-        var buildFileKey = key.split(COMMENT_KEY)[0],
-            buildFile = buildFileSection[buildFileKey];
-        fileReference = fileReferenceSection[buildFile.fileRef];
-
-        if (!fileReference) continue;
-
-        var pbxFileObj = new pbxFile(fileReference.path);
-
-        filePathToBuildFile[fileReference.path] = { uuid: buildFileKey, basename: pbxFileObj.basename, group: pbxFileObj.group };
-    }
-
-    for (var index = 0; index < filePathsArray.length; index++) {
-        var filePath = filePathsArray[index],
-            filePathQuoted = "\"" + filePath + "\"",
-            file = new pbxFile(filePath);
-
-        if (filePathToBuildFile[filePath]) {
-            buildPhase.files.push(pbxBuildPhaseObj(filePathToBuildFile[filePath]));
-            continue;
-        } else if (filePathToBuildFile[filePathQuoted]) {
-            buildPhase.files.push(pbxBuildPhaseObj(filePathToBuildFile[filePathQuoted]));
-            continue;
-        }
-
-        file.uuid = this.generateUuid();
-        file.fileRef = this.generateUuid();
-        this.addToPbxFileReferenceSection(file);    // PBXFileReference
-        this.addToPbxBuildFileSection(file);        // PBXBuildFile
-        buildPhase.files.push(pbxBuildPhaseObj(file));
-    }
-
-    if (buildPhaseSection) {
-        buildPhaseSection[buildPhaseUuid] = buildPhase;
-        buildPhaseSection[commentKey] = comment;
-    }
-
-    return { uuid: buildPhaseUuid, buildPhase: buildPhase };
-}
-
-// helper access functions
-pbxProject.prototype.pbxProjectSection = function() {
-    return this.hash.project.objects['PBXProject'];
-}
-pbxProject.prototype.pbxBuildFileSection = function() {
-    return this.hash.project.objects['PBXBuildFile'];
-}
-
-pbxProject.prototype.pbxXCBuildConfigurationSection = function() {
-    return this.hash.project.objects['XCBuildConfiguration'];
-}
-
-pbxProject.prototype.pbxFileReferenceSection = function() {
-    return this.hash.project.objects['PBXFileReference'];
-}
-
-pbxProject.prototype.pbxNativeTargetSection = function() {
-    return this.hash.project.objects['PBXNativeTarget'];
-}
-
-pbxProject.prototype.pbxXCConfigurationList = function() {
-    return this.hash.project.objects['XCConfigurationList'];
-}
-
-pbxProject.prototype.pbxGroupByName = function(name) {
-    var groups = this.hash.project.objects['PBXGroup'],
-        key, groupKey;
-
-    for (key in groups) {
-        // only look for comments
-        if (!COMMENT_KEY.test(key)) continue;
-
-        if (groups[key] == name) {
-            groupKey = key.split(COMMENT_KEY)[0];
-            return groups[groupKey];
-        }
-    }
-
-    return null;
-}
-
-pbxProject.prototype.pbxTargetByName = function(name) {
-    return this.pbxItemByComment(name, 'PBXNativeTarget');
-}
-
-pbxProject.prototype.pbxItemByComment = function(name, pbxSectionName) {
-    var section = this.hash.project.objects[pbxSectionName],
-        key, itemKey;
-
-    for (key in section) {
-        // only look for comments
-        if (!COMMENT_KEY.test(key)) continue;
-
-        if (section[key] == name) {
-            itemKey = key.split(COMMENT_KEY)[0];
-            return section[itemKey];
-        }
-    }
-
-    return null;
-}
-
-pbxProject.prototype.pbxSourcesBuildPhaseObj = function(target) {
-    return this.buildPhaseObject('PBXSourcesBuildPhase', 'Sources', target);
-}
-
-pbxProject.prototype.pbxResourcesBuildPhaseObj = function(target) {
-    return this.buildPhaseObject('PBXResourcesBuildPhase', 'Resources', target);
-}
-
-pbxProject.prototype.pbxFrameworksBuildPhaseObj = function(target) {
-    return this.buildPhaseObject('PBXFrameworksBuildPhase', 'Frameworks', target);
-}
-
-// Find Build Phase from group/target
-pbxProject.prototype.buildPhase = function(group, target) {
-
-    if (!target)
-        return undefined;
-
-    var nativeTargets = this.pbxNativeTargetSection();
-     if (typeof nativeTargets[target] == "undefined")
-        throw new Error("Invalid target: " + target);
-
-    var nativeTarget = nativeTargets[target];
-    var buildPhases = nativeTarget.buildPhases;
-     for(var i in buildPhases)
-     {
-        var buildPhase = buildPhases[i];
-        if (buildPhase.comment==group)
-            return buildPhase.value + "_comment";
-        }
-    }
-
-pbxProject.prototype.buildPhaseObject = function(name, group, target) {
-    var section = this.hash.project.objects[name],
-        obj, sectionKey, key;
-    var buildPhase = this.buildPhase(group, target);
-
-    for (key in section) {
-
-        // only look for comments
-        if (!COMMENT_KEY.test(key)) continue;
-
-        // select the proper buildPhase
-        if (buildPhase && buildPhase!=key)
-            continue;
-        if (section[key] == group) {
-            sectionKey = key.split(COMMENT_KEY)[0];
-            return section[sectionKey];
-        }
-    }
-    return null;
-}
-
-pbxProject.prototype.addBuildProperty = function(prop, value, build_name) {
-    var configurations = nonComments(this.pbxXCBuildConfigurationSection()),
-        key, configuration;
-
-    for (key in configurations){
-        configuration = configurations[key];
-        if (!build_name || configuration.name === build_name){
-            configuration.buildSettings[prop] = value;
-        }
-    }
-}
-
-pbxProject.prototype.removeBuildProperty = function(prop, build_name) {
-    var configurations = nonComments(this.pbxXCBuildConfigurationSection()),
-        key, configuration;
-
-    for (key in configurations){
-        configuration = configurations[key];
-        if (configuration.buildSettings[prop] &&
-            !build_name || configuration.name === build_name){
-            delete configuration.buildSettings[prop];
-        }
-    }
-}
-
-/**
- *
- * @param prop {String}
- * @param value {String|Array|Object|Number|Boolean}
- * @param build {String} Release or Debug
- */
-pbxProject.prototype.updateBuildProperty = function(prop, value, build) {
-    var configs = this.pbxXCBuildConfigurationSection();
-    for (var configName in configs) {
-        if (!COMMENT_KEY.test(configName)) {
-            var config = configs[configName];
-            if ( (build && config.name === build) || (!build) ) {
-                config.buildSettings[prop] = value;
-            }
-        }
-    }
-}
-
-pbxProject.prototype.updateProductName = function(name) {
-    this.updateBuildProperty('PRODUCT_NAME', '"' + name + '"');
-}
-
-pbxProject.prototype.removeFromFrameworkSearchPaths = function(file) {
-    var configurations = nonComments(this.pbxXCBuildConfigurationSection()),
-        INHERITED = '"$(inherited)"',
-        SEARCH_PATHS = 'FRAMEWORK_SEARCH_PATHS',
-        config, buildSettings, searchPaths;
-    var new_path = searchPathForFile(file, this);
-
-    for (config in configurations) {
-        buildSettings = configurations[config].buildSettings;
-
-        if (unquote(buildSettings['PRODUCT_NAME']) != this.productName)
-            continue;
-
-        searchPaths = buildSettings[SEARCH_PATHS];
-
-        if (searchPaths) {
-            var matches = searchPaths.filter(function(p) {
-                return p.indexOf(new_path) > -1;
-            });
-            matches.forEach(function(m) {
-                var idx = searchPaths.indexOf(m);
-                searchPaths.splice(idx, 1);
-            });
-        }
-
-    }
-}
-
-pbxProject.prototype.addToFrameworkSearchPaths = function(file) {
-    var configurations = nonComments(this.pbxXCBuildConfigurationSection()),
-        INHERITED = '"$(inherited)"',
-        config, buildSettings, searchPaths;
-
-    for (config in configurations) {
-        buildSettings = configurations[config].buildSettings;
-
-        if (unquote(buildSettings['PRODUCT_NAME']) != this.productName)
-            continue;
-
-        if (!buildSettings['FRAMEWORK_SEARCH_PATHS']
-            || buildSettings['FRAMEWORK_SEARCH_PATHS'] === INHERITED) {
-            buildSettings['FRAMEWORK_SEARCH_PATHS'] = [INHERITED];
-        }
-
-        buildSettings['FRAMEWORK_SEARCH_PATHS'].push(searchPathForFile(file, this));
-    }
-}
-
-pbxProject.prototype.removeFromLibrarySearchPaths = function(file) {
-    var configurations = nonComments(this.pbxXCBuildConfigurationSection()),
-        INHERITED = '"$(inherited)"',
-        SEARCH_PATHS = 'LIBRARY_SEARCH_PATHS',
-        config, buildSettings, searchPaths;
-    var new_path = searchPathForFile(file, this);
-
-    for (config in configurations) {
-        buildSettings = configurations[config].buildSettings;
-
-        if (unquote(buildSettings['PRODUCT_NAME']) != this.productName)
-            continue;
-
-        searchPaths = buildSettings[SEARCH_PATHS];
-
-        if (searchPaths) {
-            var matches = searchPaths.filter(function(p) {
-                return p.indexOf(new_path) > -1;
-            });
-            matches.forEach(function(m) {
-                var idx = searchPaths.indexOf(m);
-                searchPaths.splice(idx, 1);
-            });
-        }
-
-    }
-}
-
-pbxProject.prototype.addToLibrarySearchPaths = function(file) {
-    var configurations = nonComments(this.pbxXCBuildConfigurationSection()),
-        INHERITED = '"$(inherited)"',
-        config, buildSettings, searchPaths;
-
-    for (config in configurations) {
-        buildSettings = configurations[config].buildSettings;
-
-        if (unquote(buildSettings['PRODUCT_NAME']) != this.productName)
-            continue;
-
-        if (!buildSettings['LIBRARY_SEARCH_PATHS']
-            || buildSettings['LIBRARY_SEARCH_PATHS'] === INHERITED) {
-            buildSettings['LIBRARY_SEARCH_PATHS'] = [INHERITED];
-        }
-
-        if (typeof file === 'string') {
-            buildSettings['LIBRARY_SEARCH_PATHS'].push(file);
-        } else {
-            buildSettings['LIBRARY_SEARCH_PATHS'].push(searchPathForFile(file, this));
-        }
-    }
-}
-
-pbxProject.prototype.removeFromHeaderSearchPaths = function(file) {
-    var configurations = nonComments(this.pbxXCBuildConfigurationSection()),
-        INHERITED = '"$(inherited)"',
-        SEARCH_PATHS = 'HEADER_SEARCH_PATHS',
-        config, buildSettings, searchPaths;
-    var new_path = searchPathForFile(file, this);
-
-    for (config in configurations) {
-        buildSettings = configurations[config].buildSettings;
-
-        if (unquote(buildSettings['PRODUCT_NAME']) != this.productName)
-            continue;
-
-        if (buildSettings[SEARCH_PATHS]) {
-            var matches = buildSettings[SEARCH_PATHS].filter(function(p) {
-                return p.indexOf(new_path) > -1;
-            });
-            matches.forEach(function(m) {
-                var idx = buildSettings[SEARCH_PATHS].indexOf(m);
-                buildSettings[SEARCH_PATHS].splice(idx, 1);
-            });
-        }
-
-    }
-}
-pbxProject.prototype.addToHeaderSearchPaths = function(file) {
-    var configurations = nonComments(this.pbxXCBuildConfigurationSection()),
-        INHERITED = '"$(inherited)"',
-        config, buildSettings, searchPaths;
-
-    for (config in configurations) {
-        buildSettings = configurations[config].buildSettings;
-
-        if (unquote(buildSettings['PRODUCT_NAME']) != this.productName)
-            continue;
-
-        if (!buildSettings['HEADER_SEARCH_PATHS']) {
-            buildSettings['HEADER_SEARCH_PATHS'] = [INHERITED];
-        }
-
-        if (typeof file === 'string') {
-            buildSettings['HEADER_SEARCH_PATHS'].push(file);
-        } else {
-            buildSettings['HEADER_SEARCH_PATHS'].push(searchPathForFile(file, this));
-        }
-    }
-}
-// a JS getter. hmmm
-pbxProject.prototype.__defineGetter__("productName", function() {
-    var configurations = nonComments(this.pbxXCBuildConfigurationSection()),
-        config, productName;
-
-    for (config in configurations) {
-        productName = configurations[config].buildSettings['PRODUCT_NAME'];
-
-        if (productName) {
-            return unquote(productName);
-        }
-    }
-});
-
-// check if file is present
-pbxProject.prototype.hasFile = function(filePath) {
-    var files = nonComments(this.pbxFileReferenceSection()),
-        file, id;
-    for (id in files) {
-        file = files[id];
-        if (file.path == filePath || file.path == ('"' + filePath + '"')) {
-            return file;
-        }
-    }
-
-    return false;
-}
-
-pbxProject.prototype.addTarget = function(name, type, subfolder) {
-
-    // Setup uuid and name of new target
-    var targetUuid = this.generateUuid(),
-        targetType = type,
-        targetSubfolder = subfolder || name,
-        targetName = name.trim();
-        
-    // Check type against list of allowed target types
-    if (!targetName) {
-        throw new Error("Target name missing.");
-    }    
-
-    // Check type against list of allowed target types
-    if (!targetType) {
-        throw new Error("Target type missing.");
-    } 
-
-    // Check type against list of allowed target types
-    if (!producttypeForTargettype(targetType)) {
-        throw new Error("Target type invalid: " + targetType);
-    }
-    
-    // Build Configuration: Create
-    var buildConfigurationsList = [
-        {
-            name: 'Debug',
-            isa: 'XCBuildConfiguration',
-            buildSettings: {
-                GCC_PREPROCESSOR_DEFINITIONS: ['"DEBUG=1"', '"$(inherited)"'],
-                INFOPLIST_FILE: '"' + path.join(targetSubfolder, targetSubfolder + '-Info.plist' + '"'),
-                LD_RUNPATH_SEARCH_PATHS: '"$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"',
-                PRODUCT_NAME: '"' + targetName + '"',
-                SKIP_INSTALL: 'YES'
-            }
-        },
-        {
-            name: 'Release',
-            isa: 'XCBuildConfiguration',
-            buildSettings: {
-                INFOPLIST_FILE: '"' + path.join(targetSubfolder, targetSubfolder + '-Info.plist' + '"'),
-                LD_RUNPATH_SEARCH_PATHS: '"$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"',
-                PRODUCT_NAME: '"' + targetName + '"',
-                SKIP_INSTALL: 'YES'
-            }
-        }
-    ];
-
-    // Build Configuration: Add
-    var buildConfigurations = this.addXCConfigurationList(buildConfigurationsList, 'Release', 'Build configuration list for PBXNativeTarget "' + targetName +'"');
-
-    // Product: Create
-    var productName = targetName,
-        productType = producttypeForTargettype(targetType),
-        productFileType = filetypeForProducttype(productType),
-        productFile = this.addProductFile(productName, { group: 'Copy Files', 'target': targetUuid, 'explicitFileType': productFileType}),
-        productFileName = productFile.basename;
-
-
-    // Product: Add to build file list
-    this.addToPbxBuildFileSection(productFile);
-
-    // Target: Create
-    var target = {
-            uuid: targetUuid,
-            pbxNativeTarget: {
-                isa: 'PBXNativeTarget',
-                name: '"' + targetName + '"',
-                productName: '"' + targetName + '"',
-                productReference: productFile.fileRef,
-                productType: '"' + producttypeForTargettype(targetType) + '"',
-                buildConfigurationList: buildConfigurations.uuid,
-                buildPhases: [],
-                buildRules: [],
-                dependencies: []
-            }
-    };
-
-    // Target: Add to PBXNativeTarget section
-    this.addToPbxNativeTargetSection(target)
-
-    // Product: Embed (only for "extension"-type targets)
-    if (targetType === 'app_extension') {
-
-        // Create CopyFiles phase in first target
-        this.addBuildPhase([], 'PBXCopyFilesBuildPhase', 'Copy Files', this.getFirstTarget().uuid,  targetType)
-
-        // Add product to CopyFiles phase
-        this.addToPbxCopyfilesBuildPhase(productFile)
-
-       // this.addBuildPhaseToTarget(newPhase.buildPhase, this.getFirstTarget().uuid)
-
-    };
-
-    // Target: Add uuid to root project
-    this.addToPbxProjectSection(target);
-
-    // Target: Add dependency for this target to first (main) target
-    this.addTargetDependency(this.getFirstTarget().uuid, [target.uuid]);
-
-
-    // Return target on success
-    return target;
-
-};
-
-// helper recursive prop search+replace
-function propReplace(obj, prop, value) {
-    var o = {};
-    for (var p in obj) {
-        if (o.hasOwnProperty.call(obj, p)) {
-            if (typeof obj[p] == 'object' && !Array.isArray(obj[p])) {
-                propReplace(obj[p], prop, value);
-            } else if (p == prop) {
-                obj[p] = value;
-            }
-        }
-    }
-}
-
-// helper object creation functions
-function pbxBuildFileObj(file) {
-    var obj = Object.create(null);
-
-    obj.isa = 'PBXBuildFile';
-    obj.fileRef = file.fileRef;
-    obj.fileRef_comment = file.basename;
-    if (file.settings) obj.settings = file.settings;
-
-    return obj;
-}
-
-function pbxFileReferenceObj(file) {
-    var fileObject = {
-        isa: "PBXFileReference",
-        name: "\"" + file.basename + "\"",
-        path: "\"" + file.path.replace(/\\/g, '/') + "\"",
-        sourceTree: file.sourceTree,
-        fileEncoding: file.fileEncoding,
-        lastKnownFileType: file.lastKnownFileType,
-        explicitFileType: file.explicitFileType,
-        includeInIndex: file.includeInIndex
-    };
-
-    return fileObject;
-}
-
-function pbxGroupChild(file) {
-    var obj = Object.create(null);
-
-    obj.value = file.fileRef;
-    obj.comment = file.basename;
-
-    return obj;
-}
-
-function pbxBuildPhaseObj(file) {
-    var obj = Object.create(null);
-
-    obj.value = file.uuid;
-    obj.comment = longComment(file);
-
-    return obj;
-}
-
-function pbxCopyFilesBuildPhaseObj(obj, folderType, subfolderPath, phaseName){
-
-     // Add additional properties for 'CopyFiles' build phase
-    var DESTINATION_BY_TARGETTYPE = {
-        application: 'wrapper',
-        app_extension: 'plugins',
-        bundle: 'wrapper',
-        command_line_tool: 'wrapper',
-        dynamic_library: 'products_directory',
-        framework: 'shared_frameworks',
-        static_library: 'products_directory',
-        unit_test_bundle: 'wrapper',
-        watch_app: 'wrapper',
-        watch_extension: 'plugins'
-    }
-    var SUBFOLDERSPEC_BY_DESTINATION = {
-        absolute_path: 0,
-        executables: 6,
-        frameworks: 10,
-        java_resources: 15,
-        plugins: 13,
-        products_directory: 16,
-        resources: 7,
-        shared_frameworks: 11,
-        shared_support: 12,
-        wrapper: 1,
-        xpc_services: 0
-    }
-
-    obj.name = '"' + phaseName + '"';
-    obj.dstPath = subfolderPath || '""';
-    obj.dstSubfolderSpec = SUBFOLDERSPEC_BY_DESTINATION[DESTINATION_BY_TARGETTYPE[folderType]];
-
-    return obj;
-}
-
-function pbxBuildFileComment(file) {
-    return longComment(file);
-}
-
-function pbxFileReferenceComment(file) {
-    return file.basename || path.basename(file.path);
-}
-
-function pbxNativeTargetComment(target) {
-    return target.name;
-}
-
-function longComment(file) {
-    return f("%s in %s", file.basename, file.group);
-}
-
-// respect <group> path
-function correctForPluginsPath(file, project) {
-    return correctForPath(file, project, 'Plugins');
-}
-
-function correctForResourcesPath(file, project) {
-    return correctForPath(file, project, 'Resources');
-}
-
-function correctForFrameworksPath(file, project) {
-    return correctForPath(file, project, 'Frameworks');
-}
-
-function correctForPath(file, project, group) {
-    var r_group_dir = new RegExp('^' + group + '[\\\\/]');
-
-    if (project.pbxGroupByName(group).path)
-        file.path = file.path.replace(r_group_dir, '');
-
-    return file;
-}
-
-function searchPathForFile(file, proj) {
-    var plugins = proj.pbxGroupByName('Plugins'),
-        pluginsPath = plugins ? plugins.path : null,
-        fileDir = path.dirname(file.path);
-
-    if (fileDir == '.') {
-        fileDir = '';
-    } else {
-        fileDir = '/' + fileDir;
-    }
-
-    if (file.plugin && pluginsPath) {
-        return '"\\"$(SRCROOT)/' + unquote(pluginsPath) + '\\""';
-    } else if (file.customFramework && file.dirname) {
-        return '"\\"' + file.dirname + '\\""';
-    } else {
-        return '"\\"$(SRCROOT)/' + proj.productName + fileDir + '\\""';
-    }
-}
-
-function nonComments(obj) {
-    var keys = Object.keys(obj),
-        newObj = {}, i = 0;
-
-    for (i; i < keys.length; i++) {
-        if (!COMMENT_KEY.test(keys[i])) {
-            newObj[keys[i]] = obj[keys[i]];
-        }
-    }
-
-    return newObj;
-}
-
-function unquote(str) {
-    if (str) return str.replace(/^"(.*)"$/, "$1");
-}
-
-
-function buildPhaseNameForIsa (isa) {
-
-    BUILDPHASENAME_BY_ISA = {
-        PBXCopyFilesBuildPhase: 'Copy Files',
-        PBXResourcesBuildPhase: 'Resources',
-        PBXSourcesBuildPhase: 'Sources',
-        PBXFrameworksBuildPhase: 'Frameworks'
-    }
-
-    return BUILDPHASENAME_BY_ISA[isa]
-}
-
-function producttypeForTargettype (targetType) {
-
-    PRODUCTTYPE_BY_TARGETTYPE = {
-            application: 'com.apple.product-type.application',
-            app_extension: 'com.apple.product-type.app-extension',
-            bundle: 'com.apple.product-type.bundle',
-            command_line_tool: 'com.apple.product-type.tool',
-            dynamic_library: 'com.apple.product-type.library.dynamic',
-            framework: 'com.apple.product-type.framework',
-            static_library: 'com.apple.product-type.library.static',
-            unit_test_bundle: 'com.apple.product-type.bundle.unit-test',
-            watch_app: 'com.apple.product-type.application.watchapp',
-            watch_extension: 'com.apple.product-type.watchkit-extension'
-        };
-
-    return PRODUCTTYPE_BY_TARGETTYPE[targetType]
-}
-
-function filetypeForProducttype (productType) {
-
-    FILETYPE_BY_PRODUCTTYPE = {
-            'com.apple.product-type.application': '"wrapper.application"',
-            'com.apple.product-type.app-extension': '"wrapper.app-extension"',
-            'com.apple.product-type.bundle': '"wrapper.plug-in"',
-            'com.apple.product-type.tool': '"compiled.mach-o.dylib"',
-            'com.apple.product-type.library.dynamic': '"compiled.mach-o.dylib"',
-            'com.apple.product-type.framework': '"wrapper.framework"',
-            'com.apple.product-type.library.static': '"archive.ar"',
-            'com.apple.product-type.bundle.unit-test': '"wrapper.cfbundle"',
-            'com.apple.product-type.application.watchapp': '"wrapper.application"',
-            'com.apple.product-type.watchkit-extension': '"wrapper.app-extension"'
-        };
-
-    return FILETYPE_BY_PRODUCTTYPE[productType]
-}
-
-pbxProject.prototype.getFirstProject = function() {
-
-    // Get pbxProject container
-    var pbxProjectContainer = this.pbxProjectSection();
-
-    // Get first pbxProject UUID
-    var firstProjectUuid = Object.keys(pbxProjectContainer)[0];
-
-    // Get first pbxProject
-    var firstProject = pbxProjectContainer[firstProjectUuid];
-
-     return {
-        uuid: firstProjectUuid,
-        firstProject: firstProject
-    }
-}
-
-pbxProject.prototype.getFirstTarget = function() {
-
-    // Get first targets UUID
-    var firstTargetUuid = this.getFirstProject()['firstProject']['targets'][0].value;
-
-    // Get first pbxNativeTarget
-    var firstTarget = this.pbxNativeTargetSection()[firstTargetUuid];
-
-    return {
-        uuid: firstTargetUuid,
-        firstTarget: firstTarget
-    }
-}
-
-/*** NEW ***/
-
-pbxProject.prototype.addToPbxGroup = function (file, groupKey) {
-    var group = this.getPBXGroupByKey(groupKey);
-    if (group && group.children !== undefined) {
-        if (typeof file === 'string') {
-            //Group Key
-            var childGroup = {
-                value:file,
-                comment: this.getPBXGroupByKey(file).name
-            };
-
-            group.children.push(childGroup);
-        }
-        else {
-            //File Object
-            group.children.push(pbxGroupChild(file));
-        }
-    }
-}
-
-pbxProject.prototype.removeFromPbxGroup = function (file, groupKey) {
-    var group = this.getPBXGroupByKey(groupKey);
-    if (group) {
-        var groupChildren = group.children, i;
-        for(i in groupChildren) {
-            if(pbxGroupChild(file).value == groupChildren[i].value &&
-                pbxGroupChild(file).comment == groupChildren[i].comment) {
-                groupChildren.splice(i, 1);
-                break;
-            }
-        }
-    }
-}
-
-pbxProject.prototype.getPBXGroupByKey = function(key) {
-    return this.hash.project.objects['PBXGroup'][key];
-};
-
-pbxProject.prototype.findPBXGroupKey = function(criteria) {
-    var groups = this.hash.project.objects['PBXGroup'];
-    var target;
-
-    for (var key in groups) {
-        // only look for comments
-        if (COMMENT_KEY.test(key)) continue;
-
-        var group = groups[key];
-        if (criteria && criteria.path && criteria.name) {
-            if (criteria.path === group.path && criteria.name === group.name) {
-                target = key;
-                break
-            }
-        }
-        else if (criteria && criteria.path) {
-            if (criteria.path === group.path) {
-                target = key;
-                break
-            }
-        }
-        else if (criteria && criteria.name) {
-            if (criteria.name === group.name) {
-                target = key;
-                break
-            }
-        }
-    }
-
-    return target;
-}
-
-pbxProject.prototype.pbxCreateGroup = function(name, pathName) {
-
-    //Create object
-    var model = {
-        isa:"PBXGroup",
-        children: [],
-        name: name,
-        path: pathName,
-        sourceTree: '"<group>"'
-    };
-    var key = this.generateUuid();
-
-    //Create comment
-    var commendId = key + '_comment';
-
-    //add obj and commentObj to groups;
-    var groups = this.hash.project.objects['PBXGroup'];
-    groups[commendId] = name;
-    groups[key] = model;
-
-    return key;
-}
-
-
-pbxProject.prototype.getPBXObject = function(name) {
-    return this.hash.project.objects[name];
-}
-
-
-
-pbxProject.prototype.addFile = function (path, group, opt) {
-    var file = new pbxFile(path, opt);
-
-    // null is better for early errors
-    if (this.hasFile(file.path)) return null;
-
-    file.fileRef = this.generateUuid();
-
-    this.addToPbxFileReferenceSection(file);    // PBXFileReference
-    this.addToPbxGroup(file, group);            // PBXGroup
-
-    return file;
-}
-
-pbxProject.prototype.removeFile = function (path, group, opt) {
-    var file = new pbxFile(path, opt);
-
-    this.removeFromPbxFileReferenceSection(file);    // PBXFileReference
-    this.removeFromPbxGroup(file, group);            // PBXGroup
-
-    return file;
-}
-
-
-
-pbxProject.prototype.getBuildProperty = function(prop, build) {
-    var target;
-    var configs = this.pbxXCBuildConfigurationSection();
-    for (var configName in configs) {
-        if (!COMMENT_KEY.test(configName)) {
-            var config = configs[configName];
-            if ( (build && config.name === build) || (build === undefined) ) {
-                if (config.buildSettings[prop] !== undefined) {
-                    target = config.buildSettings[prop];
-                }
-            }
-        }
-    }
-    return target;
-}
-
-pbxProject.prototype.getBuildConfigByName = function(name) {
-    var target = {};
-    var configs = this.pbxXCBuildConfigurationSection();
-    for (var configName in configs) {
-        if (!COMMENT_KEY.test(configName)) {
-            var config = configs[configName];
-            if (config.name === name)  {
-                target[configName] = config;
-            }
-        }
-    }
-    return target;
-}
-
-
-module.exports = pbxProject;
diff --git a/bin/node_modules/xcode/lib/pbxWriter.js b/bin/node_modules/xcode/lib/pbxWriter.js
deleted file mode 100644
index a65bcf1..0000000
--- a/bin/node_modules/xcode/lib/pbxWriter.js
+++ /dev/null
@@ -1,282 +0,0 @@
-var pbxProj = require('./pbxProject'),
-    util = require('util'),
-    f = util.format,
-    INDENT = '\t',
-    COMMENT_KEY = /_comment$/,
-    QUOTED = /^"(.*)"$/,
-    EventEmitter = require('events').EventEmitter
-
-// indentation
-function i(x) {
-    if (x <=0)
-        return '';
-    else
-        return INDENT + i(x-1);
-}
-
-function comment(key, parent) {
-    var text = parent[key + '_comment'];
-
-    if (text)
-        return text;
-    else
-        return null;
-}
-
-// copied from underscore
-function isObject(obj) {
-    return obj === Object(obj)
-}
-
-function isArray(obj) {
-    return Array.isArray(obj)
-}
-
-function pbxWriter(contents) {
-    this.contents = contents;
-    this.sync = false;
-    this.indentLevel = 0;
-}
-
-util.inherits(pbxWriter, EventEmitter);
-
-pbxWriter.prototype.write = function (str) {
-    var fmt = f.apply(null, arguments);
-
-    if (this.sync) {
-        this.buffer += f("%s%s", i(this.indentLevel), fmt);
-    } else {
-        // do stream write
-    }
-}
-
-pbxWriter.prototype.writeFlush = function (str) {
-    var oldIndent = this.indentLevel;
-
-    this.indentLevel = 0;
-
-    this.write.apply(this, arguments)
-
-    this.indentLevel = oldIndent;
-}
-
-pbxWriter.prototype.writeSync = function () {
-    this.sync = true;
-    this.buffer = "";
-
-    this.writeHeadComment();
-    this.writeProject();
-
-    return this.buffer;
-}
-
-pbxWriter.prototype.writeHeadComment = function () {
-    if (this.contents.headComment) {
-        this.write("// %s\n", this.contents.headComment)
-    }
-}
-
-pbxWriter.prototype.writeProject = function () {
-    var proj = this.contents.project,
-        key, cmt, obj;
-
-    this.write("{\n")
-
-    if (proj) {
-        this.indentLevel++;
-
-        for (key in proj) {
-            // skip comments
-            if (COMMENT_KEY.test(key)) continue;
-
-            cmt = comment(key, proj);
-            obj = proj[key];
-
-            if (isArray(obj)) {
-                this.writeArray(obj, key)
-            } else if (isObject(obj)) {
-                this.write("%s = {\n", key);
-                this.indentLevel++;
-
-                if (key === 'objects') {
-                    this.writeObjectsSections(obj)
-                } else {
-                    this.writeObject(obj)
-                }
-
-                this.indentLevel--;
-                this.write("};\n");
-            } else if (cmt) {
-                this.write("%s = %s /* %s */;\n", key, obj, cmt)
-            } else {
-                this.write("%s = %s;\n", key, obj)
-            }
-        }
-
-        this.indentLevel--;
-    }
-
-    this.write("}\n")
-}
-
-pbxWriter.prototype.writeObject = function (object) {
-    var key, obj, cmt;
-
-    for (key in object) {
-        if (COMMENT_KEY.test(key)) continue;
-
-        cmt = comment(key, object);
-        obj = object[key];
-
-        if (isArray(obj)) {
-            this.writeArray(obj, key)
-        } else if (isObject(obj)) {
-            this.write("%s = {\n", key);
-            this.indentLevel++;
-
-            this.writeObject(obj)
-
-            this.indentLevel--;
-            this.write("};\n");
-        } else {
-            if (cmt) {
-                this.write("%s = %s /* %s */;\n", key, obj, cmt)
-            } else {
-                this.write("%s = %s;\n", key, obj)
-            }
-        }
-    }
-}
-
-pbxWriter.prototype.writeObjectsSections = function (objects) {
-    var first = true,
-        key, obj;
-
-    for (key in objects) {
-        if (!first) {
-            this.writeFlush("\n")
-        } else {
-            first = false;
-        }
-
-        obj = objects[key];
-
-        if (isObject(obj)) {
-            this.writeSectionComment(key, true);
-
-            this.writeSection(obj);
-
-            this.writeSectionComment(key, false);
-        }
-    }
-}
-
-pbxWriter.prototype.writeArray = function (arr, name) {
-    var i, entry;
-
-    this.write("%s = (\n", name);
-    this.indentLevel++;
-
-    for (i=0; i < arr.length; i++) {
-        entry = arr[i]
-
-        if (entry.value && entry.comment) {
-            this.write('%s /* %s */,\n', entry.value, entry.comment);
-        } else if (isObject(entry)) {
-            this.write('{\n');
-            this.indentLevel++;
-            
-            this.writeObject(entry);
-
-            this.indentLevel--;
-            this.write('},\n');
-        } else {
-            this.write('%s,\n', entry);
-        }
-    }
-
-    this.indentLevel--;
-    this.write(");\n");
-}
-
-pbxWriter.prototype.writeSectionComment = function (name, begin) {
-    if (begin) {
-        this.writeFlush("/* Begin %s section */\n", name)
-    } else { // end
-        this.writeFlush("/* End %s section */\n", name)
-    }
-}
-
-pbxWriter.prototype.writeSection = function (section) {
-    var key, obj, cmt;
-
-    // section should only contain objects
-    for (key in section) {
-        if (COMMENT_KEY.test(key)) continue;
-
-        cmt = comment(key, section);
-        obj = section[key]
-
-        if (obj.isa == 'PBXBuildFile' || obj.isa == 'PBXFileReference') {
-            this.writeInlineObject(key, cmt, obj);
-        } else {
-            if (cmt) {
-                this.write("%s /* %s */ = {\n", key, cmt);
-            } else {
-                this.write("%s = {\n", key);
-            }
-
-            this.indentLevel++
-
-            this.writeObject(obj)
-
-            this.indentLevel--
-            this.write("};\n");
-        }
-    }
-}
-
-pbxWriter.prototype.writeInlineObject = function (n, d, r) {
-    var output = [];
-
-    var inlineObjectHelper = function (name, desc, ref) {
-        var key, cmt, obj;
-
-        if (desc) {
-            output.push(f("%s /* %s */ = {", name, desc));
-        } else {
-            output.push(f("%s = {", name));
-        }
-
-        for (key in ref) {
-            if (COMMENT_KEY.test(key)) continue;
-
-            cmt = comment(key, ref);
-            obj = ref[key];
-
-            if (isArray(obj)) {
-                output.push(f("%s = (", key));
-                
-                for (var i=0; i < obj.length; i++) {
-                    output.push(f("%s, ", obj[i]))
-                }
-
-                output.push("); ");
-            } else if (isObject(obj)) {
-                inlineObjectHelper(key, cmt, obj)
-            } else if (cmt) {
-                output.push(f("%s = %s /* %s */; ", key, obj, cmt))
-            } else {
-                output.push(f("%s = %s; ", key, obj))
-            }
-        }
-
-        output.push("}; ");
-    }
-
-    inlineObjectHelper(n, d, r);
-
-    this.write("%s\n", output.join('').trim());
-}
-
-module.exports = pbxWriter;
diff --git a/bin/node_modules/xcode/node_modules/.bin/pegjs b/bin/node_modules/xcode/node_modules/.bin/pegjs
deleted file mode 100644
index 67b7cec..0000000
--- a/bin/node_modules/xcode/node_modules/.bin/pegjs
+++ /dev/null
@@ -1 +0,0 @@
-../pegjs/bin/pegjs
\ No newline at end of file
diff --git a/bin/node_modules/xcode/node_modules/node-uuid/.npmignore b/bin/node_modules/xcode/node_modules/node-uuid/.npmignore
deleted file mode 100644
index fd4f2b0..0000000
--- a/bin/node_modules/xcode/node_modules/node-uuid/.npmignore
+++ /dev/null
@@ -1,2 +0,0 @@
-node_modules
-.DS_Store
diff --git a/bin/node_modules/xcode/node_modules/node-uuid/LICENSE.md b/bin/node_modules/xcode/node_modules/node-uuid/LICENSE.md
deleted file mode 100644
index bcdddf9..0000000
--- a/bin/node_modules/xcode/node_modules/node-uuid/LICENSE.md
+++ /dev/null
@@ -1,3 +0,0 @@
-Copyright (c) 2010 Robert Kieffer
-
-Dual licensed under the [MIT](http://en.wikipedia.org/wiki/MIT_License) and [GPL](http://en.wikipedia.org/wiki/GNU_General_Public_License) licenses.
diff --git a/bin/node_modules/xcode/node_modules/node-uuid/README.md b/bin/node_modules/xcode/node_modules/node-uuid/README.md
deleted file mode 100644
index a44d9a7..0000000
--- a/bin/node_modules/xcode/node_modules/node-uuid/README.md
+++ /dev/null
@@ -1,199 +0,0 @@
-# node-uuid
-
-Simple, fast generation of [RFC4122](http://www.ietf.org/rfc/rfc4122.txt) UUIDS.
-
-Features:
-
-* Generate RFC4122 version 1 or version 4 UUIDs
-* Runs in node.js and all browsers.
-* Cryptographically strong random # generation on supporting platforms
-* 1.1K minified and gzip'ed  (Want something smaller?  Check this [crazy shit](https://gist.github.com/982883) out! )
-* [Annotated source code](http://broofa.github.com/node-uuid/docs/uuid.html)
-
-## Getting Started
-
-Install it in your browser:
-
-```html
-<script src="uuid.js"></script>
-```
-
-Or in node.js:
-
-```
-npm install node-uuid
-```
-
-```javascript
-var uuid = require('node-uuid');
-```
-
-Then create some ids ...
-
-```javascript
-// Generate a v1 (time-based) id
-uuid.v1(); // -> '6c84fb90-12c4-11e1-840d-7b25c5ee775a'
-
-// Generate a v4 (random) id
-uuid.v4(); // -> '110ec58a-a0f2-4ac4-8393-c866d813b8d1'
-```
-
-## API
-
-### uuid.v1([`options` [, `buffer` [, `offset`]]])
-
-Generate and return a RFC4122 v1 (timestamp-based) UUID.
-
-* `options` - (Object) Optional uuid state to apply. Properties may include:
-
-  * `node` - (Array) Node id as Array of 6 bytes (per 4.1.6). Default: Randomnly generated ID.  See note 1.
-  * `clockseq` - (Number between 0 - 0x3fff) RFC clock sequence.  Default: An internally maintained clockseq is used.
-  * `msecs` - (Number | Date) Time in milliseconds since unix Epoch.  Default: The current time is used.
-  * `nsecs` - (Number between 0-9999) additional time, in 100-nanosecond units. Ignored if `msecs` is unspecified. Default: internal uuid counter is used, as per 4.2.1.2.
-
-* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written.
-* `offset` - (Number) Starting index in `buffer` at which to begin writing.
-
-Returns `buffer`, if specified, otherwise the string form of the UUID
-
-Notes:
-
-1. The randomly generated node id is only guaranteed to stay constant for the lifetime of the current JS runtime. (Future versions of this module may use persistent storage mechanisms to extend this guarantee.)
-
-Example: Generate string UUID with fully-specified options
-
-```javascript
-uuid.v1({
-  node: [0x01, 0x23, 0x45, 0x67, 0x89, 0xab],
-  clockseq: 0x1234,
-  msecs: new Date('2011-11-01').getTime(),
-  nsecs: 5678
-});   // -> "710b962e-041c-11e1-9234-0123456789ab"
-```
-
-Example: In-place generation of two binary IDs
-
-```javascript
-// Generate two ids in an array
-var arr = new Array(32); // -> []
-uuid.v1(null, arr, 0);   // -> [02 a2 ce 90 14 32 11 e1 85 58 0b 48 8e 4f c1 15]
-uuid.v1(null, arr, 16);  // -> [02 a2 ce 90 14 32 11 e1 85 58 0b 48 8e 4f c1 15 02 a3 1c b0 14 32 11 e1 85 58 0b 48 8e 4f c1 15]
-
-// Optionally use uuid.unparse() to get stringify the ids
-uuid.unparse(buffer);    // -> '02a2ce90-1432-11e1-8558-0b488e4fc115'
-uuid.unparse(buffer, 16) // -> '02a31cb0-1432-11e1-8558-0b488e4fc115'
-```
-
-### uuid.v4([`options` [, `buffer` [, `offset`]]])
-
-Generate and return a RFC4122 v4 UUID.
-
-* `options` - (Object) Optional uuid state to apply. Properties may include:
-
-  * `random` - (Number[16]) Array of 16 numbers (0-255) to use in place of randomly generated values
-  * `rng` - (Function) Random # generator to use.  Set to one of the built-in generators - `uuid.mathRNG` (all platforms), `uuid.nodeRNG` (node.js only), `uuid.whatwgRNG` (WebKit only) - or a custom function that returns an array[16] of byte values.
-
-* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written.
-* `offset` - (Number) Starting index in `buffer` at which to begin writing.
-
-Returns `buffer`, if specified, otherwise the string form of the UUID
-
-Example: Generate string UUID with fully-specified options
-
-```javascript
-uuid.v4({
-  random: [
-    0x10, 0x91, 0x56, 0xbe, 0xc4, 0xfb, 0xc1, 0xea,
-    0x71, 0xb4, 0xef, 0xe1, 0x67, 0x1c, 0x58, 0x36
-  ]
-});
-// -> "109156be-c4fb-41ea-b1b4-efe1671c5836"
-```
-
-Example: Generate two IDs in a single buffer
-
-```javascript
-var buffer = new Array(32); // (or 'new Buffer' in node.js)
-uuid.v4(null, buffer, 0);
-uuid.v4(null, buffer, 16);
-```
-
-### uuid.parse(id[, buffer[, offset]])
-### uuid.unparse(buffer[, offset])
-
-Parse and unparse UUIDs
-
-  * `id` - (String) UUID(-like) string
-  * `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. Default: A new Array or Buffer is used
-  * `offset` - (Number) Starting index in `buffer` at which to begin writing. Default: 0
-
-Example parsing and unparsing a UUID string
-
-```javascript
-var bytes = uuid.parse('797ff043-11eb-11e1-80d6-510998755d10'); // -> <Buffer 79 7f f0 43 11 eb 11 e1 80 d6 51 09 98 75 5d 10>
-var string = uuid.unparse(bytes); // -> '797ff043-11eb-11e1-80d6-510998755d10'
-```
-
-### uuid.noConflict()
-
-(Browsers only) Set `uuid` property back to it's previous value.
-
-Returns the node-uuid object.
-
-Example:
-
-```javascript
-var myUuid = uuid.noConflict();
-myUuid.v1(); // -> '6c84fb90-12c4-11e1-840d-7b25c5ee775a'
-```
-
-## Deprecated APIs
-
-Support for the following v1.2 APIs is available in v1.3, but is deprecated and will be removed in the next major version.
-
-### uuid([format [, buffer [, offset]]])
-
-uuid() has become uuid.v4(), and the `format` argument is now implicit in the `buffer` argument. (i.e. if you specify a buffer, the format is assumed to be binary).
-
-### uuid.BufferClass
-
-The class of container created when generating binary uuid data if no buffer argument is specified.  This is expected to go away, with no replacement API.
-
-## Testing
-
-In node.js
-
-```
-> cd test
-> node uuid.js
-```
-
-In Browser
-
-```
-open test/test.html
-```
-
-### Benchmarking
-
-Requires node.js
-
-```
-npm install uuid uuid-js
-node test/benchmark.js
-```
-
-For a more complete discussion of node-uuid performance, please see the `benchmark/README.md` file, and the [benchmark wiki](https://github.com/broofa/node-uuid/wiki/Benchmark)
-
-For browser performance [checkout the JSPerf tests](http://jsperf.com/node-uuid-performance).
-
-## Release notes
-
-v1.3.2:
-* Improve tests and handling of v1() options (Issue #24)
-* Expose RNG option to allow for perf testing with different generators
-
-v1.3:
-* Support for version 1 ids, thanks to [@ctavan](https://github.com/ctavan)!
-* Support for node.js crypto API
-* De-emphasizing performance in favor of a) cryptographic quality PRNGs where available and b) more manageable code
diff --git a/bin/node_modules/xcode/node_modules/node-uuid/benchmark/README.md b/bin/node_modules/xcode/node_modules/node-uuid/benchmark/README.md
deleted file mode 100644
index aaeb2ea..0000000
--- a/bin/node_modules/xcode/node_modules/node-uuid/benchmark/README.md
+++ /dev/null
@@ -1,53 +0,0 @@
-# node-uuid Benchmarks
-
-### Results
-
-To see the results of our benchmarks visit https://github.com/broofa/node-uuid/wiki/Benchmark
-
-### Run them yourself
-
-node-uuid comes with some benchmarks to measure performance of generating UUIDs. These can be run using node.js. node-uuid is being benchmarked against some other uuid modules, that are available through npm namely `uuid` and `uuid-js`.
-
-To prepare and run the benchmark issue;
-
-```
-npm install uuid uuid-js
-node benchmark/benchmark.js
-```
-
-You'll see an output like this one:
-
-```
-# v4
-nodeuuid.v4(): 854700 uuids/second
-nodeuuid.v4('binary'): 788643 uuids/second
-nodeuuid.v4('binary', buffer): 1336898 uuids/second
-uuid(): 479386 uuids/second
-uuid('binary'): 582072 uuids/second
-uuidjs.create(4): 312304 uuids/second
-
-# v1
-nodeuuid.v1(): 938086 uuids/second
-nodeuuid.v1('binary'): 683060 uuids/second
-nodeuuid.v1('binary', buffer): 1644736 uuids/second
-uuidjs.create(1): 190621 uuids/second
-```
-
-* The `uuid()` entries are for Nikhil Marathe's [uuid module](https://bitbucket.org/nikhilm/uuidjs) which is a wrapper around the native libuuid library.
-* The `uuidjs()` entries are for Patrick Negri's [uuid-js module](https://github.com/pnegri/uuid-js) which is a pure javascript implementation based on [UUID.js](https://github.com/LiosK/UUID.js) by LiosK.
-
-If you want to get more reliable results you can run the benchmark multiple times and write the output into a log file:
-
-```
-for i in {0..9}; do node benchmark/benchmark.js >> benchmark/bench_0.4.12.log; done;
-```
-
-If you're interested in how performance varies between different node versions, you can issue the above command multiple times.
-
-You can then use the shell script `bench.sh` provided in this directory to calculate the averages over all benchmark runs and draw a nice plot:
-
-```
-(cd benchmark/ && ./bench.sh)
-```
-
-This assumes you have [gnuplot](http://www.gnuplot.info/) and [ImageMagick](http://www.imagemagick.org/) installed. You'll find a nice `bench.png` graph in the `benchmark/` directory then.
diff --git a/bin/node_modules/xcode/node_modules/node-uuid/benchmark/bench.gnu b/bin/node_modules/xcode/node_modules/node-uuid/benchmark/bench.gnu
deleted file mode 100644
index a342fbb..0000000
--- a/bin/node_modules/xcode/node_modules/node-uuid/benchmark/bench.gnu
+++ /dev/null
@@ -1,174 +0,0 @@
-#!/opt/local/bin/gnuplot -persist
-#
-#    
-#    	G N U P L O T
-#    	Version 4.4 patchlevel 3
-#    	last modified March 2011
-#    	System: Darwin 10.8.0
-#    
-#    	Copyright (C) 1986-1993, 1998, 2004, 2007-2010
-#    	Thomas Williams, Colin Kelley and many others
-#    
-#    	gnuplot home:     http://www.gnuplot.info
-#    	faq, bugs, etc:   type "help seeking-assistance"
-#    	immediate help:   type "help"
-#    	plot window:      hit 'h'
-set terminal postscript eps noenhanced defaultplex \
- leveldefault color colortext \
- solid linewidth 1.2 butt noclip \
- palfuncparam 2000,0.003 \
- "Helvetica" 14 
-set output 'bench.eps'
-unset clip points
-set clip one
-unset clip two
-set bar 1.000000 front
-set border 31 front linetype -1 linewidth 1.000
-set xdata
-set ydata
-set zdata
-set x2data
-set y2data
-set timefmt x "%d/%m/%y,%H:%M"
-set timefmt y "%d/%m/%y,%H:%M"
-set timefmt z "%d/%m/%y,%H:%M"
-set timefmt x2 "%d/%m/%y,%H:%M"
-set timefmt y2 "%d/%m/%y,%H:%M"
-set timefmt cb "%d/%m/%y,%H:%M"
-set boxwidth
-set style fill  empty border
-set style rectangle back fc lt -3 fillstyle   solid 1.00 border lt -1
-set style circle radius graph 0.02, first 0, 0 
-set dummy x,y
-set format x "% g"
-set format y "% g"
-set format x2 "% g"
-set format y2 "% g"
-set format z "% g"
-set format cb "% g"
-set angles radians
-unset grid
-set key title ""
-set key outside left top horizontal Right noreverse enhanced autotitles columnhead nobox
-set key noinvert samplen 4 spacing 1 width 0 height 0 
-set key maxcolumns 2 maxrows 0
-unset label
-unset arrow
-set style increment default
-unset style line
-set style line 1  linetype 1 linewidth 2.000 pointtype 1 pointsize default pointinterval 0
-unset style arrow
-set style histogram clustered gap 2 title  offset character 0, 0, 0
-unset logscale
-set offsets graph 0.05, 0.15, 0, 0
-set pointsize 1.5
-set pointintervalbox 1
-set encoding default
-unset polar
-unset parametric
-unset decimalsign
-set view 60, 30, 1, 1
-set samples 100, 100
-set isosamples 10, 10
-set surface
-unset contour
-set clabel '%8.3g'
-set mapping cartesian
-set datafile separator whitespace
-unset hidden3d
-set cntrparam order 4
-set cntrparam linear
-set cntrparam levels auto 5
-set cntrparam points 5
-set size ratio 0 1,1
-set origin 0,0
-set style data points
-set style function lines
-set xzeroaxis linetype -2 linewidth 1.000
-set yzeroaxis linetype -2 linewidth 1.000
-set zzeroaxis linetype -2 linewidth 1.000
-set x2zeroaxis linetype -2 linewidth 1.000
-set y2zeroaxis linetype -2 linewidth 1.000
-set ticslevel 0.5
-set mxtics default
-set mytics default
-set mztics default
-set mx2tics default
-set my2tics default
-set mcbtics default
-set xtics border in scale 1,0.5 mirror norotate  offset character 0, 0, 0
-set xtics  norangelimit
-set xtics   ()
-set ytics border in scale 1,0.5 mirror norotate  offset character 0, 0, 0
-set ytics autofreq  norangelimit
-set ztics border in scale 1,0.5 nomirror norotate  offset character 0, 0, 0
-set ztics autofreq  norangelimit
-set nox2tics
-set noy2tics
-set cbtics border in scale 1,0.5 mirror norotate  offset character 0, 0, 0
-set cbtics autofreq  norangelimit
-set title "" 
-set title  offset character 0, 0, 0 font "" norotate
-set timestamp bottom 
-set timestamp "" 
-set timestamp  offset character 0, 0, 0 font "" norotate
-set rrange [ * : * ] noreverse nowriteback  # (currently [8.98847e+307:-8.98847e+307] )
-set autoscale rfixmin
-set autoscale rfixmax
-set trange [ * : * ] noreverse nowriteback  # (currently [-5.00000:5.00000] )
-set autoscale tfixmin
-set autoscale tfixmax
-set urange [ * : * ] noreverse nowriteback  # (currently [-10.0000:10.0000] )
-set autoscale ufixmin
-set autoscale ufixmax
-set vrange [ * : * ] noreverse nowriteback  # (currently [-10.0000:10.0000] )
-set autoscale vfixmin
-set autoscale vfixmax
-set xlabel "" 
-set xlabel  offset character 0, 0, 0 font "" textcolor lt -1 norotate
-set x2label "" 
-set x2label  offset character 0, 0, 0 font "" textcolor lt -1 norotate
-set xrange [ * : * ] noreverse nowriteback  # (currently [-0.150000:3.15000] )
-set autoscale xfixmin
-set autoscale xfixmax
-set x2range [ * : * ] noreverse nowriteback  # (currently [0.00000:3.00000] )
-set autoscale x2fixmin
-set autoscale x2fixmax
-set ylabel "" 
-set ylabel  offset character 0, 0, 0 font "" textcolor lt -1 rotate by -270
-set y2label "" 
-set y2label  offset character 0, 0, 0 font "" textcolor lt -1 rotate by -270
-set yrange [ 0.00000 : 1.90000e+06 ] noreverse nowriteback  # (currently [:] )
-set autoscale yfixmin
-set autoscale yfixmax
-set y2range [ * : * ] noreverse nowriteback  # (currently [0.00000:1.90000e+06] )
-set autoscale y2fixmin
-set autoscale y2fixmax
-set zlabel "" 
-set zlabel  offset character 0, 0, 0 font "" textcolor lt -1 norotate
-set zrange [ * : * ] noreverse nowriteback  # (currently [-10.0000:10.0000] )
-set autoscale zfixmin
-set autoscale zfixmax
-set cblabel "" 
-set cblabel  offset character 0, 0, 0 font "" textcolor lt -1 rotate by -270
-set cbrange [ * : * ] noreverse nowriteback  # (currently [8.98847e+307:-8.98847e+307] )
-set autoscale cbfixmin
-set autoscale cbfixmax
-set zero 1e-08
-set lmargin  -1
-set bmargin  -1
-set rmargin  -1
-set tmargin  -1
-set pm3d explicit at s
-set pm3d scansautomatic
-set pm3d interpolate 1,1 flush begin noftriangles nohidden3d corners2color mean
-set palette positive nops_allcF maxcolors 0 gamma 1.5 color model RGB 
-set palette rgbformulae 7, 5, 15
-set colorbox default
-set colorbox vertical origin screen 0.9, 0.2, 0 size screen 0.05, 0.6, 0 front bdefault
-set loadpath 
-set fontpath 
-set fit noerrorvariables
-GNUTERM = "aqua"
-plot 'bench_results.txt' using 2:xticlabel(1) w lp lw 2, '' using 3:xticlabel(1) w lp lw 2, '' using 4:xticlabel(1) w lp lw 2, '' using 5:xticlabel(1) w lp lw 2, '' using 6:xticlabel(1) w lp lw 2, '' using 7:xticlabel(1) w lp lw 2, '' using 8:xticlabel(1) w lp lw 2, '' using 9:xticlabel(1) w lp lw 2
-#    EOF
diff --git a/bin/node_modules/xcode/node_modules/node-uuid/benchmark/bench.sh b/bin/node_modules/xcode/node_modules/node-uuid/benchmark/bench.sh
deleted file mode 100644
index d870a0c..0000000
--- a/bin/node_modules/xcode/node_modules/node-uuid/benchmark/bench.sh
+++ /dev/null
@@ -1,34 +0,0 @@
-#!/bin/bash
-
-# for a given node version run:
-# for i in {0..9}; do node benchmark.js >> bench_0.6.2.log; done;
-
-PATTERNS=('nodeuuid.v1()' "nodeuuid.v1('binary'," 'nodeuuid.v4()' "nodeuuid.v4('binary'," "uuid()" "uuid('binary')" 'uuidjs.create(1)' 'uuidjs.create(4)' '140byte')
-FILES=(node_uuid_v1_string node_uuid_v1_buf node_uuid_v4_string node_uuid_v4_buf libuuid_v4_string libuuid_v4_binary uuidjs_v1_string uuidjs_v4_string 140byte_es)
-INDICES=(2 3 2 3 2 2 2 2 2)
-VERSIONS=$( ls bench_*.log | sed -e 's/^bench_\([0-9\.]*\)\.log/\1/' | tr "\\n" " " )
-TMPJOIN="tmp_join"
-OUTPUT="bench_results.txt"
-
-for I in ${!FILES[*]}; do
-  F=${FILES[$I]}
-  P=${PATTERNS[$I]}
-  INDEX=${INDICES[$I]}
-  echo "version $F" > $F
-  for V in $VERSIONS; do
-    (VAL=$( grep "$P" bench_$V.log | LC_ALL=en_US awk '{ sum += $'$INDEX' } END { print sum/NR }' ); echo $V $VAL) >> $F
-  done
-  if [ $I == 0 ]; then
-    cat $F > $TMPJOIN
-  else
-    join $TMPJOIN $F > $OUTPUT
-    cp $OUTPUT $TMPJOIN
-  fi
-  rm $F
-done
-
-rm $TMPJOIN
-
-gnuplot bench.gnu
-convert -density 200 -resize 800x560 -flatten bench.eps bench.png
-rm bench.eps
diff --git a/bin/node_modules/xcode/node_modules/node-uuid/benchmark/benchmark-native.c b/bin/node_modules/xcode/node_modules/node-uuid/benchmark/benchmark-native.c
deleted file mode 100644
index dbfc75f..0000000
--- a/bin/node_modules/xcode/node_modules/node-uuid/benchmark/benchmark-native.c
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
-Test performance of native C UUID generation
-
-To Compile: cc -luuid benchmark-native.c -o benchmark-native
-*/
-
-#include <stdio.h>
-#include <unistd.h>
-#include <sys/time.h>
-#include <uuid/uuid.h>
-
-int main() {
-  uuid_t myid;
-  char buf[36+1];
-  int i;
-  struct timeval t;
-  double start, finish;
-
-  gettimeofday(&t, NULL);
-  start = t.tv_sec + t.tv_usec/1e6;
-
-  int n = 2e5;
-  for (i = 0; i < n; i++) {
-    uuid_generate(myid);
-    uuid_unparse(myid, buf);
-  }
-
-  gettimeofday(&t, NULL);
-  finish = t.tv_sec + t.tv_usec/1e6;
-  double dur = finish - start;
-
-  printf("%d uuids/sec", (int)(n/dur));
-  return 0;
-}
diff --git a/bin/node_modules/xcode/node_modules/node-uuid/benchmark/benchmark.js b/bin/node_modules/xcode/node_modules/node-uuid/benchmark/benchmark.js
deleted file mode 100644
index 40e6efb..0000000
--- a/bin/node_modules/xcode/node_modules/node-uuid/benchmark/benchmark.js
+++ /dev/null
@@ -1,84 +0,0 @@
-try {
-  var nodeuuid = require('../uuid');
-} catch (e) {
-  console.error('node-uuid require failed - skipping tests');
-}
-
-try {
-  var uuid = require('uuid');
-} catch (e) {
-  console.error('uuid require failed - skipping tests');
-}
-
-try {
-  var uuidjs = require('uuid-js');
-} catch (e) {
-  console.error('uuid-js require failed - skipping tests');
-}
-
-var N = 5e5;
-
-function rate(msg, t) {
-  console.log(msg + ': ' +
-    (N / (Date.now() - t) * 1e3 | 0) +
-    ' uuids/second');
-}
-
-console.log('# v4');
-
-// node-uuid - string form
-if (nodeuuid) {
-  for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v4();
-  rate('nodeuuid.v4() - using node.js crypto RNG', t);
-
-  for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v4({rng: nodeuuid.mathRNG});
-  rate('nodeuuid.v4() - using Math.random() RNG', t);
-
-  for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v4('binary');
-  rate('nodeuuid.v4(\'binary\')', t);
-
-  var buffer = new nodeuuid.BufferClass(16);
-  for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v4('binary', buffer);
-  rate('nodeuuid.v4(\'binary\', buffer)', t);
-}
-
-// libuuid - string form
-if (uuid) {
-  for (var i = 0, t = Date.now(); i < N; i++) uuid();
-  rate('uuid()', t);
-
-  for (var i = 0, t = Date.now(); i < N; i++) uuid('binary');
-  rate('uuid(\'binary\')', t);
-}
-
-// uuid-js - string form
-if (uuidjs) {
-  for (var i = 0, t = Date.now(); i < N; i++) uuidjs.create(4);
-  rate('uuidjs.create(4)', t);
-}
-
-// 140byte.es
-for (var i = 0, t = Date.now(); i < N; i++) 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g,function(s,r){r=Math.random()*16|0;return (s=='x'?r:r&0x3|0x8).toString(16)});
-rate('140byte.es_v4', t);
-
-console.log('');
-console.log('# v1');
-
-// node-uuid - v1 string form
-if (nodeuuid) {
-  for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v1();
-  rate('nodeuuid.v1()', t);
-
-  for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v1('binary');
-  rate('nodeuuid.v1(\'binary\')', t);
-
-  var buffer = new nodeuuid.BufferClass(16);
-  for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v1('binary', buffer);
-  rate('nodeuuid.v1(\'binary\', buffer)', t);
-}
-
-// uuid-js - v1 string form
-if (uuidjs) {
-  for (var i = 0, t = Date.now(); i < N; i++) uuidjs.create(1);
-  rate('uuidjs.create(1)', t);
-}
diff --git a/bin/node_modules/xcode/node_modules/node-uuid/package.json b/bin/node_modules/xcode/node_modules/node-uuid/package.json
deleted file mode 100644
index 9ec4d1b..0000000
--- a/bin/node_modules/xcode/node_modules/node-uuid/package.json
+++ /dev/null
@@ -1,60 +0,0 @@
-{
-  "name": "node-uuid",
-  "description": "Rigorous implementation of RFC4122 (v1 and v4) UUIDs.",
-  "url": "http://github.com/broofa/node-uuid",
-  "keywords": [
-    "uuid",
-    "guid",
-    "rfc4122"
-  ],
-  "author": {
-    "name": "Robert Kieffer",
-    "email": "robert@broofa.com"
-  },
-  "contributors": [
-    {
-      "name": "Christoph Tavan",
-      "email": "dev@tavan.de"
-    }
-  ],
-  "lib": ".",
-  "main": "./uuid.js",
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/broofa/node-uuid.git"
-  },
-  "version": "1.3.3",
-  "_npmUser": {
-    "name": "broofa",
-    "email": "robert@broofa.com"
-  },
-  "_id": "node-uuid@1.3.3",
-  "dependencies": {},
-  "devDependencies": {},
-  "engines": {
-    "node": "*"
-  },
-  "_engineSupported": true,
-  "_npmVersion": "1.0.106",
-  "_nodeVersion": "v0.4.6",
-  "_defaultsLoaded": true,
-  "dist": {
-    "shasum": "d3db4d7b56810d9e4032342766282af07391729b",
-    "tarball": "http://registry.npmjs.org/node-uuid/-/node-uuid-1.3.3.tgz"
-  },
-  "maintainers": [
-    {
-      "name": "broofa",
-      "email": "robert@broofa.com"
-    }
-  ],
-  "directories": {},
-  "_shasum": "d3db4d7b56810d9e4032342766282af07391729b",
-  "_from": "node-uuid@1.3.3",
-  "_resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.3.3.tgz",
-  "bugs": {
-    "url": "https://github.com/broofa/node-uuid/issues"
-  },
-  "readme": "ERROR: No README data found!",
-  "homepage": "https://github.com/broofa/node-uuid"
-}
diff --git a/bin/node_modules/xcode/node_modules/node-uuid/test/compare_v1.js b/bin/node_modules/xcode/node_modules/node-uuid/test/compare_v1.js
deleted file mode 100644
index 05af822..0000000
--- a/bin/node_modules/xcode/node_modules/node-uuid/test/compare_v1.js
+++ /dev/null
@@ -1,63 +0,0 @@
-var assert = require('assert'),
-    nodeuuid = require('../uuid'),
-    uuidjs = require('uuid-js'),
-    libuuid = require('uuid').generate,
-    util = require('util'),
-    exec = require('child_process').exec,
-    os = require('os');
-
-// On Mac Os X / macports there's only the ossp-uuid package that provides uuid
-// On Linux there's uuid-runtime which provides uuidgen
-var uuidCmd = os.type() === 'Darwin' ? 'uuid -1' : 'uuidgen -t';
-
-function compare(ids) {
-  console.log(ids);
-  for (var i = 0; i < ids.length; i++) {
-    var id = ids[i].split('-');
-    id = [id[2], id[1], id[0]].join('');
-    ids[i] = id;
-  }
-  var sorted = ([].concat(ids)).sort();
-
-  if (sorted.toString() !== ids.toString()) {
-    console.log('Warning: sorted !== ids');
-  } else {
-    console.log('everything in order!');
-  }
-}
-
-// Test time order of v1 uuids
-var ids = [];
-while (ids.length < 10e3) ids.push(nodeuuid.v1());
-
-var max = 10;
-console.log('node-uuid:');
-ids = [];
-for (var i = 0; i < max; i++) ids.push(nodeuuid.v1());
-compare(ids);
-
-console.log('');
-console.log('uuidjs:');
-ids = [];
-for (var i = 0; i < max; i++) ids.push(uuidjs.create(1).toString());
-compare(ids);
-
-console.log('');
-console.log('libuuid:');
-ids = [];
-var count = 0;
-var last = function() {
-  compare(ids);
-}
-var cb = function(err, stdout, stderr) {
-  ids.push(stdout.substring(0, stdout.length-1));
-  count++;
-  if (count < max) {
-    return next();
-  }
-  last();
-};
-var next = function() {
-  exec(uuidCmd, cb);
-};
-next();
diff --git a/bin/node_modules/xcode/node_modules/node-uuid/test/test.html b/bin/node_modules/xcode/node_modules/node-uuid/test/test.html
deleted file mode 100644
index d80326e..0000000
--- a/bin/node_modules/xcode/node_modules/node-uuid/test/test.html
+++ /dev/null
@@ -1,17 +0,0 @@
-<html>
-  <head>
-    <style>
-      div {
-        font-family: monospace;
-        font-size: 8pt;
-      }
-      div.log {color: #444;}
-      div.warn {color: #550;}
-      div.error {color: #800; font-weight: bold;}
-    </style>
-    <script src="../uuid.js"></script>
-  </head>
-  <body>
-    <script src="./test.js"></script>
-  </body>
-</html>
diff --git a/bin/node_modules/xcode/node_modules/node-uuid/test/test.js b/bin/node_modules/xcode/node_modules/node-uuid/test/test.js
deleted file mode 100644
index be23919..0000000
--- a/bin/node_modules/xcode/node_modules/node-uuid/test/test.js
+++ /dev/null
@@ -1,240 +0,0 @@
-if (!this.uuid) {
-  // node.js
-  uuid = require('../uuid');
-}
-
-//
-// x-platform log/assert shims
-//
-
-function _log(msg, type) {
-  type = type || 'log';
-
-  if (typeof(document) != 'undefined') {
-    document.write('<div class="' + type + '">' + msg.replace(/\n/g, '<br />') + '</div>');
-  }
-  if (typeof(console) != 'undefined') {
-    var color = {
-      log: '\033[39m',
-      warn: '\033[33m',
-      error: '\033[31m'
-    }
-    console[type](color[type] + msg + color.log);
-  }
-}
-
-function log(msg) {_log(msg, 'log');}
-function warn(msg) {_log(msg, 'warn');}
-function error(msg) {_log(msg, 'error');}
-
-function assert(res, msg) {
-  if (!res) {
-    error('FAIL: ' + msg);
-  } else {
-    log('Pass: ' + msg);
-  }
-}
-
-//
-// Unit tests
-//
-
-// Verify ordering of v1 ids created with explicit times
-var TIME = 1321644961388; // 2011-11-18 11:36:01.388-08:00
-
-function compare(name, ids) {
-  ids = ids.map(function(id) {
-    return id.split('-').reverse().join('-');
-  }).sort();
-  var sorted = ([].concat(ids)).sort();
-
-  assert(sorted.toString() == ids.toString(), name + ' have expected order');
-}
-
-// Verify ordering of v1 ids created using default behavior
-compare('uuids with current time', [
-  uuid.v1(),
-  uuid.v1(),
-  uuid.v1(),
-  uuid.v1(),
-  uuid.v1()
-]);
-
-// Verify ordering of v1 ids created with explicit times
-compare('uuids with time option', [
-  uuid.v1({msecs: TIME - 10*3600*1000}),
-  uuid.v1({msecs: TIME - 1}),
-  uuid.v1({msecs: TIME}),
-  uuid.v1({msecs: TIME + 1}),
-  uuid.v1({msecs: TIME + 28*24*3600*1000}),
-]);
-
-assert(
-  uuid.v1({msecs: TIME}) != uuid.v1({msecs: TIME}),
-  'IDs created at same msec are different'
-);
-
-// Verify throw if too many ids created
-var thrown = false;
-try {
-  uuid.v1({msecs: TIME, nsecs: 10000});
-} catch (e) {
-  thrown = true;
-}
-assert(thrown, 'Exception thrown when > 10K ids created in 1 ms');
-
-// Verify clock regression bumps clockseq
-var uidt = uuid.v1({msecs: TIME});
-var uidtb = uuid.v1({msecs: TIME - 1});
-assert(
-  parseInt(uidtb.split('-')[3], 16) - parseInt(uidt.split('-')[3], 16) === 1,
-  'Clock regression by msec increments the clockseq'
-);
-
-// Verify clock regression bumps clockseq
-var uidtn = uuid.v1({msecs: TIME, nsecs: 10});
-var uidtnb = uuid.v1({msecs: TIME, nsecs: 9});
-assert(
-  parseInt(uidtnb.split('-')[3], 16) - parseInt(uidtn.split('-')[3], 16) === 1,
-  'Clock regression by nsec increments the clockseq'
-);
-
-// Verify explicit options produce expected id
-var id = uuid.v1({
-  msecs: 1321651533573,
-  nsecs: 5432,
-  clockseq: 0x385c,
-  node: [ 0x61, 0xcd, 0x3c, 0xbb, 0x32, 0x10 ]
-});
-assert(id == 'd9428888-122b-11e1-b85c-61cd3cbb3210', 'Explicit options produce expected id');
-
-// Verify adjacent ids across a msec boundary are 1 time unit apart
-var u0 = uuid.v1({msecs: TIME, nsecs: 9999});
-var u1 = uuid.v1({msecs: TIME + 1, nsecs: 0});
-
-var before = u0.split('-')[0], after = u1.split('-')[0];
-var dt = parseInt(after, 16) - parseInt(before, 16);
-assert(dt === 1, 'Ids spanning 1ms boundary are 100ns apart');
-
-//
-// Test parse/unparse
-//
-
-id = '00112233445566778899aabbccddeeff';
-assert(uuid.unparse(uuid.parse(id.substr(0,10))) ==
-  '00112233-4400-0000-0000-000000000000', 'Short parse');
-assert(uuid.unparse(uuid.parse('(this is the uuid -> ' + id + id)) ==
-  '00112233-4455-6677-8899-aabbccddeeff', 'Dirty parse');
-
-//
-// Perf tests
-//
-
-var generators = {
-  v1: uuid.v1,
-  v4: uuid.v4
-};
-
-var UUID_FORMAT = {
-  v1: /[0-9a-f]{8}-[0-9a-f]{4}-1[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}/i,
-  v4: /[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}/i
-};
-
-var N = 1e4;
-
-// Get %'age an actual value differs from the ideal value
-function divergence(actual, ideal) {
-  return Math.round(100*100*(actual - ideal)/ideal)/100;
-}
-
-function rate(msg, t) {
-  log(msg + ': ' + (N / (Date.now() - t) * 1e3 | 0) + ' uuids\/second');
-}
-
-for (var version in generators) {
-  var counts = {}, max = 0;
-  var generator = generators[version];
-  var format = UUID_FORMAT[version];
-
-  log('\nSanity check ' + N + ' ' + version + ' uuids');
-  for (var i = 0, ok = 0; i < N; i++) {
-    id = generator();
-    if (!format.test(id)) {
-      throw Error(id + ' is not a valid UUID string');
-    }
-
-    if (id != uuid.unparse(uuid.parse(id))) {
-      assert(fail, id + ' is not a valid id');
-    }
-
-    // Count digits for our randomness check
-    if (version == 'v4') {
-      var digits = id.replace(/-/g, '').split('');
-      for (var j = digits.length-1; j >= 0; j--) {
-        var c = digits[j];
-        max = Math.max(max, counts[c] = (counts[c] || 0) + 1);
-      }
-    }
-  }
-
-  // Check randomness for v4 UUIDs
-  if (version == 'v4') {
-    // Limit that we get worried about randomness. (Purely empirical choice, this!)
-    var limit = 2*100*Math.sqrt(1/N);
-
-    log('\nChecking v4 randomness.  Distribution of Hex Digits (% deviation from ideal)');
-
-    for (var i = 0; i < 16; i++) {
-      var c = i.toString(16);
-      var bar = '', n = counts[c], p = Math.round(n/max*100|0);
-
-      // 1-3,5-8, and D-F: 1:16 odds over 30 digits
-      var ideal = N*30/16;
-      if (i == 4) {
-        // 4: 1:1 odds on 1 digit, plus 1:16 odds on 30 digits
-        ideal = N*(1 + 30/16);
-      } else if (i >= 8 && i <= 11) {
-        // 8-B: 1:4 odds on 1 digit, plus 1:16 odds on 30 digits
-        ideal = N*(1/4 + 30/16);
-      } else {
-        // Otherwise: 1:16 odds on 30 digits
-        ideal = N*30/16;
-      }
-      var d = divergence(n, ideal);
-
-      // Draw bar using UTF squares (just for grins)
-      var s = n/max*50 | 0;
-      while (s--) bar += '=';
-
-      assert(Math.abs(d) < limit, c + ' |' + bar + '| ' + counts[c] + ' (' + d + '% < ' + limit + '%)');
-    }
-  }
-}
-
-// Perf tests
-for (var version in generators) {
-  log('\nPerformance testing ' + version + ' UUIDs');
-  var generator = generators[version];
-  var buf = new uuid.BufferClass(16);
-
-  if (version == 'v4') {
-    ['mathRNG', 'whatwgRNG', 'nodeRNG'].forEach(function(rng) {
-      if (uuid[rng]) {
-        var options = {rng: uuid[rng]};
-        for (var i = 0, t = Date.now(); i < N; i++) generator(options);
-        rate('uuid.' + version + '() with ' + rng, t);
-      } else {
-        log('uuid.' + version + '() with ' + rng + ': not defined');
-      }
-    });
-  } else {
-    for (var i = 0, t = Date.now(); i < N; i++) generator();
-    rate('uuid.' + version + '()', t);
-  }
-
-  for (var i = 0, t = Date.now(); i < N; i++) generator('binary');
-  rate('uuid.' + version + '(\'binary\')', t);
-
-  for (var i = 0, t = Date.now(); i < N; i++) generator('binary', buf);
-  rate('uuid.' + version + '(\'binary\', buffer)', t);
-}
diff --git a/bin/node_modules/xcode/node_modules/node-uuid/uuid.js b/bin/node_modules/xcode/node_modules/node-uuid/uuid.js
deleted file mode 100644
index 27f1d12..0000000
--- a/bin/node_modules/xcode/node_modules/node-uuid/uuid.js
+++ /dev/null
@@ -1,249 +0,0 @@
-//     node-uuid/uuid.js
-//
-//     Copyright (c) 2010 Robert Kieffer
-//     Dual licensed under the MIT and GPL licenses.
-//     Documentation and details at https://github.com/broofa/node-uuid
-(function() {
-  var _global = this;
-
-  // Unique ID creation requires a high quality random # generator, but
-  // Math.random() does not guarantee "cryptographic quality".  So we feature
-  // detect for more robust APIs, normalizing each method to return 128-bits
-  // (16 bytes) of random data.
-  var mathRNG, nodeRNG, whatwgRNG;
-
-  // Math.random()-based RNG.  All platforms, very fast, unknown quality
-  var _rndBytes = new Array(16);
-  mathRNG = function() {
-    var r, b = _rndBytes, i = 0;
-
-    for (var i = 0, r; i < 16; i++) {
-      if ((i & 0x03) == 0) r = Math.random() * 0x100000000;
-      b[i] = r >>> ((i & 0x03) << 3) & 0xff;
-    }
-
-    return b;
-  }
-
-  // WHATWG crypto-based RNG - http://wiki.whatwg.org/wiki/Crypto
-  // WebKit only (currently), moderately fast, high quality
-  if (_global.crypto && crypto.getRandomValues) {
-    var _rnds = new Uint32Array(4);
-    whatwgRNG = function() {
-      crypto.getRandomValues(_rnds);
-
-      for (var c = 0 ; c < 16; c++) {
-        _rndBytes[c] = _rnds[c >> 2] >>> ((c & 0x03) * 8) & 0xff;
-      }
-      return _rndBytes;
-    }
-  }
-
-  // Node.js crypto-based RNG - http://nodejs.org/docs/v0.6.2/api/crypto.html
-  // Node.js only, moderately fast, high quality
-  try {
-    var _rb = require('crypto').randomBytes;
-    nodeRNG = _rb && function() {
-      return _rb(16);
-    };
-  } catch (e) {}
-
-  // Select RNG with best quality
-  var _rng = nodeRNG || whatwgRNG || mathRNG;
-
-  // Buffer class to use
-  var BufferClass = typeof(Buffer) == 'function' ? Buffer : Array;
-
-  // Maps for number <-> hex string conversion
-  var _byteToHex = [];
-  var _hexToByte = {};
-  for (var i = 0; i < 256; i++) {
-    _byteToHex[i] = (i + 0x100).toString(16).substr(1);
-    _hexToByte[_byteToHex[i]] = i;
-  }
-
-  // **`parse()` - Parse a UUID into it's component bytes**
-  function parse(s, buf, offset) {
-    var i = (buf && offset) || 0, ii = 0;
-
-    buf = buf || [];
-    s.toLowerCase().replace(/[0-9a-f]{2}/g, function(byte) {
-      if (ii < 16) { // Don't overflow!
-        buf[i + ii++] = _hexToByte[byte];
-      }
-    });
-
-    // Zero out remaining bytes if string was short
-    while (ii < 16) {
-      buf[i + ii++] = 0;
-    }
-
-    return buf;
-  }
-
-  // **`unparse()` - Convert UUID byte array (ala parse()) into a string**
-  function unparse(buf, offset) {
-    var i = offset || 0, bth = _byteToHex;
-    return  bth[buf[i++]] + bth[buf[i++]] +
-            bth[buf[i++]] + bth[buf[i++]] + '-' +
-            bth[buf[i++]] + bth[buf[i++]] + '-' +
-            bth[buf[i++]] + bth[buf[i++]] + '-' +
-            bth[buf[i++]] + bth[buf[i++]] + '-' +
-            bth[buf[i++]] + bth[buf[i++]] +
-            bth[buf[i++]] + bth[buf[i++]] +
-            bth[buf[i++]] + bth[buf[i++]];
-  }
-
-  // **`v1()` - Generate time-based UUID**
-  //
-  // Inspired by https://github.com/LiosK/UUID.js
-  // and http://docs.python.org/library/uuid.html
-
-  // random #'s we need to init node and clockseq
-  var _seedBytes = _rng();
-
-  // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)
-  var _nodeId = [
-    _seedBytes[0] | 0x01,
-    _seedBytes[1], _seedBytes[2], _seedBytes[3], _seedBytes[4], _seedBytes[5]
-  ];
-
-  // Per 4.2.2, randomize (14 bit) clockseq
-  var _clockseq = (_seedBytes[6] << 8 | _seedBytes[7]) & 0x3fff;
-
-  // Previous uuid creation time
-  var _lastMSecs = 0, _lastNSecs = 0;
-
-  // See https://github.com/broofa/node-uuid for API details
-  function v1(options, buf, offset) {
-    var i = buf && offset || 0;
-    var b = buf || [];
-
-    options = options || {};
-
-    var clockseq = options.clockseq != null ? options.clockseq : _clockseq;
-
-    // UUID timestamps are 100 nano-second units since the Gregorian epoch,
-    // (1582-10-15 00:00).  JSNumbers aren't precise enough for this, so
-    // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'
-    // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.
-    var msecs = options.msecs != null ? options.msecs : new Date().getTime();
-
-    // Per 4.2.1.2, use count of uuid's generated during the current clock
-    // cycle to simulate higher resolution clock
-    var nsecs = options.nsecs != null ? options.nsecs : _lastNSecs + 1;
-
-    // Time since last uuid creation (in msecs)
-    var dt = (msecs - _lastMSecs) + (nsecs - _lastNSecs)/10000;
-
-    // Per 4.2.1.2, Bump clockseq on clock regression
-    if (dt < 0 && options.clockseq == null) {
-      clockseq = clockseq + 1 & 0x3fff;
-    }
-
-    // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new
-    // time interval
-    if ((dt < 0 || msecs > _lastMSecs) && options.nsecs == null) {
-      nsecs = 0;
-    }
-
-    // Per 4.2.1.2 Throw error if too many uuids are requested
-    if (nsecs >= 10000) {
-      throw new Error('uuid.v1(): Can\'t create more than 10M uuids/sec');
-    }
-
-    _lastMSecs = msecs;
-    _lastNSecs = nsecs;
-    _clockseq = clockseq;
-
-    // Per 4.1.4 - Convert from unix epoch to Gregorian epoch
-    msecs += 12219292800000;
-
-    // `time_low`
-    var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;
-    b[i++] = tl >>> 24 & 0xff;
-    b[i++] = tl >>> 16 & 0xff;
-    b[i++] = tl >>> 8 & 0xff;
-    b[i++] = tl & 0xff;
-
-    // `time_mid`
-    var tmh = (msecs / 0x100000000 * 10000) & 0xfffffff;
-    b[i++] = tmh >>> 8 & 0xff;
-    b[i++] = tmh & 0xff;
-
-    // `time_high_and_version`
-    b[i++] = tmh >>> 24 & 0xf | 0x10; // include version
-    b[i++] = tmh >>> 16 & 0xff;
-
-    // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)
-    b[i++] = clockseq >>> 8 | 0x80;
-
-    // `clock_seq_low`
-    b[i++] = clockseq & 0xff;
-
-    // `node`
-    var node = options.node || _nodeId;
-    for (var n = 0; n < 6; n++) {
-      b[i + n] = node[n];
-    }
-
-    return buf ? buf : unparse(b);
-  }
-
-  // **`v4()` - Generate random UUID**
-
-  // See https://github.com/broofa/node-uuid for API details
-  function v4(options, buf, offset) {
-    // Deprecated - 'format' argument, as supported in v1.2
-    var i = buf && offset || 0;
-
-    if (typeof(options) == 'string') {
-      buf = options == 'binary' ? new BufferClass(16) : null;
-      options = null;
-    }
-    options = options || {};
-
-    var rnds = options.random || (options.rng || _rng)();
-
-    // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`
-    rnds[6] = (rnds[6] & 0x0f) | 0x40;
-    rnds[8] = (rnds[8] & 0x3f) | 0x80;
-
-    // Copy bytes to buffer, if provided
-    if (buf) {
-      for (var ii = 0; ii < 16; ii++) {
-        buf[i + ii] = rnds[ii];
-      }
-    }
-
-    return buf || unparse(rnds);
-  }
-
-  // Export public API
-  var uuid = v4;
-  uuid.v1 = v1;
-  uuid.v4 = v4;
-  uuid.parse = parse;
-  uuid.unparse = unparse;
-  uuid.BufferClass = BufferClass;
-
-  // Export RNG options
-  uuid.mathRNG = mathRNG;
-  uuid.nodeRNG = nodeRNG;
-  uuid.whatwgRNG = whatwgRNG;
-
-  if (typeof(module) != 'undefined') {
-    // Play nice with node.js
-    module.exports = uuid;
-  } else {
-    // Play nice with browsers
-    var _previousRoot = _global.uuid;
-
-    // **`noConflict()` - (browser only) to reset global 'uuid' var**
-    uuid.noConflict = function() {
-      _global.uuid = _previousRoot;
-      return uuid;
-    }
-    _global.uuid = uuid;
-  }
-}());
diff --git a/bin/node_modules/xcode/node_modules/pegjs/CHANGELOG b/bin/node_modules/xcode/node_modules/pegjs/CHANGELOG
deleted file mode 100644
index e5967cf..0000000
--- a/bin/node_modules/xcode/node_modules/pegjs/CHANGELOG
+++ /dev/null
@@ -1,146 +0,0 @@
-0.6.2 (2011-08-20)
-------------------
-
-Small Changes:
-
-* Reset parser position when action returns |null|.
-* Fixed typo in JavaScript example grammar.
-
-0.6.1 (2011-04-14)
-------------------
-
-Small Changes:
-
-* Use --ascii option when generating a minified version.
-
-0.6.0 (2011-04-14)
-------------------
-
-Big Changes:
-
-* Rewrote the command-line mode to be based on Node.js instead of Rhino -- no
-  more Java dependency. This also means that PEG.js is available as a Node.js
-  package and can be required as a module.
-* Version for the browser is built separately from the command-ine one in two
-  flavors (normal and minified).
-* Parser variable name is no longer required argument of bin/pegjs -- it is
-  "module.exports" by default and can be set using the -e/--export-var option.
-  This makes parsers generated by /bin/pegjs Node.js modules by default.
-* Added ability to start parsing from any grammar rule.
-* Added several compiler optimizations -- 0.6 is ~12% faster than 0.5.1 in the
-  benchmark on V8.
-
-Small Changes:
-
-* Split the source code into multiple files combined together using a build
-  system.
-* Jake is now used instead of Rake for build scripts -- no more Ruby dependency.
-* Test suite can be run from the command-line.
-* Benchmark suite can be run from the command-line.
-* Benchmark browser runner improvements (users can specify number of runs,
-  benchmarks are run using |setTimeout|, table is centered and fixed-width).
-* Added PEG.js version to "Generated by..." line in generated parsers.
-* Added PEG.js version information and homepage header to peg.js.
-* Generated code improvements and fixes.
-* Internal code improvements and fixes.
-* Rewrote README.md.
-
-0.5.1 (2010-11-28)
-------------------
-
-Small Changes:
-
-* Fixed a problem where "SyntaxError: Invalid range in character class." error
-  appeared when using command-line version on Widnows (GH-13).
-* Fixed wrong version reported by "bin/pegjs --version".
-* Removed two unused variables in the code.
-* Fixed incorrect variable name on two places.
-
-0.5 (2010-06-10)
-----------------
-
-Big Changes:
-
-* Syntax change: Use labeled expressions and variables instead of $1, $2, etc.
-* Syntax change: Replaced ":" after a rule name with "=".
-* Syntax change: Allow trailing semicolon (";") for rules
-* Semantic change: Start rule of the grammar is now implicitly its first rule.
-* Implemented semantic predicates.
-* Implemented initializers.
-* Removed ability to change the start rule when generating the parser.
-* Added several compiler optimizations -- 0.5 is ~11% faster than 0.4 in the
-  benchmark on V8.
-
-Small Changes:
-
-* PEG.buildParser now accepts grammars only in string format.
-* Added "Generated by ..." message to the generated parsers.
-* Formatted all grammars more consistently and transparently.
-* Added notes about ECMA-262, 5th ed. compatibility to the JSON example grammar.
-* Guarded against redefinition of |undefined|.
-* Made bin/pegjs work when called via a symlink (issue #1).
-* Fixed bug causing incorrect error messages (issue #2).
-* Fixed error message for invalid character range.
-* Fixed string literal parsing in the JavaScript grammar.
-* Generated code improvements and fixes.
-* Internal code improvements and fixes.
-* Improved README.md.
-
-0.4 (2010-04-17)
-----------------
-
-Big Changes:
-
-* Improved IE compatibility -- IE6+ is now fully supported.
-* Generated parsers are now standalone (no runtime is required).
-* Added example grammars for JavaScript, CSS and JSON.
-* Added a benchmark suite.
-* Implemented negative character classes (e.g. [^a-z]).
-* Project moved from BitBucket to GitHub.
-
-Small Changes:
-
-* Code generated for the character classes is now regexp-based (= simpler and
-  more scalable).
-* Added \uFEFF (BOM) to the definition of whitespace in the metagrammar.
-* When building a parser, left-recursive rules (both direct and indirect) are
-  reported as errors.
-* When building a parser, missing rules are reported as errors.
-* Expected items in the error messages do not contain duplicates and they are
-  sorted.
-* Fixed several bugs in the example arithmetics grammar.
-* Converted README to GitHub Flavored Markdown and improved it.
-* Added CHANGELOG.
-* Internal code improvements.
-
-0.3 (2010-03-14)
-----------------
-
-* Wrote README.
-* Bootstrapped the grammar parser.
-* Metagrammar recognizes JavaScript-like comments.
-* Changed standard grammar extension from .peg to .pegjs (it is more specific).
-* Simplified the example arithmetics grammar + added comment.
-* Fixed a bug with reporting of invalid ranges such as [b-a] in the metagrammar.
-* Fixed --start vs. --start-rule inconsistency between help and actual option
-  processing code.
-* Avoided ugliness in QUnit output.
-* Fixed typo in help: "parserVar" -> "parser_var".
-* Internal code improvements.
-
-0.2.1 (2010-03-08)
-------------------
-
-* Added "pegjs-" prefix to the name of the minified runtime file.
-
-0.2 (2010-03-08)
-----------------
-
-* Added Rakefile that builds minified runtime using Google Closure Compiler API.
-* Removed trailing commas in object initializers (Google Closure does not like
-  them).
-
-0.1 (2010-03-08)
-----------------
-
-* Initial release.
diff --git a/bin/node_modules/xcode/node_modules/pegjs/LICENSE b/bin/node_modules/xcode/node_modules/pegjs/LICENSE
deleted file mode 100644
index 48ab3e5..0000000
--- a/bin/node_modules/xcode/node_modules/pegjs/LICENSE
+++ /dev/null
@@ -1,22 +0,0 @@
-Copyright (c) 2010-2011 David Majda
-
-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/bin/node_modules/xcode/node_modules/pegjs/README.md b/bin/node_modules/xcode/node_modules/pegjs/README.md
deleted file mode 100644
index 7a4c17e..0000000
--- a/bin/node_modules/xcode/node_modules/pegjs/README.md
+++ /dev/null
@@ -1,226 +0,0 @@
-PEG.js
-======
-
-PEG.js is a simple parser generator for JavaScript that produces fast parsers with excellent error reporting. You can use it to process complex data or computer languages and build transformers, interpreters, compilers and other tools easily.
-
-Features
---------
-
-  * Simple and expressive grammar syntax
-  * Integrates both lexical and syntactical analysis
-  * Parsers have excellent error reporting out of the box
-  * Based on [parsing expression grammar](http://en.wikipedia.org/wiki/Parsing_expression_grammar) formalism — more powerful than traditional LL(*k*) and LR(*k*) parsers
-  * Usable [from your browser](http://pegjs.majda.cz/online), from the command line, or via JavaScript API
-
-Getting Started
----------------
-
-[Online version](http://pegjs.majda.cz/online) is the easiest way to generate a parser. Just enter your grammar, try parsing few inputs, and download generated parser code.
-
-Installation
-------------
-
-### Command Line / Server-side
-
-To use command-line version, install [Node.js](http://nodejs.org/) and [npm](http://npmjs.org/) first. You can then install PEG.js:
-
-    $ npm install pegjs
-
-Once installed, you can use the `pegjs` command to generate your parser from a grammar and use the JavaScript API from Node.js.
-
-### Browser
-
-[Download](http://pegjs.majda.cz/#download) the PEG.js library (regular or minified version) and include it in your web page or application using the `<script>` tag.
-
-Generating a Parser
--------------------
-
-PEG.js generates parser from a grammar that describes expected input and can specify what the parser returns (using semantic actions on matched parts of the input). Generated parser itself is a JavaScript object with a simple API.
-
-### Command Line
-
-To generate a parser from your grammar, use the `pegjs` command:
-
-    $ pegjs arithmetics.pegjs
-
-This writes parser source code into a file with the same name as the grammar file but with “.js” extension. You can also specify the output file explicitly:
-
-    $ pegjs arithmetics.pegjs arithmetics-parser.js
-
-If you omit both input and ouptut file, standard input and output are used.
-
-By default, the parser object is assigned to `module.exports`, which makes the output a Node.js module. You can assign it to another variable by passing a variable name using the `-e`/`--export-var` option. This may be helpful if you want to use the parser in browser environment.
-
-### JavaScript API
-
-In Node.js, require the PEG.js parser generator module:
-
-    var PEG = require("pegjs");
-
-In browser, include the PEG.js library in your web page or application using the `<script>` tag. The API will be available through the `PEG` global object.
-
-To generate a parser, call the `PEG.buildParser` method and pass your grammar as a parameter:
-
-    var parser = PEG.buildParser("start = ('a' / 'b')+");
-
-The method will return generated parser object or throw an exception if the grammar is invalid. The exception will contain `message` property with more details about the error.
-
-To get parser’s source code, call the `toSource` method on the parser.
-
-Using the Parser
-----------------
-
-Using the generated parser is simple — just call its `parse` method and pass an input string as a parameter. The method will return a parse result (the exact value depends on the grammar used to build the parser) or throw an exception if the input is invalid. The exception will contain `line`, `column` and `message` properties with more details about the error.
-
-    parser.parse("abba"); // returns ["a", "b", "b", "a"]
-
-    parser.parse("abcd"); // throws an exception
-
-You can also start parsing from a specific rule in the grammar. Just pass the rule name to the `parse` method as a second parameter.
-
-Grammar Syntax and Semantics
-----------------------------
-
-The grammar syntax is similar to JavaScript in that it is not line-oriented and ignores whitespace between tokens. You can also use JavaScript-style comments (`// ...` and `/* ... */`).
-
-Let's look at example grammar that recognizes simple arithmetic expressions like `2*(3+4)`. A parser generated from this grammar computes their values.
-
-    start
-      = additive
-
-    additive
-      = left:multiplicative "+" right:additive { return left + right; }
-      / multiplicative
-
-    multiplicative
-      = left:primary "*" right:multiplicative { return left * right; }
-      / primary
-
-    primary
-      = integer
-      / "(" additive:additive ")" { return additive; }
-
-    integer "integer"
-      = digits:[0-9]+ { return parseInt(digits.join(""), 10); }
-
-On the top level, the grammar consists of *rules* (in our example, there are five of them). Each rule has a *name* (e.g. `integer`) that identifies the rule, and a *parsing expression* (e.g. `digits:[0-9]+ { return parseInt(digits.join(""), 10); }`) that defines a pattern to match against the input text and possibly contains some JavaScript code that determines what happens when the pattern matches successfully. A rule can also contain *human-readable name* that is used in error messages (in our example, only the `integer` rule has a human-readable name). The parsing starts at the first rule, which is also called the *start rule*.
-
-A rule name must be a JavaScript identifier. It is followed by an equality sign (“=”) and a parsing expression. If the rule has a human-readable name, it is written as a JavaScript string between the name and separating equality sign. Rules need to be separated only by whitespace (their beginning is easily recognizable), but a semicolon (“;”) after the parsing expression is allowed.
-
-Rules can be preceded by an *initializer* — a piece of JavaScript code in curly braces (“{” and “}”). This code is executed before the generated parser starts parsing. All variables and functions defined in the initializer are accessible in rule actions and semantic predicates. Curly braces in the initializer code must be balanced.
-
-The parsing expressions of the rules are used to match the input text to the grammar. There are various types of expressions — matching characters or character classes, indicating optional parts and repetition, etc. Expressions can also contain references to other rules. See detailed description below.
-
-If an expression successfully matches a part of the text when running the generated parser, it produces a *match result*, which is a JavaScript value. For example:
-
-  * An expression matching a literal string produces a JavaScript string containing matched part of the input.
-  * An expression matching repeated occurrence of some subexpression produces a JavaScript array with all the matches.
-
-The match results propagate through the rules when the rule names are used in expressions, up to the start rule. The generated parser returns start rule's match result when parsing is successful.
-
-One special case of parser expression is a *parser action* — a piece of JavaScript code inside curly braces (“{” and “}”) that takes match results of some of the the preceding expressions and returns a JavaScript value. This value is considered match result of the preceding expression (in other words, the parser action is a match result transformer).
-
-In our arithmetics example, there are many parser actions. Consider the action in expression `digits:[0-9]+ { return parseInt(digits.join(""), 10); }`. It takes the match result of the expression [0-9]+, which is an array of strings containing digits, as its parameter. It joins the digits together to form a number and converts it to a JavaScript `number` object.
-
-### Parsing Expression Types
-
-There are several types of parsing expressions, some of them containing subexpressions and thus forming a recursive structure:
-
-#### "*literal*"<br>'*literal*'
-
-Match exact literal string and return it. The string syntax is the same as in JavaScript.
-
-#### .
-
-Match exactly one character and return it as a string.
-
-#### [*characters*]
-
-Match one character from a set and return it as a string. The characters in the list can be escaped in exactly the same way as in JavaScript string. The list of characters can also contain ranges (e.g. `[a-z]` means “all lowercase letters”). Preceding the characters with `^` inverts the matched set (e.g. `[^a-z]` means “all character but lowercase letters”).
-
-#### *rule*
-
-Match a parsing expression of a rule recursively and return its match result.
-
-#### ( *expression* )
-
-Match a subexpression and return its match result.
-
-#### *expression* \*
-
-Match zero or more repetitions of the expression and return their match results in an array. The matching is greedy, i.e. the parser tries to match the expression as many times as possible.
-
-#### *expression* +
-
-Match one or more repetitions of the expression and return their match results in an array. The matching is greedy, i.e. the parser tries to match the expression as many times as possible.
-
-#### *expression* ?
-
-Try to match the expression. If the match succeeds, return its match result, otherwise return an empty string.
-
-#### & *expression*
-
-Try to match the expression. If the match succeeds, just return an empty string and do not advance the parser position, otherwise consider the match failed.
-
-#### ! *expression*
-
-Try to match the expression and. If the match does not succeed, just return an empty string and do not advance the parser position, otherwise consider the match failed.
-
-#### & { *predicate* }
-
-The predicate is a piece of JavaScript code that is executed as if it was inside a function. It should return some JavaScript value using the `return` statement. If the returned value evaluates to `true` in boolean context, just return an empty string and do not advance the parser position; otherwise consider the match failed.
-
-The code inside the predicate has access to all variables and functions defined in the initializer at the beginning of the grammar. Curly braces in the predicate code must be balanced.
-
-#### ! { *predicate* }
-
-The predicate is a piece of JavaScript code that is executed as if it was inside a function. It should return some JavaScript value using the `return` statement. If the returned value evaluates to `false` in boolean context, just return an empty string and do not advance the parser position; otherwise consider the match failed.
-
-The code inside the predicate has access to all variables and functions defined in the initializer at the beginning of the grammar. Curly braces in the predicate code must be balanced.
-
-#### *label* : *expression*
-
-Match the expression and remember its match result under given lablel. The label must be a JavaScript identifier.
-
-Labeled expressions are useful together with actions, where saved match results can be accessed by action's JavaScript code.
-
-#### *expression<sub>1</sub>* *expression<sub>2</sub>* ... *expression<sub>n</sub>*
-
-Match a sequence of expressions and return their match results in an array.
-
-#### *expression* { *action* }
-
-Match the expression. If the match is successful, run the action, otherwise consider the match failed.
-
-The action is a piece of JavaScript code that is executed as if it was inside a function. It gets the match results of labeled expressions in preceding expression as its arguments. The action should return some JavaScript value using the `return` statement. This value is considered match result of the preceding expression. The action can return `null` to indicate a match failure.
-
-The code inside the action has access to all variables and functions defined in the initializer at the beginning of the grammar. Curly braces in the action code must be balanced.
-
-#### *expression<sub>1</sub>* / *expression<sub>2</sub>* / ... / *expression<sub>n</sub>*
-
-Try to match the first expression, if it does not succeed, try the second one, etc. Return the match result of the first successfully matched expression. If no expression matches, consider the match failed.
-
-Compatibility
--------------
-
-Both the parser generator and generated parsers should run well in the following environments:
-
-  * Node.js 0.4.4+
-  * IE 6+
-  * Firefox
-  * Chrome
-  * Safari
-  * Opera
-
-Development
------------
-
-  * [Project website](https://pegjs.majda.cz/)
-  * [Source code](https://github.com/dmajda/pegjs)
-  * [Issue tracker](https://github.com/dmajda/pegjs/issues)
-  * [Google Group](http://groups.google.com/group/pegjs)
-  * [Twitter](http://twitter.com/peg_js)
-
-PEG.js is developed by [David Majda](http://majda.cz/) ([@dmajda](http://twitter.com/dmajda)). You are welcome to contribute code. Unless your contribution is really trivial you should get in touch with me first — this can prevent wasted effort on both sides. You can send code both as patch or GitHub pull request.
-
-Note that PEG.js is still very much work in progress. There are no compatibility guarantees until version 1.0.
diff --git a/bin/node_modules/xcode/node_modules/pegjs/VERSION b/bin/node_modules/xcode/node_modules/pegjs/VERSION
deleted file mode 100644
index b616048..0000000
--- a/bin/node_modules/xcode/node_modules/pegjs/VERSION
+++ /dev/null
@@ -1 +0,0 @@
-0.6.2
diff --git a/bin/node_modules/xcode/node_modules/pegjs/bin/pegjs b/bin/node_modules/xcode/node_modules/pegjs/bin/pegjs
deleted file mode 100644
index c24246e..0000000
--- a/bin/node_modules/xcode/node_modules/pegjs/bin/pegjs
+++ /dev/null
@@ -1,142 +0,0 @@
-#!/usr/bin/env node
-
-var sys = require("sys");
-var fs  = require("fs");
-var PEG = require("../lib/peg");
-
-/* Helpers */
-
-function printVersion() {
-  sys.puts("PEG.js " + PEG.VERSION);
-}
-
-function printHelp() {
-  sys.puts("Usage: pegjs [options] [--] [<input_file>] [<output_file>]");
-  sys.puts("");
-  sys.puts("Generates a parser from the PEG grammar specified in the <input_file> and");
-  sys.puts("writes it to the <output_file>.");
-  sys.puts("");
-  sys.puts("If the <output_file> is omitted, its name is generated by changing the");
-  sys.puts("<input_file> extension to \".js\". If both <input_file> and <output_file> are");
-  sys.puts("omitted, standard input and output are used.");
-  sys.puts("");
-  sys.puts("Options:");
-  sys.puts("  -e, --export-var <variable>  name of the variable where the parser object");
-  sys.puts("                               will be stored (default: \"module.exports\")");
-  sys.puts("  -v, --version                print version information and exit");
-  sys.puts("  -h, --help                   print help and exit");
-}
-
-function exitSuccess() {
-  process.exit(0);
-}
-
-function exitFailure() {
-  process.exit(1);
-}
-
-function abort(message) {
-  sys.error(message);
-  exitFailure();
-}
-
-/* Arguments */
-
-var args = process.argv.slice(2); // Trim "node" and the script path.
-
-function isOption(arg) {
-  return /-.+/.test(arg);
-}
-
-function nextArg() {
-  args.shift();
-}
-
-/* Files */
-
-function readStream(inputStream, callback) {
-  var input = "";
-  inputStream.on("data", function(data) { input += data; });
-  inputStream.on("end", function() { callback(input); });
-}
-
-/* Main */
-
-/* This makes the generated parser a CommonJS module by default. */
-var exportVar = "module.exports";
-
-while (args.length > 0 && isOption(args[0])) {
-  switch (args[0]) {
-    case "-e":
-    case "--export-var":
-      nextArg();
-      if (args.length === 0) {
-        abort("Missing parameter of the -e/--export-var option.");
-      }
-      exportVar = args[0];
-      break;
-
-    case "-v":
-    case "--version":
-      printVersion();
-      exitSuccess();
-      break;
-
-    case "-h":
-    case "--help":
-      printHelp();
-      exitSuccess();
-      break;
-
-    case "--":
-      nextArg();
-      break;
-
-    default:
-      abort("Unknown option: " + args[0] + ".");
-  }
-  nextArg();
-}
-
-switch (args.length) {
-  case 0:
-    var inputStream = process.openStdin();
-    var outputStream = process.stdout;
-    break;
-
-  case 1:
-  case 2:
-    var inputFile = args[0];
-    var inputStream = fs.createReadStream(inputFile);
-    inputStream.on("error", function() {
-      abort("Can't read from file \"" + inputFile + "\".");
-    });
-
-    var outputFile = args.length == 1
-      ? args[0].replace(/\.[^.]*$/, ".js")
-      : args[1];
-    var outputStream = fs.createWriteStream(outputFile);
-    outputStream.on("error", function() {
-      abort("Can't write to file \"" + outputFile + "\".");
-    });
-
-    break;
-
-  default:
-    abort("Too many arguments.");
-}
-
-readStream(inputStream, function(input) {
-  try {
-    var parser = PEG.buildParser(input);
-  } catch (e) {
-    if (e.line !== undefined && e.column !== undefined) {
-      abort(e.line + ":" + e.column + ": " + e.message);
-    } else {
-      abort(e.message);
-    }
-  }
-
-  outputStream.write(exportVar + " = " + parser.toSource() + ";\n");
-  outputStream.end();
-});
diff --git a/bin/node_modules/xcode/node_modules/pegjs/examples/arithmetics.pegjs b/bin/node_modules/xcode/node_modules/pegjs/examples/arithmetics.pegjs
deleted file mode 100644
index 52fae2a..0000000
--- a/bin/node_modules/xcode/node_modules/pegjs/examples/arithmetics.pegjs
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * Classic example grammar, which recognizes simple arithmetic expressions like
- * "2*(3+4)". The parser generated from this grammar then computes their value.
- */
-
-start
-  = additive
-
-additive
-  = left:multiplicative "+" right:additive { return left + right; }
-  / multiplicative
-
-multiplicative
-  = left:primary "*" right:multiplicative { return left * right; }
-  / primary
-
-primary
-  = integer
-  / "(" additive:additive ")" { return additive; }
-
-integer "integer"
-  = digits:[0-9]+ { return parseInt(digits.join(""), 10); }
diff --git a/bin/node_modules/xcode/node_modules/pegjs/examples/css.pegjs b/bin/node_modules/xcode/node_modules/pegjs/examples/css.pegjs
deleted file mode 100644
index 5593d3c..0000000
--- a/bin/node_modules/xcode/node_modules/pegjs/examples/css.pegjs
+++ /dev/null
@@ -1,554 +0,0 @@
-/*
- * CSS parser based on the grammar described at http://www.w3.org/TR/CSS2/grammar.html.
- *
- * The parser builds a tree representing the parsed CSS, composed of basic
- * JavaScript values, arrays and objects (basically JSON). It can be easily
- * used by various CSS processors, transformers, etc.
- *
- * Note that the parser does not handle errors in CSS according to the
- * specification -- many errors which it should recover from (e.g. malformed
- * declarations or unexpected end of stylesheet) are simply fatal. This is a
- * result of straightforward rewrite of the CSS grammar to PEG.js and it should
- * be fixed sometimes.
- */
-
-/* ===== Syntactical Elements ===== */
-
-start
-  = stylesheet:stylesheet comment* { return stylesheet; }
-
-stylesheet
-  = charset:(CHARSET_SYM STRING ";")? (S / CDO / CDC)*
-    imports:(import (CDO S* / CDC S*)*)*
-    rules:((ruleset / media / page) (CDO S* / CDC S*)*)* {
-      var importsConverted = [];
-      for (var i = 0; i < imports.length; i++) {
-        importsConverted.push(imports[i][0]);
-      }
-
-      var rulesConverted = [];
-      for (i = 0; i < rules.length; i++) {
-        rulesConverted.push(rules[i][0]);
-      }
-
-      return {
-        type:    "stylesheet",
-        charset: charset !== "" ? charset[1] : null,
-        imports: importsConverted,
-        rules:   rulesConverted
-      };
-    }
-
-import
-  = IMPORT_SYM S* href:(STRING / URI) S* media:media_list? ";" S* {
-      return {
-        type:  "import_rule",
-        href:  href,
-        media: media !== "" ? media : []
-      };
-    }
-
-media
-  = MEDIA_SYM S* media:media_list "{" S* rules:ruleset* "}" S* {
-      return {
-        type:  "media_rule",
-        media: media,
-        rules: rules
-      };
-    }
-
-media_list
-  = head:medium tail:("," S* medium)* {
-      var result = [head];
-      for (var i = 0; i < tail.length; i++) {
-        result.push(tail[i][2]);
-      }
-      return result;
-    }
-
-medium
-  = ident:IDENT S* { return ident; }
-
-page
-  = PAGE_SYM S* qualifier:pseudo_page?
-    "{" S*
-    declarationsHead:declaration?
-    declarationsTail:(";" S* declaration?)*
-    "}" S* {
-      var declarations = declarationsHead !== "" ? [declarationsHead] : [];
-      for (var i = 0; i < declarationsTail.length; i++) {
-        if (declarationsTail[i][2] !== "") {
-          declarations.push(declarationsTail[i][2]);
-        }
-      }
-
-      return {
-        type:         "page_rule",
-        qualifier:    qualifier !== "" ? qualifier : null,
-        declarations: declarations
-      };
-    }
-
-pseudo_page
-  = ":" ident:IDENT S* { return ident; }
-
-operator
-  = "/" S* { return "/"; }
-  / "," S* { return ","; }
-
-combinator
-  = "+" S* { return "+"; }
-  / ">" S* { return ">"; }
-
-unary_operator
-  = "+"
-  / "-"
-
-property
-  = ident:IDENT S* { return ident; }
-
-ruleset
-  = selectorsHead:selector
-    selectorsTail:("," S* selector)*
-    "{" S*
-    declarationsHead:declaration?
-    declarationsTail:(";" S* declaration?)*
-    "}" S* {
-      var selectors = [selectorsHead];
-      for (var i = 0; i < selectorsTail.length; i++) {
-        selectors.push(selectorsTail[i][2]);
-      }
-
-      var declarations = declarationsHead !== "" ? [declarationsHead] : [];
-      for (i = 0; i < declarationsTail.length; i++) {
-        if (declarationsTail[i][2] !== "") {
-          declarations.push(declarationsTail[i][2]);
-        }
-      }
-
-      return {
-        type:         "ruleset",
-        selectors:    selectors,
-        declarations: declarations
-      };
-    }
-
-selector
-  = left:simple_selector S* combinator:combinator right:selector {
-      return {
-        type:       "selector",
-        combinator: combinator,
-        left:       left,
-        right:      right
-      };
-    }
-  / left:simple_selector S* right:selector {
-      return {
-        type:       "selector",
-        combinator: " ",
-        left:       left,
-        right:      right
-      };
-    }
-  / selector:simple_selector S* { return selector; }
-
-simple_selector
-  = element:element_name
-    qualifiers:(
-        id:HASH { return { type: "ID selector", id: id.substr(1) }; }
-      / class
-      / attrib
-      / pseudo
-    )* {
-      return {
-        type:       "simple_selector",
-        element:    element,
-        qualifiers: qualifiers
-      };
-    }
-  / qualifiers:(
-        id:HASH { return { type: "ID selector", id: id.substr(1) }; }
-      / class
-      / attrib
-      / pseudo
-    )+ {
-      return {
-        type:       "simple_selector",
-        element:    "*",
-        qualifiers: qualifiers
-      };
-    }
-
-class
-  = "." class_:IDENT { return { type: "class_selector", "class": class_ }; }
-
-element_name
-  = IDENT / '*'
-
-attrib
-  = "[" S*
-    attribute:IDENT S*
-    operatorAndValue:(
-      ('=' / INCLUDES / DASHMATCH) S*
-      (IDENT / STRING) S*
-    )?
-    "]" {
-      return {
-        type:      "attribute_selector",
-        attribute: attribute,
-        operator:  operatorAndValue !== "" ? operatorAndValue[0] : null,
-        value:     operatorAndValue !== "" ? operatorAndValue[2] : null
-      };
-    }
-
-pseudo
-  = ":"
-    value:(
-        name:FUNCTION S* params:(IDENT S*)? ")" {
-          return {
-            type:   "function",
-            name:   name,
-            params: params !== "" ? [params[0]] : []
-          };
-        }
-      / IDENT
-    ) {
-      /*
-       * The returned object has somewhat vague property names and values because
-       * the rule matches both pseudo-classes and pseudo-elements (they look the
-       * same at the syntactic level).
-       */
-      return {
-        type:  "pseudo_selector",
-        value: value
-      };
-    }
-
-declaration
-  = property:property ":" S* expression:expr important:prio? {
-      return {
-        type:       "declaration",
-        property:   property,
-        expression: expression,
-        important:  important !== "" ? true : false
-      };
-    }
-
-prio
-  = IMPORTANT_SYM S*
-
-expr
-  = head:term tail:(operator? term)* {
-      var result = head;
-      for (var i = 0; i < tail.length; i++) {
-        result = {
-          type:     "expression",
-          operator: tail[i][0],
-          left:     result,
-          right:    tail[i][1]
-        };
-      }
-      return result;
-    }
-
-term
-  = operator:unary_operator?
-    value:(
-        EMS S*
-      / EXS S*
-      / LENGTH S*
-      / ANGLE S*
-      / TIME S*
-      / FREQ S*
-      / PERCENTAGE S*
-      / NUMBER S*
-    )               { return { type: "value",  value: operator + value[0] }; }
-  / value:URI S*    { return { type: "uri",    value: value               }; }
-  / function
-  / hexcolor
-  / value:STRING S* { return { type: "string", value: value               }; }
-  / value:IDENT S*  { return { type: "ident",  value: value               }; }
-
-function
-  = name:FUNCTION S* params:expr ")" S* {
-      return {
-        type:   "function",
-        name:   name,
-        params: params
-      };
-    }
-
-hexcolor
-  = value:HASH S* { return { type: "hexcolor", value: value}; }
-
-/* ===== Lexical Elements ===== */
-
-/* Macros */
-
-h
-  = [0-9a-fA-F]
-
-nonascii
-  = [\x80-\xFF]
-
-unicode
-  = "\\" h1:h h2:h? h3:h? h4:h? h5:h? h6:h? ("\r\n" / [ \t\r\n\f])? {
-      return String.fromCharCode(parseInt("0x" + h1 + h2 + h3 + h4 + h5 + h6));
-    }
-
-escape
-  = unicode
-  / "\\" char_:[^\r\n\f0-9a-fA-F] { return char_; }
-
-nmstart
-  = [_a-zA-Z]
-  / nonascii
-  / escape
-
-nmchar
-  = [_a-zA-Z0-9-]
-  / nonascii
-  / escape
-
-integer
-  = digits:[0-9]+ { return parseInt(digits.join("")); }
-
-float
-  = before:[0-9]* "." after:[0-9]+ {
-      return parseFloat(before.join("") + "." + after.join(""));
-    }
-
-string1
-  = '"' chars:([^\n\r\f\\"] / "\\" nl:nl { return nl } / escape)* '"' {
-      return chars.join("");
-    }
-
-string2
-  = "'" chars:([^\n\r\f\\'] / "\\" nl:nl { return nl } / escape)* "'" {
-      return chars.join("");
-    }
-
-comment
-  = "/*" [^*]* "*"+ ([^/*] [^*]* "*"+)* "/"
-
-ident
-  = dash:"-"? nmstart:nmstart nmchars:nmchar* {
-      return dash + nmstart + nmchars.join("");
-    }
-
-name
-  = nmchars:nmchar+ { return nmchars.join(""); }
-
-num
-  = float
-  / integer
-
-string
-  = string1
-  / string2
-
-url
-  = chars:([!#$%&*-~] / nonascii / escape)* { return chars.join(""); }
-
-s
-  = [ \t\r\n\f]+
-
-w
-  = s?
-
-nl
-  = "\n"
-  / "\r\n"
-  / "\r"
-  / "\f"
-
-A
-  = [aA]
-  / "\\" "0"? "0"? "0"? "0"? "41" ("\r\n" / [ \t\r\n\f])? { return "A"; }
-  / "\\" "0"? "0"? "0"? "0"? "61" ("\r\n" / [ \t\r\n\f])? { return "a"; }
-
-C
-  = [cC]
-  / "\\" "0"? "0"? "0"? "0"? "43" ("\r\n" / [ \t\r\n\f])? { return "C"; }
-  / "\\" "0"? "0"? "0"? "0"? "63" ("\r\n" / [ \t\r\n\f])? { return "c"; }
-
-D
-  = [dD]
-  / "\\" "0"? "0"? "0"? "0"? "44" ("\r\n" / [ \t\r\n\f])? { return "D"; }
-  / "\\" "0"? "0"? "0"? "0"? "64" ("\r\n" / [ \t\r\n\f])? { return "d"; }
-
-E
-  = [eE]
-  / "\\" "0"? "0"? "0"? "0"? "45" ("\r\n" / [ \t\r\n\f])? { return "E"; }
-  / "\\" "0"? "0"? "0"? "0"? "65" ("\r\n" / [ \t\r\n\f])? { return "e"; }
-
-G
-  = [gG]
-  / "\\" "0"? "0"? "0"? "0"? "47" ("\r\n" / [ \t\r\n\f])? { return "G"; }
-  / "\\" "0"? "0"? "0"? "0"? "67" ("\r\n" / [ \t\r\n\f])? { return "g"; }
-  / "\\" char_:[gG] { return char_; }
-
-H
-  = h:[hH]
-  / "\\" "0"? "0"? "0"? "0"? "48" ("\r\n" / [ \t\r\n\f])? { return "H"; }
-  / "\\" "0"? "0"? "0"? "0"? "68" ("\r\n" / [ \t\r\n\f])? { return "h"; }
-  / "\\" char_:[hH] { return char_; }
-
-I
-  = i:[iI]
-  / "\\" "0"? "0"? "0"? "0"? "49" ("\r\n" / [ \t\r\n\f])? { return "I"; }
-  / "\\" "0"? "0"? "0"? "0"? "69" ("\r\n" / [ \t\r\n\f])? { return "i"; }
-  / "\\" char_:[iI] { return char_; }
-
-K
-  = [kK]
-  / "\\" "0"? "0"? "0"? "0"? "4" [bB] ("\r\n" / [ \t\r\n\f])? { return "K"; }
-  / "\\" "0"? "0"? "0"? "0"? "6" [bB] ("\r\n" / [ \t\r\n\f])? { return "k"; }
-  / "\\" char_:[kK] { return char_; }
-
-L
-  = [lL]
-  / "\\" "0"? "0"? "0"? "0"? "4" [cC] ("\r\n" / [ \t\r\n\f])? { return "L"; }
-  / "\\" "0"? "0"? "0"? "0"? "6" [cC] ("\r\n" / [ \t\r\n\f])? { return "l"; }
-  / "\\" char_:[lL] { return char_; }
-
-M
-  = [mM]
-  / "\\" "0"? "0"? "0"? "0"? "4" [dD] ("\r\n" / [ \t\r\n\f])? { return "M"; }
-  / "\\" "0"? "0"? "0"? "0"? "6" [dD] ("\r\n" / [ \t\r\n\f])? { return "m"; }
-  / "\\" char_:[mM] { return char_; }
-
-N
-  = [nN]
-  / "\\" "0"? "0"? "0"? "0"? "4" [eE] ("\r\n" / [ \t\r\n\f])? { return "N"; }
-  / "\\" "0"? "0"? "0"? "0"? "6" [eE] ("\r\n" / [ \t\r\n\f])? { return "n"; }
-  / "\\" char_:[nN] { return char_; }
-
-O
-  = [oO]
-  / "\\" "0"? "0"? "0"? "0"? "4" [fF] ("\r\n" / [ \t\r\n\f])? { return "O"; }
-  / "\\" "0"? "0"? "0"? "0"? "6" [fF] ("\r\n" / [ \t\r\n\f])? { return "o"; }
-  / "\\" char_:[oO] { return char_; }
-
-P
-  = [pP]
-  / "\\" "0"? "0"? "0"? "0"? "50" ("\r\n" / [ \t\r\n\f])? { return "P"; }
-  / "\\" "0"? "0"? "0"? "0"? "70" ("\r\n" / [ \t\r\n\f])? { return "p"; }
-  / "\\" char_:[pP] { return char_; }
-
-R
-  = [rR]
-  / "\\" "0"? "0"? "0"? "0"? "52" ("\r\n" / [ \t\r\n\f])? { return "R"; }
-  / "\\" "0"? "0"? "0"? "0"? "72" ("\r\n" / [ \t\r\n\f])? { return "r"; }
-  / "\\" char_:[rR] { return char_; }
-
-S_
-  = [sS]
-  / "\\" "0"? "0"? "0"? "0"? "53" ("\r\n" / [ \t\r\n\f])? { return "S"; }
-  / "\\" "0"? "0"? "0"? "0"? "73" ("\r\n" / [ \t\r\n\f])? { return "s"; }
-  / "\\" char_:[sS] { return char_; }
-
-T
-  = [tT]
-  / "\\" "0"? "0"? "0"? "0"? "54" ("\r\n" / [ \t\r\n\f])? { return "T"; }
-  / "\\" "0"? "0"? "0"? "0"? "74" ("\r\n" / [ \t\r\n\f])? { return "t"; }
-  / "\\" char_:[tT] { return char_; }
-
-U
-  = [uU]
-  / "\\" "0"? "0"? "0"? "0"? "55" ("\r\n" / [ \t\r\n\f])? { return "U"; }
-  / "\\" "0"? "0"? "0"? "0"? "75" ("\r\n" / [ \t\r\n\f])? { return "u"; }
-  / "\\" char_:[uU] { return char_; }
-
-X
-  = [xX]
-  / "\\" "0"? "0"? "0"? "0"? "58" ("\r\n" / [ \t\r\n\f])? { return "X"; }
-  / "\\" "0"? "0"? "0"? "0"? "78" ("\r\n" / [ \t\r\n\f])? { return "x"; }
-  / "\\" char_:[xX] { return char_; }
-
-Z
-  = [zZ]
-  / "\\" "0"? "0"? "0"? "0"? "5" [aA] ("\r\n" / [ \t\r\n\f])? { return "Z"; }
-  / "\\" "0"? "0"? "0"? "0"? "7" [aA] ("\r\n" / [ \t\r\n\f])? { return "z"; }
-  / "\\" char_:[zZ] { return char_; }
-
-/* Tokens */
-
-S "whitespace"
-  = comment* s
-
-CDO "<!--"
-  = comment* "<!--"
-
-CDC "-->"
-  = comment* "-->"
-
-INCLUDES "~="
-  = comment* "~="
-
-DASHMATCH "|="
-  = comment* "|="
-
-STRING "string"
-  = comment* string:string { return string; }
-
-IDENT "identifier"
-  = comment* ident:ident { return ident; }
-
-HASH "hash"
-  = comment* "#" name:name { return "#" + name; }
-
-IMPORT_SYM "@import"
-  = comment* "@" I M P O R T
-
-PAGE_SYM "@page"
-  = comment* "@" P A G E
-
-MEDIA_SYM "@media"
-  = comment* "@" M E D I A
-
-CHARSET_SYM "@charset"
-  = comment* "@charset "
-
-/* Note: We replace "w" with "s" here to avoid infinite recursion. */
-IMPORTANT_SYM "!important"
-  = comment* "!" (s / comment)* I M P O R T A N T { return "!important"; }
-
-EMS "length"
-  = comment* num:num e:E m:M { return num + e + m; }
-
-EXS "length"
-  = comment* num:num e:E x:X { return num + e + x; }
-
-LENGTH "length"
-  = comment* num:num unit:(P X / C M / M M / I N / P T / P C) {
-      return num + unit.join("");
-    }
-
-ANGLE "angle"
-  = comment* num:num unit:(D E G / R A D / G R A D) {
-      return num + unit.join("");
-    }
-
-TIME "time"
-  = comment* num:num unit:(m:M s:S_ { return m + s; } / S_) {
-      return num + unit;
-    }
-
-FREQ "frequency"
-  = comment* num:num unit:(H Z / K H Z) { return num + unit.join(""); }
-
-DIMENSION "dimension"
-  = comment* num:num unit:ident { return num + unit; }
-
-PERCENTAGE "percentage"
-  = comment* num:num "%" { return num + "%"; }
-
-NUMBER "number"
-  = comment* num:num { return num; }
-
-URI "uri"
-  = comment* U R L "(" w value:(string / url) w ")" { return value; }
-
-FUNCTION "function"
-  = comment* name:ident "(" { return name; }
diff --git a/bin/node_modules/xcode/node_modules/pegjs/examples/javascript.pegjs b/bin/node_modules/xcode/node_modules/pegjs/examples/javascript.pegjs
deleted file mode 100644
index 229a582..0000000
--- a/bin/node_modules/xcode/node_modules/pegjs/examples/javascript.pegjs
+++ /dev/null
@@ -1,1530 +0,0 @@
-/*
- * JavaScript parser based on the grammar described in ECMA-262, 5th ed.
- * (http://www.ecma-international.org/publications/standards/Ecma-262.htm)
- *
- * The parser builds a tree representing the parsed JavaScript, composed of
- * basic JavaScript values, arrays and objects (basically JSON). It can be
- * easily used by various JavaScript processors, transformers, etc.
- *
- * Intentional deviations from ECMA-262, 5th ed.:
- *
- *   * The specification does not consider |FunctionDeclaration| and
- *     |FunctionExpression| as statements, but JavaScript implementations do and
- *     so are we. This syntax is actually used in the wild (e.g. by jQuery).
- *
- * Limitations:
- *
- *   * Non-BMP characters are completely ignored to avoid surrogate
- *     pair handling (JavaScript strings in most implementations are AFAIK
- *     encoded in UTF-16, though this is not required by the specification --
- *     see ECMA-262, 5th ed., 4.3.16).
- *
- *   * One can create identifiers containing illegal characters using Unicode
- *     escape sequences. For example, "abcd\u0020efgh" is not a valid
- *     identifier, but it is accepted by the parser.
- *
- *   * Strict mode is not recognized. That means that within strict mode code,
- *     "implements", "interface", "let", "package", "private", "protected",
- *     "public", "static" and "yield" can be used as names. Many other
- *     restrictions and exceptions from ECMA-262, 5th ed., Annex C are also not
- *     applied.
- *
- *   * The parser does not handle regular expression literal syntax (basically,
- *     it treats anything between "/"'s as an opaque character sequence and also
- *     does not recognize invalid flags properly).
- *
- *   * The parser doesn't report any early errors except syntax errors (see
- *     ECMA-262, 5th ed., 16).
- *
- * At least some of these limitations should be fixed sometimes.
- *
- * Many thanks to inimino (http://inimino.org/~inimino/blog/) for his ES5 PEG
- * (http://boshi.inimino.org/3box/asof/1270029991384/PEG/ECMAScript_unified.peg),
- * which helped me to solve some problems (such as automatic semicolon
- * insertion) and also served to double check that I converted the original
- * grammar correctly.
- */
-
-start
-  = __ program:Program __ { return program; }
-
-/* ===== A.1 Lexical Grammar ===== */
-
-SourceCharacter
-  = .
-
-WhiteSpace "whitespace"
-  = [\t\v\f \u00A0\uFEFF]
-  / Zs
-
-LineTerminator
-  = [\n\r\u2028\u2029]
-
-LineTerminatorSequence "end of line"
-  = "\n"
-  / "\r\n"
-  / "\r"
-  / "\u2028" // line spearator
-  / "\u2029" // paragraph separator
-
-Comment "comment"
-  = MultiLineComment
-  / SingleLineComment
-
-MultiLineComment
-  = "/*" (!"*/" SourceCharacter)* "*/"
-
-MultiLineCommentNoLineTerminator
-  = "/*" (!("*/" / LineTerminator) SourceCharacter)* "*/"
-
-SingleLineComment
-  = "//" (!LineTerminator SourceCharacter)*
-
-Identifier "identifier"
-  = !ReservedWord name:IdentifierName { return name; }
-
-IdentifierName "identifier"
-  = start:IdentifierStart parts:IdentifierPart* {
-      return start + parts.join("");
-    }
-
-IdentifierStart
-  = UnicodeLetter
-  / "$"
-  / "_"
-  / "\\" sequence:UnicodeEscapeSequence { return sequence; }
-
-IdentifierPart
-  = IdentifierStart
-  / UnicodeCombiningMark
-  / UnicodeDigit
-  / UnicodeConnectorPunctuation
-  / "\u200C" { return "\u200C"; } // zero-width non-joiner
-  / "\u200D" { return "\u200D"; } // zero-width joiner
-
-UnicodeLetter
-  = Lu
-  / Ll
-  / Lt
-  / Lm
-  / Lo
-  / Nl
-
-UnicodeCombiningMark
-  = Mn
-  / Mc
-
-UnicodeDigit
-  = Nd
-
-UnicodeConnectorPunctuation
-  = Pc
-
-ReservedWord
-  = Keyword
-  / FutureReservedWord
-  / NullLiteral
-  / BooleanLiteral
-
-Keyword
-  = (
-        "break"
-      / "case"
-      / "catch"
-      / "continue"
-      / "debugger"
-      / "default"
-      / "delete"
-      / "do"
-      / "else"
-      / "finally"
-      / "for"
-      / "function"
-      / "if"
-      / "instanceof"
-      / "in"
-      / "new"
-      / "return"
-      / "switch"
-      / "this"
-      / "throw"
-      / "try"
-      / "typeof"
-      / "var"
-      / "void"
-      / "while"
-      / "with"
-    )
-    !IdentifierPart
-
-FutureReservedWord
-  = (
-        "class"
-      / "const"
-      / "enum"
-      / "export"
-      / "extends"
-      / "import"
-      / "super"
-    )
-    !IdentifierPart
-
-/*
- * This rule contains an error in the specification: |RegularExpressionLiteral|
- * is missing.
- */
-Literal
-  = NullLiteral
-  / BooleanLiteral
-  / value:NumericLiteral {
-      return {
-        type:  "NumericLiteral",
-        value: value
-      };
-    }
-  / value:StringLiteral {
-      return {
-        type:  "StringLiteral",
-        value: value
-      };
-    }
-  / RegularExpressionLiteral
-
-NullLiteral
-  = NullToken { return { type: "NullLiteral" }; }
-
-BooleanLiteral
-  = TrueToken  { return { type: "BooleanLiteral", value: true  }; }
-  / FalseToken { return { type: "BooleanLiteral", value: false }; }
-
-NumericLiteral "number"
-  = literal:(HexIntegerLiteral / DecimalLiteral) !IdentifierStart {
-      return literal;
-    }
-
-DecimalLiteral
-  = before:DecimalIntegerLiteral
-    "."
-    after:DecimalDigits?
-    exponent:ExponentPart? {
-      return parseFloat(before + "." + after + exponent);
-    }
-  / "." after:DecimalDigits exponent:ExponentPart? {
-      return parseFloat("." + after + exponent);
-    }
-  / before:DecimalIntegerLiteral exponent:ExponentPart? {
-      return parseFloat(before + exponent);
-    }
-
-DecimalIntegerLiteral
-  = "0" / digit:NonZeroDigit digits:DecimalDigits? { return digit + digits; }
-
-DecimalDigits
-  = digits:DecimalDigit+ { return digits.join(""); }
-
-DecimalDigit
-  = [0-9]
-
-NonZeroDigit
-  = [1-9]
-
-ExponentPart
-  = indicator:ExponentIndicator integer:SignedInteger {
-      return indicator + integer;
-    }
-
-ExponentIndicator
-  = [eE]
-
-SignedInteger
-  = sign:[-+]? digits:DecimalDigits { return sign + digits; }
-
-HexIntegerLiteral
-  = "0" [xX] digits:HexDigit+ { return parseInt("0x" + digits.join("")); }
-
-HexDigit
-  = [0-9a-fA-F]
-
-StringLiteral "string"
-  = parts:('"' DoubleStringCharacters? '"' / "'" SingleStringCharacters? "'") {
-      return parts[1];
-    }
-
-DoubleStringCharacters
-  = chars:DoubleStringCharacter+ { return chars.join(""); }
-
-SingleStringCharacters
-  = chars:SingleStringCharacter+ { return chars.join(""); }
-
-DoubleStringCharacter
-  = !('"' / "\\" / LineTerminator) char_:SourceCharacter { return char_;     }
-  / "\\" sequence:EscapeSequence                         { return sequence;  }
-  / LineContinuation
-
-SingleStringCharacter
-  = !("'" / "\\" / LineTerminator) char_:SourceCharacter { return char_;     }
-  / "\\" sequence:EscapeSequence                         { return sequence;  }
-  / LineContinuation
-
-LineContinuation
-  = "\\" sequence:LineTerminatorSequence { return sequence; }
-
-EscapeSequence
-  = CharacterEscapeSequence
-  / "0" !DecimalDigit { return "\0"; }
-  / HexEscapeSequence
-  / UnicodeEscapeSequence
-
-CharacterEscapeSequence
-  = SingleEscapeCharacter
-  / NonEscapeCharacter
-
-SingleEscapeCharacter
-  = char_:['"\\bfnrtv] {
-      return char_
-        .replace("b", "\b")
-        .replace("f", "\f")
-        .replace("n", "\n")
-        .replace("r", "\r")
-        .replace("t", "\t")
-        .replace("v", "\x0B") // IE does not recognize "\v".
-    }
-
-NonEscapeCharacter
-  = (!EscapeCharacter / LineTerminator) char_:SourceCharacter { return char_; }
-
-EscapeCharacter
-  = SingleEscapeCharacter
-  / DecimalDigit
-  / "x"
-  / "u"
-
-HexEscapeSequence
-  = "x" h1:HexDigit h2:HexDigit {
-      return String.fromCharCode(parseInt("0x" + h1 + h2));
-    }
-
-UnicodeEscapeSequence
-  = "u" h1:HexDigit h2:HexDigit h3:HexDigit h4:HexDigit {
-      return String.fromCharCode(parseInt("0x" + h1 + h2 + h3 + h4));
-    }
-
-RegularExpressionLiteral "regular expression"
-  = "/" body:RegularExpressionBody "/" flags:RegularExpressionFlags {
-      return {
-        type:  "RegularExpressionLiteral",
-        body:  body,
-        flags: flags
-      };
-    }
-
-RegularExpressionBody
-  = char_:RegularExpressionFirstChar chars:RegularExpressionChars {
-      return char_ + chars;
-    }
-
-RegularExpressionChars
-  = chars:RegularExpressionChar* { return chars.join(""); }
-
-RegularExpressionFirstChar
-  = ![*\\/[] char_:RegularExpressionNonTerminator { return char_; }
-  / RegularExpressionBackslashSequence
-  / RegularExpressionClass
-
-RegularExpressionChar
-  = ![\\/[] char_:RegularExpressionNonTerminator { return char_; }
-  / RegularExpressionBackslashSequence
-  / RegularExpressionClass
-
-/*
- * This rule contains an error in the specification: "NonTerminator" instead of
- * "RegularExpressionNonTerminator".
- */
-RegularExpressionBackslashSequence
-  = "\\" char_:RegularExpressionNonTerminator { return "\\" + char_; }
-
-RegularExpressionNonTerminator
-  = !LineTerminator char_:SourceCharacter { return char_; }
-
-RegularExpressionClass
-  = "[" chars:RegularExpressionClassChars "]" { return "[" + chars + "]"; }
-
-RegularExpressionClassChars
-  = chars:RegularExpressionClassChar* { return chars.join(""); }
-
-RegularExpressionClassChar
-  = ![\]\\] char_:RegularExpressionNonTerminator { return char_; }
-  / RegularExpressionBackslashSequence
-
-RegularExpressionFlags
-  = parts:IdentifierPart* { return parts.join(""); }
-
-/* Tokens */
-
-BreakToken      = "break"            !IdentifierPart
-CaseToken       = "case"             !IdentifierPart
-CatchToken      = "catch"            !IdentifierPart
-ContinueToken   = "continue"         !IdentifierPart
-DebuggerToken   = "debugger"         !IdentifierPart
-DefaultToken    = "default"          !IdentifierPart
-DeleteToken     = "delete"           !IdentifierPart { return "delete"; }
-DoToken         = "do"               !IdentifierPart
-ElseToken       = "else"             !IdentifierPart
-FalseToken      = "false"            !IdentifierPart
-FinallyToken    = "finally"          !IdentifierPart
-ForToken        = "for"              !IdentifierPart
-FunctionToken   = "function"         !IdentifierPart
-GetToken        = "get"              !IdentifierPart
-IfToken         = "if"               !IdentifierPart
-InstanceofToken = "instanceof"       !IdentifierPart { return "instanceof"; }
-InToken         = "in"               !IdentifierPart { return "in"; }
-NewToken        = "new"              !IdentifierPart
-NullToken       = "null"             !IdentifierPart
-ReturnToken     = "return"           !IdentifierPart
-SetToken        = "set"              !IdentifierPart
-SwitchToken     = "switch"           !IdentifierPart
-ThisToken       = "this"             !IdentifierPart
-ThrowToken      = "throw"            !IdentifierPart
-TrueToken       = "true"             !IdentifierPart
-TryToken        = "try"              !IdentifierPart
-TypeofToken     = "typeof"           !IdentifierPart { return "typeof"; }
-VarToken        = "var"              !IdentifierPart
-VoidToken       = "void"             !IdentifierPart { return "void"; }
-WhileToken      = "while"            !IdentifierPart
-WithToken       = "with"             !IdentifierPart
-
-/*
- * Unicode Character Categories
- *
- * Source: http://www.fileformat.info/info/unicode/category/index.htm
- */
-
-/*
- * Non-BMP characters are completely ignored to avoid surrogate pair handling
- * (JavaScript strings in most implementations are encoded in UTF-16, though
- * this is not required by the specification -- see ECMA-262, 5th ed., 4.3.16).
- *
- * If you ever need to correctly recognize all the characters, please feel free
- * to implement that and send a patch.
- */
-
-// Letter, Lowercase
-Ll = [\u0061\u0062\u0063\u0064\u0065\u0066\u0067\u0068\u0069\u006A\u006B\u006C\u006D\u006E\u006F\u0070\u0071\u0072\u0073\u0074\u0075\u0076\u0077\u0078\u0079\u007A\u00AA\u00B5\u00BA\u00DF\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u00F0\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u00FE\u00FF\u0101\u0103\u0105\u0107\u0109\u010B\u010D\u010F\u0111\u0113\u0115\u0117\u0119\u011B\u011D\u011F\u0121\u0123\u0125\u0127\u0129\u012B\u012D\u012F\u0131\u0133\u0135\u0137\u0138\u013A\u013C\u013E\u0140\u0142\u0144\u0146\u0148\u0149\u014B\u014D\u014F\u0151\u0153\u0155\u0157\u0159\u015B\u015D\u015F\u0161\u0163\u0165\u0167\u0169\u016B\u016D\u016F\u0171\u0173\u0175\u0177\u017A\u017C\u017E\u017F\u0180\u0183\u0185\u0188\u018C\u018D\u0192\u0195\u0199\u019A\u019B\u019E\u01A1\u01A3\u01A5\u01A8\u01AA\u01AB\u01AD\u01B0\u01B4\u01B6\u01B9\u01BA\u01BD\u01BE\u01BF\u01C6\u01C9\u01CC\u01CE\u01D0\u01D2\u01D4\u01D6\u01D8\u01DA\u01DC\u01DD\u01DF\u01E1\u01E3\u01E5\u01E7\u01E9\u01EB\u01ED\u01EF\u01F0\u01F3\u01F5\u01F9\u01FB\u01FD\u01FF\u0201\u0203\u0205\u0207\u0209\u020B\u020D\u020F\u0211\u0213\u0215\u0217\u0219\u021B\u021D\u021F\u0221\u0223\u0225\u0227\u0229\u022B\u022D\u022F\u0231\u0233\u0234\u0235\u0236\u0237\u0238\u0239\u023C\u023F\u0240\u0242\u0247\u0249\u024B\u024D\u024F\u0250\u0251\u0252\u0253\u0254\u0255\u0256\u0257\u0258\u0259\u025A\u025B\u025C\u025D\u025E\u025F\u0260\u0261\u0262\u0263\u0264\u0265\u0266\u0267\u0268\u0269\u026A\u026B\u026C\u026D\u026E\u026F\u0270\u0271\u0272\u0273\u0274\u0275\u0276\u0277\u0278\u0279\u027A\u027B\u027C\u027D\u027E\u027F\u0280\u0281\u0282\u0283\u0284\u0285\u0286\u0287\u0288\u0289\u028A\u028B\u028C\u028D\u028E\u028F\u0290\u0291\u0292\u0293\u0295\u0296\u0297\u0298\u0299\u029A\u029B\u029C\u029D\u029E\u029F\u02A0\u02A1\u02A2\u02A3\u02A4\u02A5\u02A6\u02A7\u02A8\u02A9\u02AA\u02AB\u02AC\u02AD\u02AE\u02AF\u0371\u0373\u0377\u037B\u037C\u037D\u0390\u03AC\u03AD\u03AE\u03AF\u03B0\u03B1\u03B2\u03B3\u03B4\u03B5\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1\u03C2\u03C3\u03C4\u03C5\u03C6\u03C7\u03C8\u03C9\u03CA\u03CB\u03CC\u03CD\u03CE\u03D0\u03D1\u03D5\u03D6\u03D7\u03D9\u03DB\u03DD\u03DF\u03E1\u03E3\u03E5\u03E7\u03E9\u03EB\u03ED\u03EF\u03F0\u03F1\u03F2\u03F3\u03F5\u03F8\u03FB\u03FC\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u0450\u0451\u0452\u0453\u0454\u0455\u0456\u0457\u0458\u0459\u045A\u045B\u045C\u045D\u045E\u045F\u0461\u0463\u0465\u0467\u0469\u046B\u046D\u046F\u0471\u0473\u0475\u0477\u0479\u047B\u047D\u047F\u0481\u048B\u048D\u048F\u0491\u0493\u0495\u0497\u0499\u049B\u049D\u049F\u04A1\u04A3\u04A5\u04A7\u04A9\u04AB\u04AD\u04AF\u04B1\u04B3\u04B5\u04B7\u04B9\u04BB\u04BD\u04BF\u04C2\u04C4\u04C6\u04C8\u04CA\u04CC\u04CE\u04CF\u04D1\u04D3\u04D5\u04D7\u04D9\u04DB\u04DD\u04DF\u04E1\u04E3\u04E5\u04E7\u04E9\u04EB\u04ED\u04EF\u04F1\u04F3\u04F5\u04F7\u04F9\u04FB\u04FD\u04FF\u0501\u0503\u0505\u0507\u0509\u050B\u050D\u050F\u0511\u0513\u0515\u0517\u0519\u051B\u051D\u051F\u0521\u0523\u0561\u0562\u0563\u0564\u0565\u0566\u0567\u0568\u0569\u056A\u056B\u056C\u056D\u056E\u056F\u0570\u0571\u0572\u0573\u0574\u0575\u0576\u0577\u0578\u0579\u057A\u057B\u057C\u057D\u057E\u057F\u0580\u0581\u0582\u0583\u0584\u0585\u0586\u0587\u1D00\u1D01\u1D02\u1D03\u1D04\u1D05\u1D06\u1D07\u1D08\u1D09\u1D0A\u1D0B\u1D0C\u1D0D\u1D0E\u1D0F\u1D10\u1D11\u1D12\u1D13\u1D14\u1D15\u1D16\u1D17\u1D18\u1D19\u1D1A\u1D1B\u1D1C\u1D1D\u1D1E\u1D1F\u1D20\u1D21\u1D22\u1D23\u1D24\u1D25\u1D26\u1D27\u1D28\u1D29\u1D2A\u1D2B\u1D62\u1D63\u1D64\u1D65\u1D66\u1D67\u1D68\u1D69\u1D6A\u1D6B\u1D6C\u1D6D\u1D6E\u1D6F\u1D70\u1D71\u1D72\u1D73\u1D74\u1D75\u1D76\u1D77\u1D79\u1D7A\u1D7B\u1D7C\u1D7D\u1D7E\u1D7F\u1D80\u1D81\u1D82\u1D83\u1D84\u1D85\u1D86\u1D87\u1D88\u1D89\u1D8A\u1D8B\u1D8C\u1D8D\u1D8E\u1D8F\u1D90\u1D91\u1D92\u1D93\u1D94\u1D95\u1D96\u1D97\u1D98\u1D99\u1D9A\u1E01\u1E03\u1E05\u1E07\u1E09\u1E0B\u1E0D\u1E0F\u1E11\u1E13\u1E15\u1E17\u1E19\u1E1B\u1E1D\u1E1F\u1E21\u1E23\u1E25\u1E27\u1E29\u1E2B\u1E2D\u1E2F\u1E31\u1E33\u1E35\u1E37\u1E39\u1E3B\u1E3D\u1E3F\u1E41\u1E43\u1E45\u1E47\u1E49\u1E4B\u1E4D\u1E4F\u1E51\u1E53\u1E55\u1E57\u1E59\u1E5B\u1E5D\u1E5F\u1E61\u1E63\u1E65\u1E67\u1E69\u1E6B\u1E6D\u1E6F\u1E71\u1E73\u1E75\u1E77\u1E79\u1E7B\u1E7D\u1E7F\u1E81\u1E83\u1E85\u1E87\u1E89\u1E8B\u1E8D\u1E8F\u1E91\u1E93\u1E95\u1E96\u1E97\u1E98\u1E99\u1E9A\u1E9B\u1E9C\u1E9D\u1E9F\u1EA1\u1EA3\u1EA5\u1EA7\u1EA9\u1EAB\u1EAD\u1EAF\u1EB1\u1EB3\u1EB5\u1EB7\u1EB9\u1EBB\u1EBD\u1EBF\u1EC1\u1EC3\u1EC5\u1EC7\u1EC9\u1ECB\u1ECD\u1ECF\u1ED1\u1ED3\u1ED5\u1ED7\u1ED9\u1EDB\u1EDD\u1EDF\u1EE1\u1EE3\u1EE5\u1EE7\u1EE9\u1EEB\u1EED\u1EEF\u1EF1\u1EF3\u1EF5\u1EF7\u1EF9\u1EFB\u1EFD\u1EFF\u1F00\u1F01\u1F02\u1F03\u1F04\u1F05\u1F06\u1F07\u1F10\u1F11\u1F12\u1F13\u1F14\u1F15\u1F20\u1F21\u1F22\u1F23\u1F24\u1F25\u1F26\u1F27\u1F30\u1F31\u1F32\u1F33\u1F34\u1F35\u1F36\u1F37\u1F40\u1F41\u1F42\u1F43\u1F44\u1F45\u1F50\u1F51\u1F52\u1F53\u1F54\u1F55\u1F56\u1F57\u1F60\u1F61\u1F62\u1F63\u1F64\u1F65\u1F66\u1F67\u1F70\u1F71\u1F72\u1F73\u1F74\u1F75\u1F76\u1F77\u1F78\u1F79\u1F7A\u1F7B\u1F7C\u1F7D\u1F80\u1F81\u1F82\u1F83\u1F84\u1F85\u1F86\u1F87\u1F90\u1F91\u1F92\u1F93\u1F94\u1F95\u1F96\u1F97\u1FA0\u1FA1\u1FA2\u1FA3\u1FA4\u1FA5\u1FA6\u1FA7\u1FB0\u1FB1\u1FB2\u1FB3\u1FB4\u1FB6\u1FB7\u1FBE\u1FC2\u1FC3\u1FC4\u1FC6\u1FC7\u1FD0\u1FD1\u1FD2\u1FD3\u1FD6\u1FD7\u1FE0\u1FE1\u1FE2\u1FE3\u1FE4\u1FE5\u1FE6\u1FE7\u1FF2\u1FF3\u1FF4\u1FF6\u1FF7\u2071\u207F\u210A\u210E\u210F\u2113\u212F\u2134\u2139\u213C\u213D\u2146\u2147\u2148\u2149\u214E\u2184\u2C30\u2C31\u2C32\u2C33\u2C34\u2C35\u2C36\u2C37\u2C38\u2C39\u2C3A\u2C3B\u2C3C\u2C3D\u2C3E\u2C3F\u2C40\u2C41\u2C42\u2C43\u2C44\u2C45\u2C46\u2C47\u2C48\u2C49\u2C4A\u2C4B\u2C4C\u2C4D\u2C4E\u2C4F\u2C50\u2C51\u2C52\u2C53\u2C54\u2C55\u2C56\u2C57\u2C58\u2C59\u2C5A\u2C5B\u2C5C\u2C5D\u2C5E\u2C61\u2C65\u2C66\u2C68\u2C6A\u2C6C\u2C71\u2C73\u2C74\u2C76\u2C77\u2C78\u2C79\u2C7A\u2C7B\u2C7C\u2C81\u2C83\u2C85\u2C87\u2C89\u2C8B\u2C8D\u2C8F\u2C91\u2C93\u2C95\u2C97\u2C99\u2C9B\u2C9D\u2C9F\u2CA1\u2CA3\u2CA5\u2CA7\u2CA9\u2CAB\u2CAD\u2CAF\u2CB1\u2CB3\u2CB5\u2CB7\u2CB9\u2CBB\u2CBD\u2CBF\u2CC1\u2CC3\u2CC5\u2CC7\u2CC9\u2CCB\u2CCD\u2CCF\u2CD1\u2CD3\u2CD5\u2CD7\u2CD9\u2CDB\u2CDD\u2CDF\u2CE1\u2CE3\u2CE4\u2D00\u2D01\u2D02\u2D03\u2D04\u2D05\u2D06\u2D07\u2D08\u2D09\u2D0A\u2D0B\u2D0C\u2D0D\u2D0E\u2D0F\u2D10\u2D11\u2D12\u2D13\u2D14\u2D15\u2D16\u2D17\u2D18\u2D19\u2D1A\u2D1B\u2D1C\u2D1D\u2D1E\u2D1F\u2D20\u2D21\u2D22\u2D23\u2D24\u2D25\uA641\uA643\uA645\uA647\uA649\uA64B\uA64D\uA64F\uA651\uA653\uA655\uA657\uA659\uA65B\uA65D\uA65F\uA663\uA665\uA667\uA669\uA66B\uA66D\uA681\uA683\uA685\uA687\uA689\uA68B\uA68D\uA68F\uA691\uA693\uA695\uA697\uA723\uA725\uA727\uA729\uA72B\uA72D\uA72F\uA730\uA731\uA733\uA735\uA737\uA739\uA73B\uA73D\uA73F\uA741\uA743\uA745\uA747\uA749\uA74B\uA74D\uA74F\uA751\uA753\uA755\uA757\uA759\uA75B\uA75D\uA75F\uA761\uA763\uA765\uA767\uA769\uA76B\uA76D\uA76F\uA771\uA772\uA773\uA774\uA775\uA776\uA777\uA778\uA77A\uA77C\uA77F\uA781\uA783\uA785\uA787\uA78C\uFB00\uFB01\uFB02\uFB03\uFB04\uFB05\uFB06\uFB13\uFB14\uFB15\uFB16\uFB17\uFF41\uFF42\uFF43\uFF44\uFF45\uFF46\uFF47\uFF48\uFF49\uFF4A\uFF4B\uFF4C\uFF4D\uFF4E\uFF4F\uFF50\uFF51\uFF52\uFF53\uFF54\uFF55\uFF56\uFF57\uFF58\uFF59\uFF5A]
-
-// Letter, Modifier
-Lm = [\u02B0\u02B1\u02B2\u02B3\u02B4\u02B5\u02B6\u02B7\u02B8\u02B9\u02BA\u02BB\u02BC\u02BD\u02BE\u02BF\u02C0\u02C1\u02C6\u02C7\u02C8\u02C9\u02CA\u02CB\u02CC\u02CD\u02CE\u02CF\u02D0\u02D1\u02E0\u02E1\u02E2\u02E3\u02E4\u02EC\u02EE\u0374\u037A\u0559\u0640\u06E5\u06E6\u07F4\u07F5\u07FA\u0971\u0E46\u0EC6\u10FC\u17D7\u1843\u1C78\u1C79\u1C7A\u1C7B\u1C7C\u1C7D\u1D2C\u1D2D\u1D2E\u1D2F\u1D30\u1D31\u1D32\u1D33\u1D34\u1D35\u1D36\u1D37\u1D38\u1D39\u1D3A\u1D3B\u1D3C\u1D3D\u1D3E\u1D3F\u1D40\u1D41\u1D42\u1D43\u1D44\u1D45\u1D46\u1D47\u1D48\u1D49\u1D4A\u1D4B\u1D4C\u1D4D\u1D4E\u1D4F\u1D50\u1D51\u1D52\u1D53\u1D54\u1D55\u1D56\u1D57\u1D58\u1D59\u1D5A\u1D5B\u1D5C\u1D5D\u1D5E\u1D5F\u1D60\u1D61\u1D78\u1D9B\u1D9C\u1D9D\u1D9E\u1D9F\u1DA0\u1DA1\u1DA2\u1DA3\u1DA4\u1DA5\u1DA6\u1DA7\u1DA8\u1DA9\u1DAA\u1DAB\u1DAC\u1DAD\u1DAE\u1DAF\u1DB0\u1DB1\u1DB2\u1DB3\u1DB4\u1DB5\u1DB6\u1DB7\u1DB8\u1DB9\u1DBA\u1DBB\u1DBC\u1DBD\u1DBE\u1DBF\u2090\u2091\u2092\u2093\u2094\u2C7D\u2D6F\u2E2F\u3005\u3031\u3032\u3033\u3034\u3035\u303B\u309D\u309E\u30FC\u30FD\u30FE\uA015\uA60C\uA67F\uA717\uA718\uA719\uA71A\uA71B\uA71C\uA71D\uA71E\uA71F\uA770\uA788\uFF70\uFF9E\uFF9F]
-
-// Letter, Other
-Lo = [\u01BB\u01C0\u01C1\u01C2\u01C3\u0294\u05D0\u05D1\u05D2\u05D3\u05D4\u05D5\u05D6\u05D7\u05D8\u05D9\u05DA\u05DB\u05DC\u05DD\u05DE\u05DF\u05E0\u05E1\u05E2\u05E3\u05E4\u05E5\u05E6\u05E7\u05E8\u05E9\u05EA\u05F0\u05F1\u05F2\u0621\u0622\u0623\u0624\u0625\u0626\u0627\u0628\u0629\u062A\u062B\u062C\u062D\u062E\u062F\u0630\u0631\u0632\u0633\u0634\u0635\u0636\u0637\u0638\u0639\u063A\u063B\u063C\u063D\u063E\u063F\u0641\u0642\u0643\u0644\u0645\u0646\u0647\u0648\u0649\u064A\u066E\u066F\u0671\u0672\u0673\u0674\u0675\u0676\u0677\u0678\u0679\u067A\u067B\u067C\u067D\u067E\u067F\u0680\u0681\u0682\u0683\u0684\u0685\u0686\u0687\u0688\u0689\u068A\u068B\u068C\u068D\u068E\u068F\u0690\u0691\u0692\u0693\u0694\u0695\u0696\u0697\u0698\u0699\u069A\u069B\u069C\u069D\u069E\u069F\u06A0\u06A1\u06A2\u06A3\u06A4\u06A5\u06A6\u06A7\u06A8\u06A9\u06AA\u06AB\u06AC\u06AD\u06AE\u06AF\u06B0\u06B1\u06B2\u06B3\u06B4\u06B5\u06B6\u06B7\u06B8\u06B9\u06BA\u06BB\u06BC\u06BD\u06BE\u06BF\u06C0\u06C1\u06C2\u06C3\u06C4\u06C5\u06C6\u06C7\u06C8\u06C9\u06CA\u06CB\u06CC\u06CD\u06CE\u06CF\u06D0\u06D1\u06D2\u06D3\u06D5\u06EE\u06EF\u06FA\u06FB\u06FC\u06FF\u0710\u0712\u0713\u0714\u0715\u0716\u0717\u0718\u0719\u071A\u071B\u071C\u071D\u071E\u071F\u0720\u0721\u0722\u0723\u0724\u0725\u0726\u0727\u0728\u0729\u072A\u072B\u072C\u072D\u072E\u072F\u074D\u074E\u074F\u0750\u0751\u0752\u0753\u0754\u0755\u0756\u0757\u0758\u0759\u075A\u075B\u075C\u075D\u075E\u075F\u0760\u0761\u0762\u0763\u0764\u0765\u0766\u0767\u0768\u0769\u076A\u076B\u076C\u076D\u076E\u076F\u0770\u0771\u0772\u0773\u0774\u0775\u0776\u0777\u0778\u0779\u077A\u077B\u077C\u077D\u077E\u077F\u0780\u0781\u0782\u0783\u0784\u0785\u0786\u0787\u0788\u0789\u078A\u078B\u078C\u078D\u078E\u078F\u0790\u0791\u0792\u0793\u0794\u0795\u0796\u0797\u0798\u0799\u079A\u079B\u079C\u079D\u079E\u079F\u07A0\u07A1\u07A2\u07A3\u07A4\u07A5\u07B1\u07CA\u07CB\u07CC\u07CD\u07CE\u07CF\u07D0\u07D1\u07D2\u07D3\u07D4\u07D5\u07D6\u07D7\u07D8\u07D9\u07DA\u07DB\u07DC\u07DD\u07DE\u07DF\u07E0\u07E1\u07E2\u07E3\u07E4\u07E5\u07E6\u07E7\u07E8\u07E9\u07EA\u0904\u0905\u0906\u0907\u0908\u0909\u090A\u090B\u090C\u090D\u090E\u090F\u0910\u0911\u0912\u0913\u0914\u0915\u0916\u0917\u0918\u0919\u091A\u091B\u091C\u091D\u091E\u091F\u0920\u0921\u0922\u0923\u0924\u0925\u0926\u0927\u0928\u0929\u092A\u092B\u092C\u092D\u092E\u092F\u0930\u0931\u0932\u0933\u0934\u0935\u0936\u0937\u0938\u0939\u093D\u0950\u0958\u0959\u095A\u095B\u095C\u095D\u095E\u095F\u0960\u0961\u0972\u097B\u097C\u097D\u097E\u097F\u0985\u0986\u0987\u0988\u0989\u098A\u098B\u098C\u098F\u0990\u0993\u0994\u0995\u0996\u0997\u0998\u0999\u099A\u099B\u099C\u099D\u099E\u099F\u09A0\u09A1\u09A2\u09A3\u09A4\u09A5\u09A6\u09A7\u09A8\u09AA\u09AB\u09AC\u09AD\u09AE\u09AF\u09B0\u09B2\u09B6\u09B7\u09B8\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF\u09E0\u09E1\u09F0\u09F1\u0A05\u0A06\u0A07\u0A08\u0A09\u0A0A\u0A0F\u0A10\u0A13\u0A14\u0A15\u0A16\u0A17\u0A18\u0A19\u0A1A\u0A1B\u0A1C\u0A1D\u0A1E\u0A1F\u0A20\u0A21\u0A22\u0A23\u0A24\u0A25\u0A26\u0A27\u0A28\u0A2A\u0A2B\u0A2C\u0A2D\u0A2E\u0A2F\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59\u0A5A\u0A5B\u0A5C\u0A5E\u0A72\u0A73\u0A74\u0A85\u0A86\u0A87\u0A88\u0A89\u0A8A\u0A8B\u0A8C\u0A8D\u0A8F\u0A90\u0A91\u0A93\u0A94\u0A95\u0A96\u0A97\u0A98\u0A99\u0A9A\u0A9B\u0A9C\u0A9D\u0A9E\u0A9F\u0AA0\u0AA1\u0AA2\u0AA3\u0AA4\u0AA5\u0AA6\u0AA7\u0AA8\u0AAA\u0AAB\u0AAC\u0AAD\u0AAE\u0AAF\u0AB0\u0AB2\u0AB3\u0AB5\u0AB6\u0AB7\u0AB8\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05\u0B06\u0B07\u0B08\u0B09\u0B0A\u0B0B\u0B0C\u0B0F\u0B10\u0B13\u0B14\u0B15\u0B16\u0B17\u0B18\u0B19\u0B1A\u0B1B\u0B1C\u0B1D\u0B1E\u0B1F\u0B20\u0B21\u0B22\u0B23\u0B24\u0B25\u0B26\u0B27\u0B28\u0B2A\u0B2B\u0B2C\u0B2D\u0B2E\u0B2F\u0B30\u0B32\u0B33\u0B35\u0B36\u0B37\u0B38\u0B39\u0B3D\u0B5C\u0B5D\u0B5F\u0B60\u0B61\u0B71\u0B83\u0B85\u0B86\u0B87\u0B88\u0B89\u0B8A\u0B8E\u0B8F\u0B90\u0B92\u0B93\u0B94\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8\u0BA9\u0BAA\u0BAE\u0BAF\u0BB0\u0BB1\u0BB2\u0BB3\u0BB4\u0BB5\u0BB6\u0BB7\u0BB8\u0BB9\u0BD0\u0C05\u0C06\u0C07\u0C08\u0C09\u0C0A\u0C0B\u0C0C\u0C0E\u0C0F\u0C10\u0C12\u0C13\u0C14\u0C15\u0C16\u0C17\u0C18\u0C19\u0C1A\u0C1B\u0C1C\u0C1D\u0C1E\u0C1F\u0C20\u0C21\u0C22\u0C23\u0C24\u0C25\u0C26\u0C27\u0C28\u0C2A\u0C2B\u0C2C\u0C2D\u0C2E\u0C2F\u0C30\u0C31\u0C32\u0C33\u0C35\u0C36\u0C37\u0C38\u0C39\u0C3D\u0C58\u0C59\u0C60\u0C61\u0C85\u0C86\u0C87\u0C88\u0C89\u0C8A\u0C8B\u0C8C\u0C8E\u0C8F\u0C90\u0C92\u0C93\u0C94\u0C95\u0C96\u0C97\u0C98\u0C99\u0C9A\u0C9B\u0C9C\u0C9D\u0C9E\u0C9F\u0CA0\u0CA1\u0CA2\u0CA3\u0CA4\u0CA5\u0CA6\u0CA7\u0CA8\u0CAA\u0CAB\u0CAC\u0CAD\u0CAE\u0CAF\u0CB0\u0CB1\u0CB2\u0CB3\u0CB5\u0CB6\u0CB7\u0CB8\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0D05\u0D06\u0D07\u0D08\u0D09\u0D0A\u0D0B\u0D0C\u0D0E\u0D0F\u0D10\u0D12\u0D13\u0D14\u0D15\u0D16\u0D17\u0D18\u0D19\u0D1A\u0D1B\u0D1C\u0D1D\u0D1E\u0D1F\u0D20\u0D21\u0D22\u0D23\u0D24\u0D25\u0D26\u0D27\u0D28\u0D2A\u0D2B\u0D2C\u0D2D\u0D2E\u0D2F\u0D30\u0D31\u0D32\u0D33\u0D34\u0D35\u0D36\u0D37\u0D38\u0D39\u0D3D\u0D60\u0D61\u0D7A\u0D7B\u0D7C\u0D7D\u0D7E\u0D7F\u0D85\u0D86\u0D87\u0D88\u0D89\u0D8A\u0D8B\u0D8C\u0D8D\u0D8E\u0D8F\u0D90\u0D91\u0D92\u0D93\u0D94\u0D95\u0D96\u0D9A\u0D9B\u0D9C\u0D9D\u0D9E\u0D9F\u0DA0\u0DA1\u0DA2\u0DA3\u0DA4\u0DA5\u0DA6\u0DA7\u0DA8\u0DA9\u0DAA\u0DAB\u0DAC\u0DAD\u0DAE\u0DAF\u0DB0\u0DB1\u0DB3\u0DB4\u0DB5\u0DB6\u0DB7\u0DB8\u0DB9\u0DBA\u0DBB\u0DBD\u0DC0\u0DC1\u0DC2\u0DC3\u0DC4\u0DC5\u0DC6\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E32\u0E33\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94\u0E95\u0E96\u0E97\u0E99\u0E9A\u0E9B\u0E9C\u0E9D\u0E9E\u0E9F\u0EA1\u0EA2\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD\u0EAE\u0EAF\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0\u0EC1\u0EC2\u0EC3\u0EC4\u0EDC\u0EDD\u0F00\u0F40\u0F41\u0F42\u0F43\u0F44\u0F45\u0F46\u0F47\u0F49\u0F4A\u0F4B\u0F4C\u0F4D\u0F4E\u0F4F\u0F50\u0F51\u0F52\u0F53\u0F54\u0F55\u0F56\u0F57\u0F58\u0F59\u0F5A\u0F5B\u0F5C\u0F5D\u0F5E\u0F5F\u0F60\u0F61\u0F62\u0F63\u0F64\u0F65\u0F66\u0F67\u0F68\u0F69\u0F6A\u0F6B\u0F6C\u0F88\u0F89\u0F8A\u0F8B\u1000\u1001\u1002\u1003\u1004\u1005\u1006\u1007\u1008\u1009\u100A\u100B\u100C\u100D\u100E\u100F\u1010\u1011\u1012\u1013\u1014\u1015\u1016\u1017\u1018\u1019\u101A\u101B\u101C\u101D\u101E\u101F\u1020\u1021\u1022\u1023\u1024\u1025\u1026\u1027\u1028\u1029\u102A\u103F\u1050\u1051\u1052\u1053\u1054\u1055\u105A\u105B\u105C\u105D\u1061\u1065\u1066\u106E\u106F\u1070\u1075\u1076\u1077\u1078\u1079\u107A\u107B\u107C\u107D\u107E\u107F\u1080\u1081\u108E\u10D0\u10D1\u10D2\u10D3\u10D4\u10D5\u10D6\u10D7\u10D8\u10D9\u10DA\u10DB\u10DC\u10DD\u10DE\u10DF\u10E0\u10E1\u10E2\u10E3\u10E4\u10E5\u10E6\u10E7\u10E8\u10E9\u10EA\u10EB\u10EC\u10ED\u10EE\u10EF\u10F0\u10F1\u10F2\u10F3\u10F4\u10F5\u10F6\u10F7\u10F8\u10F9\u10FA\u1100\u1101\u1102\u1103\u1104\u1105\u1106\u1107\u1108\u1109\u110A\u110B\u110C\u110D\u110E\u110F\u1110\u1111\u1112\u1113\u1114\u1115\u1116\u1117\u1118\u1119\u111A\u111B\u111C\u111D\u111E\u111F\u1120\u1121\u1122\u1123\u1124\u1125\u1126\u1127\u1128\u1129\u112A\u112B\u112C\u112D\u112E\u112F\u1130\u1131\u1132\u1133\u1134\u1135\u1136\u1137\u1138\u1139\u113A\u113B\u113C\u113D\u113E\u113F\u1140\u1141\u1142\u1143\u1144\u1145\u1146\u1147\u1148\u1149\u114A\u114B\u114C\u114D\u114E\u114F\u1150\u1151\u1152\u1153\u1154\u1155\u1156\u1157\u1158\u1159\u115F\u1160\u1161\u1162\u1163\u1164\u1165\u1166\u1167\u1168\u1169\u116A\u116B\u116C\u116D\u116E\u116F\u1170\u1171\u1172\u1173\u1174\u1175\u1176\u1177\u1178\u1179\u117A\u117B\u117C\u117D\u117E\u117F\u1180\u1181\u1182\u1183\u1184\u1185\u1186\u1187\u1188\u1189\u118A\u118B\u118C\u118D\u118E\u118F\u1190\u1191\u1192\u1193\u1194\u1195\u1196\u1197\u1198\u1199\u119A\u119B\u119C\u119D\u119E\u119F\u11A0\u11A1\u11A2\u11A8\u11A9\u11AA\u11AB\u11AC\u11AD\u11AE\u11AF\u11B0\u11B1\u11B2\u11B3\u11B4\u11B5\u11B6\u11B7\u11B8\u11B9\u11BA\u11BB\u11BC\u11BD\u11BE\u11BF\u11C0\u11C1\u11C2\u11C3\u11C4\u11C5\u11C6\u11C7\u11C8\u11C9\u11CA\u11CB\u11CC\u11CD\u11CE\u11CF\u11D0\u11D1\u11D2\u11D3\u11D4\u11D5\u11D6\u11D7\u11D8\u11D9\u11DA\u11DB\u11DC\u11DD\u11DE\u11DF\u11E0\u11E1\u11E2\u11E3\u11E4\u11E5\u11E6\u11E7\u11E8\u11E9\u11EA\u11EB\u11EC\u11ED\u11EE\u11EF\u11F0\u11F1\u11F2\u11F3\u11F4\u11F5\u11F6\u11F7\u11F8\u11F9\u1200\u1201\u1202\u1203\u1204\u1205\u1206\u1207\u1208\u1209\u120A\u120B\u120C\u120D\u120E\u120F\u1210\u1211\u1212\u1213\u1214\u1215\u1216\u1217\u1218\u1219\u121A\u121B\u121C\u121D\u121E\u121F\u1220\u1221\u1222\u1223\u1224\u1225\u1226\u1227\u1228\u1229\u122A\u122B\u122C\u122D\u122E\u122F\u1230\u1231\u1232\u1233\u1234\u1235\u1236\u1237\u1238\u1239\u123A\u123B\u123C\u123D\u123E\u123F\u1240\u1241\u1242\u1243\u1244\u1245\u1246\u1247\u1248\u124A\u124B\u124C\u124D\u1250\u1251\u1252\u1253\u1254\u1255\u1256\u1258\u125A\u125B\u125C\u125D\u1260\u1261\u1262\u1263\u1264\u1265\u1266\u1267\u1268\u1269\u126A\u126B\u126C\u126D\u126E\u126F\u1270\u1271\u1272\u1273\u1274\u1275\u1276\u1277\u1278\u1279\u127A\u127B\u127C\u127D\u127E\u127F\u1280\u1281\u1282\u1283\u1284\u1285\u1286\u1287\u1288\u128A\u128B\u128C\u128D\u1290\u1291\u1292\u1293\u1294\u1295\u1296\u1297\u1298\u1299\u129A\u129B\u129C\u129D\u129E\u129F\u12A0\u12A1\u12A2\u12A3\u12A4\u12A5\u12A6\u12A7\u12A8\u12A9\u12AA\u12AB\u12AC\u12AD\u12AE\u12AF\u12B0\u12B2\u12B3\u12B4\u12B5\u12B8\u12B9\u12BA\u12BB\u12BC\u12BD\u12BE\u12C0\u12C2\u12C3\u12C4\u12C5\u12C8\u12C9\u12CA\u12CB\u12CC\u12CD\u12CE\u12CF\u12D0\u12D1\u12D2\u12D3\u12D4\u12D5\u12D6\u12D8\u12D9\u12DA\u12DB\u12DC\u12DD\u12DE\u12DF\u12E0\u12E1\u12E2\u12E3\u12E4\u12E5\u12E6\u12E7\u12E8\u12E9\u12EA\u12EB\u12EC\u12ED\u12EE\u12EF\u12F0\u12F1\u12F2\u12F3\u12F4\u12F5\u12F6\u12F7\u12F8\u12F9\u12FA\u12FB\u12FC\u12FD\u12FE\u12FF\u1300\u1301\u1302\u1303\u1304\u1305\u1306\u1307\u1308\u1309\u130A\u130B\u130C\u130D\u130E\u130F\u1310\u1312\u1313\u1314\u1315\u1318\u1319\u131A\u131B\u131C\u131D\u131E\u131F\u1320\u1321\u1322\u1323\u1324\u1325\u1326\u1327\u1328\u1329\u132A\u132B\u132C\u132D\u132E\u132F\u1330\u1331\u1332\u1333\u1334\u1335\u1336\u1337\u1338\u1339\u133A\u133B\u133C\u133D\u133E\u133F\u1340\u1341\u1342\u1343\u1344\u1345\u1346\u1347\u1348\u1349\u134A\u134B\u134C\u134D\u134E\u134F\u1350\u1351\u1352\u1353\u1354\u1355\u1356\u1357\u1358\u1359\u135A\u1380\u1381\u1382\u1383\u1384\u1385\u1386\u1387\u1388\u1389\u138A\u138B\u138C\u138D\u138E\u138F\u13A0\u13A1\u13A2\u13A3\u13A4\u13A5\u13A6\u13A7\u13A8\u13A9\u13AA\u13AB\u13AC\u13AD\u13AE\u13AF\u13B0\u13B1\u13B2\u13B3\u13B4\u13B5\u13B6\u13B7\u13B8\u13B9\u13BA\u13BB\u13BC\u13BD\u13BE\u13BF\u13C0\u13C1\u13C2\u13C3\u13C4\u13C5\u13C6\u13C7\u13C8\u13C9\u13CA\u13CB\u13CC\u13CD\u13CE\u13CF\u13D0\u13D1\u13D2\u13D3\u13D4\u13D5\u13D6\u13D7\u13D8\u13D9\u13DA\u13DB\u13DC\u13DD\u13DE\u13DF\u13E0\u13E1\u13E2\u13E3\u13E4\u13E5\u13E6\u13E7\u13E8\u13E9\u13EA\u13EB\u13EC\u13ED\u13EE\u13EF\u13F0\u13F1\u13F2\u13F3\u13F4\u1401\u1402\u1403\u1404\u1405\u1406\u1407\u1408\u1409\u140A\u140B\u140C\u140D\u140E\u140F\u1410\u1411\u1412\u1413\u1414\u1415\u1416\u1417\u1418\u1419\u141A\u141B\u141C\u141D\u141E\u141F\u1420\u1421\u1422\u1423\u1424\u1425\u1426\u1427\u1428\u1429\u142A\u142B\u142C\u142D\u142E\u142F\u1430\u1431\u1432\u1433\u1434\u1435\u1436\u1437\u1438\u1439\u143A\u143B\u143C\u143D\u143E\u143F\u1440\u1441\u1442\u1443\u1444\u1445\u1446\u1447\u1448\u1449\u144A\u144B\u144C\u144D\u144E\u144F\u1450\u1451\u1452\u1453\u1454\u1455\u1456\u1457\u1458\u1459\u145A\u145B\u145C\u145D\u145E\u145F\u1460\u1461\u1462\u1463\u1464\u1465\u1466\u1467\u1468\u1469\u146A\u146B\u146C\u146D\u146E\u146F\u1470\u1471\u1472\u1473\u1474\u1475\u1476\u1477\u1478\u1479\u147A\u147B\u147C\u147D\u147E\u147F\u1480\u1481\u1482\u1483\u1484\u1485\u1486\u1487\u1488\u1489\u148A\u148B\u148C\u148D\u148E\u148F\u1490\u1491\u1492\u1493\u1494\u1495\u1496\u1497\u1498\u1499\u149A\u149B\u149C\u149D\u149E\u149F\u14A0\u14A1\u14A2\u14A3\u14A4\u14A5\u14A6\u14A7\u14A8\u14A9\u14AA\u14AB\u14AC\u14AD\u14AE\u14AF\u14B0\u14B1\u14B2\u14B3\u14B4\u14B5\u14B6\u14B7\u14B8\u14B9\u14BA\u14BB\u14BC\u14BD\u14BE\u14BF\u14C0\u14C1\u14C2\u14C3\u14C4\u14C5\u14C6\u14C7\u14C8\u14C9\u14CA\u14CB\u14CC\u14CD\u14CE\u14CF\u14D0\u14D1\u14D2\u14D3\u14D4\u14D5\u14D6\u14D7\u14D8\u14D9\u14DA\u14DB\u14DC\u14DD\u14DE\u14DF\u14E0\u14E1\u14E2\u14E3\u14E4\u14E5\u14E6\u14E7\u14E8\u14E9\u14EA\u14EB\u14EC\u14ED\u14EE\u14EF\u14F0\u14F1\u14F2\u14F3\u14F4\u14F5\u14F6\u14F7\u14F8\u14F9\u14FA\u14FB\u14FC\u14FD\u14FE\u14FF\u1500\u1501\u1502\u1503\u1504\u1505\u1506\u1507\u1508\u1509\u150A\u150B\u150C\u150D\u150E\u150F\u1510\u1511\u1512\u1513\u1514\u1515\u1516\u1517\u1518\u1519\u151A\u151B\u151C\u151D\u151E\u151F\u1520\u1521\u1522\u1523\u1524\u1525\u1526\u1527\u1528\u1529\u152A\u152B\u152C\u152D\u152E\u152F\u1530\u1531\u1532\u1533\u1534\u1535\u1536\u1537\u1538\u1539\u153A\u153B\u153C\u153D\u153E\u153F\u1540\u1541\u1542\u1543\u1544\u1545\u1546\u1547\u1548\u1549\u154A\u154B\u154C\u154D\u154E\u154F\u1550\u1551\u1552\u1553\u1554\u1555\u1556\u1557\u1558\u1559\u155A\u155B\u155C\u155D\u155E\u155F\u1560\u1561\u1562\u1563\u1564\u1565\u1566\u1567\u1568\u1569\u156A\u156B\u156C\u156D\u156E\u156F\u1570\u1571\u1572\u1573\u1574\u1575\u1576\u1577\u1578\u1579\u157A\u157B\u157C\u157D\u157E\u157F\u1580\u1581\u1582\u1583\u1584\u1585\u1586\u1587\u1588\u1589\u158A\u158B\u158C\u158D\u158E\u158F\u1590\u1591\u1592\u1593\u1594\u1595\u1596\u1597\u1598\u1599\u159A\u159B\u159C\u159D\u159E\u159F\u15A0\u15A1\u15A2\u15A3\u15A4\u15A5\u15A6\u15A7\u15A8\u15A9\u15AA\u15AB\u15AC\u15AD\u15AE\u15AF\u15B0\u15B1\u15B2\u15B3\u15B4\u15B5\u15B6\u15B7\u15B8\u15B9\u15BA\u15BB\u15BC\u15BD\u15BE\u15BF\u15C0\u15C1\u15C2\u15C3\u15C4\u15C5\u15C6\u15C7\u15C8\u15C9\u15CA\u15CB\u15CC\u15CD\u15CE\u15CF\u15D0\u15D1\u15D2\u15D3\u15D4\u15D5\u15D6\u15D7\u15D8\u15D9\u15DA\u15DB\u15DC\u15DD\u15DE\u15DF\u15E0\u15E1\u15E2\u15E3\u15E4\u15E5\u15E6\u15E7\u15E8\u15E9\u15EA\u15EB\u15EC\u15ED\u15EE\u15EF\u15F0\u15F1\u15F2\u15F3\u15F4\u15F5\u15F6\u15F7\u15F8\u15F9\u15FA\u15FB\u15FC\u15FD\u15FE\u15FF\u1600\u1601\u1602\u1603\u1604\u1605\u1606\u1607\u1608\u1609\u160A\u160B\u160C\u160D\u160E\u160F\u1610\u1611\u1612\u1613\u1614\u1615\u1616\u1617\u1618\u1619\u161A\u161B\u161C\u161D\u161E\u161F\u1620\u1621\u1622\u1623\u1624\u1625\u1626\u1627\u1628\u1629\u162A\u162B\u162C\u162D\u162E\u162F\u1630\u1631\u1632\u1633\u1634\u1635\u1636\u1637\u1638\u1639\u163A\u163B\u163C\u163D\u163E\u163F\u1640\u1641\u1642\u1643\u1644\u1645\u1646\u1647\u1648\u1649\u164A\u164B\u164C\u164D\u164E\u164F\u1650\u1651\u1652\u1653\u1654\u1655\u1656\u1657\u1658\u1659\u165A\u165B\u165C\u165D\u165E\u165F\u1660\u1661\u1662\u1663\u1664\u1665\u1666\u1667\u1668\u1669\u166A\u166B\u166C\u166F\u1670\u1671\u1672\u1673\u1674\u1675\u1676\u1681\u1682\u1683\u1684\u1685\u1686\u1687\u1688\u1689\u168A\u168B\u168C\u168D\u168E\u168F\u1690\u1691\u1692\u1693\u1694\u1695\u1696\u1697\u1698\u1699\u169A\u16A0\u16A1\u16A2\u16A3\u16A4\u16A5\u16A6\u16A7\u16A8\u16A9\u16AA\u16AB\u16AC\u16AD\u16AE\u16AF\u16B0\u16B1\u16B2\u16B3\u16B4\u16B5\u16B6\u16B7\u16B8\u16B9\u16BA\u16BB\u16BC\u16BD\u16BE\u16BF\u16C0\u16C1\u16C2\u16C3\u16C4\u16C5\u16C6\u16C7\u16C8\u16C9\u16CA\u16CB\u16CC\u16CD\u16CE\u16CF\u16D0\u16D1\u16D2\u16D3\u16D4\u16D5\u16D6\u16D7\u16D8\u16D9\u16DA\u16DB\u16DC\u16DD\u16DE\u16DF\u16E0\u16E1\u16E2\u16E3\u16E4\u16E5\u16E6\u16E7\u16E8\u16E9\u16EA\u1700\u1701\u1702\u1703\u1704\u1705\u1706\u1707\u1708\u1709\u170A\u170B\u170C\u170E\u170F\u1710\u1711\u1720\u1721\u1722\u1723\u1724\u1725\u1726\u1727\u1728\u1729\u172A\u172B\u172C\u172D\u172E\u172F\u1730\u1731\u1740\u1741\u1742\u1743\u1744\u1745\u1746\u1747\u1748\u1749\u174A\u174B\u174C\u174D\u174E\u174F\u1750\u1751\u1760\u1761\u1762\u1763\u1764\u1765\u1766\u1767\u1768\u1769\u176A\u176B\u176C\u176E\u176F\u1770\u1780\u1781\u1782\u1783\u1784\u1785\u1786\u1787\u1788\u1789\u178A\u178B\u178C\u178D\u178E\u178F\u1790\u1791\u1792\u1793\u1794\u1795\u1796\u1797\u1798\u1799\u179A\u179B\u179C\u179D\u179E\u179F\u17A0\u17A1\u17A2\u17A3\u17A4\u17A5\u17A6\u17A7\u17A8\u17A9\u17AA\u17AB\u17AC\u17AD\u17AE\u17AF\u17B0\u17B1\u17B2\u17B3\u17DC\u1820\u1821\u1822\u1823\u1824\u1825\u1826\u1827\u1828\u1829\u182A\u182B\u182C\u182D\u182E\u182F\u1830\u1831\u1832\u1833\u1834\u1835\u1836\u1837\u1838\u1839\u183A\u183B\u183C\u183D\u183E\u183F\u1840\u1841\u1842\u1844\u1845\u1846\u1847\u1848\u1849\u184A\u184B\u184C\u184D\u184E\u184F\u1850\u1851\u1852\u1853\u1854\u1855\u1856\u1857\u1858\u1859\u185A\u185B\u185C\u185D\u185E\u185F\u1860\u1861\u1862\u1863\u1864\u1865\u1866\u1867\u1868\u1869\u186A\u186B\u186C\u186D\u186E\u186F\u1870\u1871\u1872\u1873\u1874\u1875\u1876\u1877\u1880\u1881\u1882\u1883\u1884\u1885\u1886\u1887\u1888\u1889\u188A\u188B\u188C\u188D\u188E\u188F\u1890\u1891\u1892\u1893\u1894\u1895\u1896\u1897\u1898\u1899\u189A\u189B\u189C\u189D\u189E\u189F\u18A0\u18A1\u18A2\u18A3\u18A4\u18A5\u18A6\u18A7\u18A8\u18AA\u1900\u1901\u1902\u1903\u1904\u1905\u1906\u1907\u1908\u1909\u190A\u190B\u190C\u190D\u190E\u190F\u1910\u1911\u1912\u1913\u1914\u1915\u1916\u1917\u1918\u1919\u191A\u191B\u191C\u1950\u1951\u1952\u1953\u1954\u1955\u1956\u1957\u1958\u1959\u195A\u195B\u195C\u195D\u195E\u195F\u1960\u1961\u1962\u1963\u1964\u1965\u1966\u1967\u1968\u1969\u196A\u196B\u196C\u196D\u1970\u1971\u1972\u1973\u1974\u1980\u1981\u1982\u1983\u1984\u1985\u1986\u1987\u1988\u1989\u198A\u198B\u198C\u198D\u198E\u198F\u1990\u1991\u1992\u1993\u1994\u1995\u1996\u1997\u1998\u1999\u199A\u199B\u199C\u199D\u199E\u199F\u19A0\u19A1\u19A2\u19A3\u19A4\u19A5\u19A6\u19A7\u19A8\u19A9\u19C1\u19C2\u19C3\u19C4\u19C5\u19C6\u19C7\u1A00\u1A01\u1A02\u1A03\u1A04\u1A05\u1A06\u1A07\u1A08\u1A09\u1A0A\u1A0B\u1A0C\u1A0D\u1A0E\u1A0F\u1A10\u1A11\u1A12\u1A13\u1A14\u1A15\u1A16\u1B05\u1B06\u1B07\u1B08\u1B09\u1B0A\u1B0B\u1B0C\u1B0D\u1B0E\u1B0F\u1B10\u1B11\u1B12\u1B13\u1B14\u1B15\u1B16\u1B17\u1B18\u1B19\u1B1A\u1B1B\u1B1C\u1B1D\u1B1E\u1B1F\u1B20\u1B21\u1B22\u1B23\u1B24\u1B25\u1B26\u1B27\u1B28\u1B29\u1B2A\u1B2B\u1B2C\u1B2D\u1B2E\u1B2F\u1B30\u1B31\u1B32\u1B33\u1B45\u1B46\u1B47\u1B48\u1B49\u1B4A\u1B4B\u1B83\u1B84\u1B85\u1B86\u1B87\u1B88\u1B89\u1B8A\u1B8B\u1B8C\u1B8D\u1B8E\u1B8F\u1B90\u1B91\u1B92\u1B93\u1B94\u1B95\u1B96\u1B97\u1B98\u1B99\u1B9A\u1B9B\u1B9C\u1B9D\u1B9E\u1B9F\u1BA0\u1BAE\u1BAF\u1C00\u1C01\u1C02\u1C03\u1C04\u1C05\u1C06\u1C07\u1C08\u1C09\u1C0A\u1C0B\u1C0C\u1C0D\u1C0E\u1C0F\u1C10\u1C11\u1C12\u1C13\u1C14\u1C15\u1C16\u1C17\u1C18\u1C19\u1C1A\u1C1B\u1C1C\u1C1D\u1C1E\u1C1F\u1C20\u1C21\u1C22\u1C23\u1C4D\u1C4E\u1C4F\u1C5A\u1C5B\u1C5C\u1C5D\u1C5E\u1C5F\u1C60\u1C61\u1C62\u1C63\u1C64\u1C65\u1C66\u1C67\u1C68\u1C69\u1C6A\u1C6B\u1C6C\u1C6D\u1C6E\u1C6F\u1C70\u1C71\u1C72\u1C73\u1C74\u1C75\u1C76\u1C77\u2135\u2136\u2137\u2138\u2D30\u2D31\u2D32\u2D33\u2D34\u2D35\u2D36\u2D37\u2D38\u2D39\u2D3A\u2D3B\u2D3C\u2D3D\u2D3E\u2D3F\u2D40\u2D41\u2D42\u2D43\u2D44\u2D45\u2D46\u2D47\u2D48\u2D49\u2D4A\u2D4B\u2D4C\u2D4D\u2D4E\u2D4F\u2D50\u2D51\u2D52\u2D53\u2D54\u2D55\u2D56\u2D57\u2D58\u2D59\u2D5A\u2D5B\u2D5C\u2D5D\u2D5E\u2D5F\u2D60\u2D61\u2D62\u2D63\u2D64\u2D65\u2D80\u2D81\u2D82\u2D83\u2D84\u2D85\u2D86\u2D87\u2D88\u2D89\u2D8A\u2D8B\u2D8C\u2D8D\u2D8E\u2D8F\u2D90\u2D91\u2D92\u2D93\u2D94\u2D95\u2D96\u2DA0\u2DA1\u2DA2\u2DA3\u2DA4\u2DA5\u2DA6\u2DA8\u2DA9\u2DAA\u2DAB\u2DAC\u2DAD\u2DAE\u2DB0\u2DB1\u2DB2\u2DB3\u2DB4\u2DB5\u2DB6\u2DB8\u2DB9\u2DBA\u2DBB\u2DBC\u2DBD\u2DBE\u2DC0\u2DC1\u2DC2\u2DC3\u2DC4\u2DC5\u2DC6\u2DC8\u2DC9\u2DCA\u2DCB\u2DCC\u2DCD\u2DCE\u2DD0\u2DD1\u2DD2\u2DD3\u2DD4\u2DD5\u2DD6\u2DD8\u2DD9\u2DDA\u2DDB\u2DDC\u2DDD\u2DDE\u3006\u303C\u3041\u3042\u3043\u3044\u3045\u3046\u3047\u3048\u3049\u304A\u304B\u304C\u304D\u304E\u304F\u3050\u3051\u3052\u3053\u3054\u3055\u3056\u3057\u3058\u3059\u305A\u305B\u305C\u305D\u305E\u305F\u3060\u3061\u3062\u3063\u3064\u3065\u3066\u3067\u3068\u3069\u306A\u306B\u306C\u306D\u306E\u306F\u3070\u3071\u3072\u3073\u3074\u3075\u3076\u3077\u3078\u3079\u307A\u307B\u307C\u307D\u307E\u307F\u3080\u3081\u3082\u3083\u3084\u3085\u3086\u3087\u3088\u3089\u308A\u308B\u308C\u308D\u308E\u308F\u3090\u3091\u3092\u3093\u3094\u3095\u3096\u309F\u30A1\u30A2\u30A3\u30A4\u30A5\u30A6\u30A7\u30A8\u30A9\u30AA\u30AB\u30AC\u30AD\u30AE\u30AF\u30B0\u30B1\u30B2\u30B3\u30B4\u30B5\u30B6\u30B7\u30B8\u30B9\u30BA\u30BB\u30BC\u30BD\u30BE\u30BF\u30C0\u30C1\u30C2\u30C3\u30C4\u30C5\u30C6\u30C7\u30C8\u30C9\u30CA\u30CB\u30CC\u30CD\u30CE\u30CF\u30D0\u30D1\u30D2\u30D3\u30D4\u30D5\u30D6\u30D7\u30D8\u30D9\u30DA\u30DB\u30DC\u30DD\u30DE\u30DF\u30E0\u30E1\u30E2\u30E3\u30E4\u30E5\u30E6\u30E7\u30E8\u30E9\u30EA\u30EB\u30EC\u30ED\u30EE\u30EF\u30F0\u30F1\u30F2\u30F3\u30F4\u30F5\u30F6\u30F7\u30F8\u30F9\u30FA\u30FF\u3105\u3106\u3107\u3108\u3109\u310A\u310B\u310C\u310D\u310E\u310F\u3110\u3111\u3112\u3113\u3114\u3115\u3116\u3117\u3118\u3119\u311A\u311B\u311C\u311D\u311E\u311F\u3120\u3121\u3122\u3123\u3124\u3125\u3126\u3127\u3128\u3129\u312A\u312B\u312C\u312D\u3131\u3132\u3133\u3134\u3135\u3136\u3137\u3138\u3139\u313A\u313B\u313C\u313D\u313E\u313F\u3140\u3141\u3142\u3143\u3144\u3145\u3146\u3147\u3148\u3149\u314A\u314B\u314C\u314D\u314E\u314F\u3150\u3151\u3152\u3153\u3154\u3155\u3156\u3157\u3158\u3159\u315A\u315B\u315C\u315D\u315E\u315F\u3160\u3161\u3162\u3163\u3164\u3165\u3166\u3167\u3168\u3169\u316A\u316B\u316C\u316D\u316E\u316F\u3170\u3171\u3172\u3173\u3174\u3175\u3176\u3177\u3178\u3179\u317A\u317B\u317C\u317D\u317E\u317F\u3180\u3181\u3182\u3183\u3184\u3185\u3186\u3187\u3188\u3189\u318A\u318B\u318C\u318D\u318E\u31A0\u31A1\u31A2\u31A3\u31A4\u31A5\u31A6\u31A7\u31A8\u31A9\u31AA\u31AB\u31AC\u31AD\u31AE\u31AF\u31B0\u31B1\u31B2\u31B3\u31B4\u31B5\u31B6\u31B7\u31F0\u31F1\u31F2\u31F3\u31F4\u31F5\u31F6\u31F7\u31F8\u31F9\u31FA\u31FB\u31FC\u31FD\u31FE\u31FF\u3400\u4DB5\u4E00\u9FC3\uA000\uA001\uA002\uA003\uA004\uA005\uA006\uA007\uA008\uA009\uA00A\uA00B\uA00C\uA00D\uA00E\uA00F\uA010\uA011\uA012\uA013\uA014\uA016\uA017\uA018\uA019\uA01A\uA01B\uA01C\uA01D\uA01E\uA01F\uA020\uA021\uA022\uA023\uA024\uA025\uA026\uA027\uA028\uA029\uA02A\uA02B\uA02C\uA02D\uA02E\uA02F\uA030\uA031\uA032\uA033\uA034\uA035\uA036\uA037\uA038\uA039\uA03A\uA03B\uA03C\uA03D\uA03E\uA03F\uA040\uA041\uA042\uA043\uA044\uA045\uA046\uA047\uA048\uA049\uA04A\uA04B\uA04C\uA04D\uA04E\uA04F\uA050\uA051\uA052\uA053\uA054\uA055\uA056\uA057\uA058\uA059\uA05A\uA05B\uA05C\uA05D\uA05E\uA05F\uA060\uA061\uA062\uA063\uA064\uA065\uA066\uA067\uA068\uA069\uA06A\uA06B\uA06C\uA06D\uA06E\uA06F\uA070\uA071\uA072\uA073\uA074\uA075\uA076\uA077\uA078\uA079\uA07A\uA07B\uA07C\uA07D\uA07E\uA07F\uA080\uA081\uA082\uA083\uA084\uA085\uA086\uA087\uA088\uA089\uA08A\uA08B\uA08C\uA08D\uA08E\uA08F\uA090\uA091\uA092\uA093\uA094\uA095\uA096\uA097\uA098\uA099\uA09A\uA09B\uA09C\uA09D\uA09E\uA09F\uA0A0\uA0A1\uA0A2\uA0A3\uA0A4\uA0A5\uA0A6\uA0A7\uA0A8\uA0A9\uA0AA\uA0AB\uA0AC\uA0AD\uA0AE\uA0AF\uA0B0\uA0B1\uA0B2\uA0B3\uA0B4\uA0B5\uA0B6\uA0B7\uA0B8\uA0B9\uA0BA\uA0BB\uA0BC\uA0BD\uA0BE\uA0BF\uA0C0\uA0C1\uA0C2\uA0C3\uA0C4\uA0C5\uA0C6\uA0C7\uA0C8\uA0C9\uA0CA\uA0CB\uA0CC\uA0CD\uA0CE\uA0CF\uA0D0\uA0D1\uA0D2\uA0D3\uA0D4\uA0D5\uA0D6\uA0D7\uA0D8\uA0D9\uA0DA\uA0DB\uA0DC\uA0DD\uA0DE\uA0DF\uA0E0\uA0E1\uA0E2\uA0E3\uA0E4\uA0E5\uA0E6\uA0E7\uA0E8\uA0E9\uA0EA\uA0EB\uA0EC\uA0ED\uA0EE\uA0EF\uA0F0\uA0F1\uA0F2\uA0F3\uA0F4\uA0F5\uA0F6\uA0F7\uA0F8\uA0F9\uA0FA\uA0FB\uA0FC\uA0FD\uA0FE\uA0FF\uA100\uA101\uA102\uA103\uA104\uA105\uA106\uA107\uA108\uA109\uA10A\uA10B\uA10C\uA10D\uA10E\uA10F\uA110\uA111\uA112\uA113\uA114\uA115\uA116\uA117\uA118\uA119\uA11A\uA11B\uA11C\uA11D\uA11E\uA11F\uA120\uA121\uA122\uA123\uA124\uA125\uA126\uA127\uA128\uA129\uA12A\uA12B\uA12C\uA12D\uA12E\uA12F\uA130\uA131\uA132\uA133\uA134\uA135\uA136\uA137\uA138\uA139\uA13A\uA13B\uA13C\uA13D\uA13E\uA13F\uA140\uA141\uA142\uA143\uA144\uA145\uA146\uA147\uA148\uA149\uA14A\uA14B\uA14C\uA14D\uA14E\uA14F\uA150\uA151\uA152\uA153\uA154\uA155\uA156\uA157\uA158\uA159\uA15A\uA15B\uA15C\uA15D\uA15E\uA15F\uA160\uA161\uA162\uA163\uA164\uA165\uA166\uA167\uA168\uA169\uA16A\uA16B\uA16C\uA16D\uA16E\uA16F\uA170\uA171\uA172\uA173\uA174\uA175\uA176\uA177\uA178\uA179\uA17A\uA17B\uA17C\uA17D\uA17E\uA17F\uA180\uA181\uA182\uA183\uA184\uA185\uA186\uA187\uA188\uA189\uA18A\uA18B\uA18C\uA18D\uA18E\uA18F\uA190\uA191\uA192\uA193\uA194\uA195\uA196\uA197\uA198\uA199\uA19A\uA19B\uA19C\uA19D\uA19E\uA19F\uA1A0\uA1A1\uA1A2\uA1A3\uA1A4\uA1A5\uA1A6\uA1A7\uA1A8\uA1A9\uA1AA\uA1AB\uA1AC\uA1AD\uA1AE\uA1AF\uA1B0\uA1B1\uA1B2\uA1B3\uA1B4\uA1B5\uA1B6\uA1B7\uA1B8\uA1B9\uA1BA\uA1BB\uA1BC\uA1BD\uA1BE\uA1BF\uA1C0\uA1C1\uA1C2\uA1C3\uA1C4\uA1C5\uA1C6\uA1C7\uA1C8\uA1C9\uA1CA\uA1CB\uA1CC\uA1CD\uA1CE\uA1CF\uA1D0\uA1D1\uA1D2\uA1D3\uA1D4\uA1D5\uA1D6\uA1D7\uA1D8\uA1D9\uA1DA\uA1DB\uA1DC\uA1DD\uA1DE\uA1DF\uA1E0\uA1E1\uA1E2\uA1E3\uA1E4\uA1E5\uA1E6\uA1E7\uA1E8\uA1E9\uA1EA\uA1EB\uA1EC\uA1ED\uA1EE\uA1EF\uA1F0\uA1F1\uA1F2\uA1F3\uA1F4\uA1F5\uA1F6\uA1F7\uA1F8\uA1F9\uA1FA\uA1FB\uA1FC\uA1FD\uA1FE\uA1FF\uA200\uA201\uA202\uA203\uA204\uA205\uA206\uA207\uA208\uA209\uA20A\uA20B\uA20C\uA20D\uA20E\uA20F\uA210\uA211\uA212\uA213\uA214\uA215\uA216\uA217\uA218\uA219\uA21A\uA21B\uA21C\uA21D\uA21E\uA21F\uA220\uA221\uA222\uA223\uA224\uA225\uA226\uA227\uA228\uA229\uA22A\uA22B\uA22C\uA22D\uA22E\uA22F\uA230\uA231\uA232\uA233\uA234\uA235\uA236\uA237\uA238\uA239\uA23A\uA23B\uA23C\uA23D\uA23E\uA23F\uA240\uA241\uA242\uA243\uA244\uA245\uA246\uA247\uA248\uA249\uA24A\uA24B\uA24C\uA24D\uA24E\uA24F\uA250\uA251\uA252\uA253\uA254\uA255\uA256\uA257\uA258\uA259\uA25A\uA25B\uA25C\uA25D\uA25E\uA25F\uA260\uA261\uA262\uA263\uA264\uA265\uA266\uA267\uA268\uA269\uA26A\uA26B\uA26C\uA26D\uA26E\uA26F\uA270\uA271\uA272\uA273\uA274\uA275\uA276\uA277\uA278\uA279\uA27A\uA27B\uA27C\uA27D\uA27E\uA27F\uA280\uA281\uA282\uA283\uA284\uA285\uA286\uA287\uA288\uA289\uA28A\uA28B\uA28C\uA28D\uA28E\uA28F\uA290\uA291\uA292\uA293\uA294\uA295\uA296\uA297\uA298\uA299\uA29A\uA29B\uA29C\uA29D\uA29E\uA29F\uA2A0\uA2A1\uA2A2\uA2A3\uA2A4\uA2A5\uA2A6\uA2A7\uA2A8\uA2A9\uA2AA\uA2AB\uA2AC\uA2AD\uA2AE\uA2AF\uA2B0\uA2B1\uA2B2\uA2B3\uA2B4\uA2B5\uA2B6\uA2B7\uA2B8\uA2B9\uA2BA\uA2BB\uA2BC\uA2BD\uA2BE\uA2BF\uA2C0\uA2C1\uA2C2\uA2C3\uA2C4\uA2C5\uA2C6\uA2C7\uA2C8\uA2C9\uA2CA\uA2CB\uA2CC\uA2CD\uA2CE\uA2CF\uA2D0\uA2D1\uA2D2\uA2D3\uA2D4\uA2D5\uA2D6\uA2D7\uA2D8\uA2D9\uA2DA\uA2DB\uA2DC\uA2DD\uA2DE\uA2DF\uA2E0\uA2E1\uA2E2\uA2E3\uA2E4\uA2E5\uA2E6\uA2E7\uA2E8\uA2E9\uA2EA\uA2EB\uA2EC\uA2ED\uA2EE\uA2EF\uA2F0\uA2F1\uA2F2\uA2F3\uA2F4\uA2F5\uA2F6\uA2F7\uA2F8\uA2F9\uA2FA\uA2FB\uA2FC\uA2FD\uA2FE\uA2FF\uA300\uA301\uA302\uA303\uA304\uA305\uA306\uA307\uA308\uA309\uA30A\uA30B\uA30C\uA30D\uA30E\uA30F\uA310\uA311\uA312\uA313\uA314\uA315\uA316\uA317\uA318\uA319\uA31A\uA31B\uA31C\uA31D\uA31E\uA31F\uA320\uA321\uA322\uA323\uA324\uA325\uA326\uA327\uA328\uA329\uA32A\uA32B\uA32C\uA32D\uA32E\uA32F\uA330\uA331\uA332\uA333\uA334\uA335\uA336\uA337\uA338\uA339\uA33A\uA33B\uA33C\uA33D\uA33E\uA33F\uA340\uA341\uA342\uA343\uA344\uA345\uA346\uA347\uA348\uA349\uA34A\uA34B\uA34C\uA34D\uA34E\uA34F\uA350\uA351\uA352\uA353\uA354\uA355\uA356\uA357\uA358\uA359\uA35A\uA35B\uA35C\uA35D\uA35E\uA35F\uA360\uA361\uA362\uA363\uA364\uA365\uA366\uA367\uA368\uA369\uA36A\uA36B\uA36C\uA36D\uA36E\uA36F\uA370\uA371\uA372\uA373\uA374\uA375\uA376\uA377\uA378\uA379\uA37A\uA37B\uA37C\uA37D\uA37E\uA37F\uA380\uA381\uA382\uA383\uA384\uA385\uA386\uA387\uA388\uA389\uA38A\uA38B\uA38C\uA38D\uA38E\uA38F\uA390\uA391\uA392\uA393\uA394\uA395\uA396\uA397\uA398\uA399\uA39A\uA39B\uA39C\uA39D\uA39E\uA39F\uA3A0\uA3A1\uA3A2\uA3A3\uA3A4\uA3A5\uA3A6\uA3A7\uA3A8\uA3A9\uA3AA\uA3AB\uA3AC\uA3AD\uA3AE\uA3AF\uA3B0\uA3B1\uA3B2\uA3B3\uA3B4\uA3B5\uA3B6\uA3B7\uA3B8\uA3B9\uA3BA\uA3BB\uA3BC\uA3BD\uA3BE\uA3BF\uA3C0\uA3C1\uA3C2\uA3C3\uA3C4\uA3C5\uA3C6\uA3C7\uA3C8\uA3C9\uA3CA\uA3CB\uA3CC\uA3CD\uA3CE\uA3CF\uA3D0\uA3D1\uA3D2\uA3D3\uA3D4\uA3D5\uA3D6\uA3D7\uA3D8\uA3D9\uA3DA\uA3DB\uA3DC\uA3DD\uA3DE\uA3DF\uA3E0\uA3E1\uA3E2\uA3E3\uA3E4\uA3E5\uA3E6\uA3E7\uA3E8\uA3E9\uA3EA\uA3EB\uA3EC\uA3ED\uA3EE\uA3EF\uA3F0\uA3F1\uA3F2\uA3F3\uA3F4\uA3F5\uA3F6\uA3F7\uA3F8\uA3F9\uA3FA\uA3FB\uA3FC\uA3FD\uA3FE\uA3FF\uA400\uA401\uA402\uA403\uA404\uA405\uA406\uA407\uA408\uA409\uA40A\uA40B\uA40C\uA40D\uA40E\uA40F\uA410\uA411\uA412\uA413\uA414\uA415\uA416\uA417\uA418\uA419\uA41A\uA41B\uA41C\uA41D\uA41E\uA41F\uA420\uA421\uA422\uA423\uA424\uA425\uA426\uA427\uA428\uA429\uA42A\uA42B\uA42C\uA42D\uA42E\uA42F\uA430\uA431\uA432\uA433\uA434\uA435\uA436\uA437\uA438\uA439\uA43A\uA43B\uA43C\uA43D\uA43E\uA43F\uA440\uA441\uA442\uA443\uA444\uA445\uA446\uA447\uA448\uA449\uA44A\uA44B\uA44C\uA44D\uA44E\uA44F\uA450\uA451\uA452\uA453\uA454\uA455\uA456\uA457\uA458\uA459\uA45A\uA45B\uA45C\uA45D\uA45E\uA45F\uA460\uA461\uA462\uA463\uA464\uA465\uA466\uA467\uA468\uA469\uA46A\uA46B\uA46C\uA46D\uA46E\uA46F\uA470\uA471\uA472\uA473\uA474\uA475\uA476\uA477\uA478\uA479\uA47A\uA47B\uA47C\uA47D\uA47E\uA47F\uA480\uA481\uA482\uA483\uA484\uA485\uA486\uA487\uA488\uA489\uA48A\uA48B\uA48C\uA500\uA501\uA502\uA503\uA504\uA505\uA506\uA507\uA508\uA509\uA50A\uA50B\uA50C\uA50D\uA50E\uA50F\uA510\uA511\uA512\uA513\uA514\uA515\uA516\uA517\uA518\uA519\uA51A\uA51B\uA51C\uA51D\uA51E\uA51F\uA520\uA521\uA522\uA523\uA524\uA525\uA526\uA527\uA528\uA529\uA52A\uA52B\uA52C\uA52D\uA52E\uA52F\uA530\uA531\uA532\uA533\uA534\uA535\uA536\uA537\uA538\uA539\uA53A\uA53B\uA53C\uA53D\uA53E\uA53F\uA540\uA541\uA542\uA543\uA544\uA545\uA546\uA547\uA548\uA549\uA54A\uA54B\uA54C\uA54D\uA54E\uA54F\uA550\uA551\uA552\uA553\uA554\uA555\uA556\uA557\uA558\uA559\uA55A\uA55B\uA55C\uA55D\uA55E\uA55F\uA560\uA561\uA562\uA563\uA564\uA565\uA566\uA567\uA568\uA569\uA56A\uA56B\uA56C\uA56D\uA56E\uA56F\uA570\uA571\uA572\uA573\uA574\uA575\uA576\uA577\uA578\uA579\uA57A\uA57B\uA57C\uA57D\uA57E\uA57F\uA580\uA581\uA582\uA583\uA584\uA585\uA586\uA587\uA588\uA589\uA58A\uA58B\uA58C\uA58D\uA58E\uA58F\uA590\uA591\uA592\uA593\uA594\uA595\uA596\uA597\uA598\uA599\uA59A\uA59B\uA59C\uA59D\uA59E\uA59F\uA5A0\uA5A1\uA5A2\uA5A3\uA5A4\uA5A5\uA5A6\uA5A7\uA5A8\uA5A9\uA5AA\uA5AB\uA5AC\uA5AD\uA5AE\uA5AF\uA5B0\uA5B1\uA5B2\uA5B3\uA5B4\uA5B5\uA5B6\uA5B7\uA5B8\uA5B9\uA5BA\uA5BB\uA5BC\uA5BD\uA5BE\uA5BF\uA5C0\uA5C1\uA5C2\uA5C3\uA5C4\uA5C5\uA5C6\uA5C7\uA5C8\uA5C9\uA5CA\uA5CB\uA5CC\uA5CD\uA5CE\uA5CF\uA5D0\uA5D1\uA5D2\uA5D3\uA5D4\uA5D5\uA5D6\uA5D7\uA5D8\uA5D9\uA5DA\uA5DB\uA5DC\uA5DD\uA5DE\uA5DF\uA5E0\uA5E1\uA5E2\uA5E3\uA5E4\uA5E5\uA5E6\uA5E7\uA5E8\uA5E9\uA5EA\uA5EB\uA5EC\uA5ED\uA5EE\uA5EF\uA5F0\uA5F1\uA5F2\uA5F3\uA5F4\uA5F5\uA5F6\uA5F7\uA5F8\uA5F9\uA5FA\uA5FB\uA5FC\uA5FD\uA5FE\uA5FF\uA600\uA601\uA602\uA603\uA604\uA605\uA606\uA607\uA608\uA609\uA60A\uA60B\uA610\uA611\uA612\uA613\uA614\uA615\uA616\uA617\uA618\uA619\uA61A\uA61B\uA61C\uA61D\uA61E\uA61F\uA62A\uA62B\uA66E\uA7FB\uA7FC\uA7FD\uA7FE\uA7FF\uA800\uA801\uA803\uA804\uA805\uA807\uA808\uA809\uA80A\uA80C\uA80D\uA80E\uA80F\uA810\uA811\uA812\uA813\uA814\uA815\uA816\uA817\uA818\uA819\uA81A\uA81B\uA81C\uA81D\uA81E\uA81F\uA820\uA821\uA822\uA840\uA841\uA842\uA843\uA844\uA845\uA846\uA847\uA848\uA849\uA84A\uA84B\uA84C\uA84D\uA84E\uA84F\uA850\uA851\uA852\uA853\uA854\uA855\uA856\uA857\uA858\uA859\uA85A\uA85B\uA85C\uA85D\uA85E\uA85F\uA860\uA861\uA862\uA863\uA864\uA865\uA866\uA867\uA868\uA869\uA86A\uA86B\uA86C\uA86D\uA86E\uA86F\uA870\uA871\uA872\uA873\uA882\uA883\uA884\uA885\uA886\uA887\uA888\uA889\uA88A\uA88B\uA88C\uA88D\uA88E\uA88F\uA890\uA891\uA892\uA893\uA894\uA895\uA896\uA897\uA898\uA899\uA89A\uA89B\uA89C\uA89D\uA89E\uA89F\uA8A0\uA8A1\uA8A2\uA8A3\uA8A4\uA8A5\uA8A6\uA8A7\uA8A8\uA8A9\uA8AA\uA8AB\uA8AC\uA8AD\uA8AE\uA8AF\uA8B0\uA8B1\uA8B2\uA8B3\uA90A\uA90B\uA90C\uA90D\uA90E\uA90F\uA910\uA911\uA912\uA913\uA914\uA915\uA916\uA917\uA918\uA919\uA91A\uA91B\uA91C\uA91D\uA91E\uA91F\uA920\uA921\uA922\uA923\uA924\uA925\uA930\uA931\uA932\uA933\uA934\uA935\uA936\uA937\uA938\uA939\uA93A\uA93B\uA93C\uA93D\uA93E\uA93F\uA940\uA941\uA942\uA943\uA944\uA945\uA946\uAA00\uAA01\uAA02\uAA03\uAA04\uAA05\uAA06\uAA07\uAA08\uAA09\uAA0A\uAA0B\uAA0C\uAA0D\uAA0E\uAA0F\uAA10\uAA11\uAA12\uAA13\uAA14\uAA15\uAA16\uAA17\uAA18\uAA19\uAA1A\uAA1B\uAA1C\uAA1D\uAA1E\uAA1F\uAA20\uAA21\uAA22\uAA23\uAA24\uAA25\uAA26\uAA27\uAA28\uAA40\uAA41\uAA42\uAA44\uAA45\uAA46\uAA47\uAA48\uAA49\uAA4A\uAA4B\uAC00\uD7A3\uF900\uF901\uF902\uF903\uF904\uF905\uF906\uF907\uF908\uF909\uF90A\uF90B\uF90C\uF90D\uF90E\uF90F\uF910\uF911\uF912\uF913\uF914\uF915\uF916\uF917\uF918\uF919\uF91A\uF91B\uF91C\uF91D\uF91E\uF91F\uF920\uF921\uF922\uF923\uF924\uF925\uF926\uF927\uF928\uF929\uF92A\uF92B\uF92C\uF92D\uF92E\uF92F\uF930\uF931\uF932\uF933\uF934\uF935\uF936\uF937\uF938\uF939\uF93A\uF93B\uF93C\uF93D\uF93E\uF93F\uF940\uF941\uF942\uF943\uF944\uF945\uF946\uF947\uF948\uF949\uF94A\uF94B\uF94C\uF94D\uF94E\uF94F\uF950\uF951\uF952\uF953\uF954\uF955\uF956\uF957\uF958\uF959\uF95A\uF95B\uF95C\uF95D\uF95E\uF95F\uF960\uF961\uF962\uF963\uF964\uF965\uF966\uF967\uF968\uF969\uF96A\uF96B\uF96C\uF96D\uF96E\uF96F\uF970\uF971\uF972\uF973\uF974\uF975\uF976\uF977\uF978\uF979\uF97A\uF97B\uF97C\uF97D\uF97E\uF97F\uF980\uF981\uF982\uF983\uF984\uF985\uF986\uF987\uF988\uF989\uF98A\uF98B\uF98C\uF98D\uF98E\uF98F\uF990\uF991\uF992\uF993\uF994\uF995\uF996\uF997\uF998\uF999\uF99A\uF99B\uF99C\uF99D\uF99E\uF99F\uF9A0\uF9A1\uF9A2\uF9A3\uF9A4\uF9A5\uF9A6\uF9A7\uF9A8\uF9A9\uF9AA\uF9AB\uF9AC\uF9AD\uF9AE\uF9AF\uF9B0\uF9B1\uF9B2\uF9B3\uF9B4\uF9B5\uF9B6\uF9B7\uF9B8\uF9B9\uF9BA\uF9BB\uF9BC\uF9BD\uF9BE\uF9BF\uF9C0\uF9C1\uF9C2\uF9C3\uF9C4\uF9C5\uF9C6\uF9C7\uF9C8\uF9C9\uF9CA\uF9CB\uF9CC\uF9CD\uF9CE\uF9CF\uF9D0\uF9D1\uF9D2\uF9D3\uF9D4\uF9D5\uF9D6\uF9D7\uF9D8\uF9D9\uF9DA\uF9DB\uF9DC\uF9DD\uF9DE\uF9DF\uF9E0\uF9E1\uF9E2\uF9E3\uF9E4\uF9E5\uF9E6\uF9E7\uF9E8\uF9E9\uF9EA\uF9EB\uF9EC\uF9ED\uF9EE\uF9EF\uF9F0\uF9F1\uF9F2\uF9F3\uF9F4\uF9F5\uF9F6\uF9F7\uF9F8\uF9F9\uF9FA\uF9FB\uF9FC\uF9FD\uF9FE\uF9FF\uFA00\uFA01\uFA02\uFA03\uFA04\uFA05\uFA06\uFA07\uFA08\uFA09\uFA0A\uFA0B\uFA0C\uFA0D\uFA0E\uFA0F\uFA10\uFA11\uFA12\uFA13\uFA14\uFA15\uFA16\uFA17\uFA18\uFA19\uFA1A\uFA1B\uFA1C\uFA1D\uFA1E\uFA1F\uFA20\uFA21\uFA22\uFA23\uFA24\uFA25\uFA26\uFA27\uFA28\uFA29\uFA2A\uFA2B\uFA2C\uFA2D\uFA30\uFA31\uFA32\uFA33\uFA34\uFA35\uFA36\uFA37\uFA38\uFA39\uFA3A\uFA3B\uFA3C\uFA3D\uFA3E\uFA3F\uFA40\uFA41\uFA42\uFA43\uFA44\uFA45\uFA46\uFA47\uFA48\uFA49\uFA4A\uFA4B\uFA4C\uFA4D\uFA4E\uFA4F\uFA50\uFA51\uFA52\uFA53\uFA54\uFA55\uFA56\uFA57\uFA58\uFA59\uFA5A\uFA5B\uFA5C\uFA5D\uFA5E\uFA5F\uFA60\uFA61\uFA62\uFA63\uFA64\uFA65\uFA66\uFA67\uFA68\uFA69\uFA6A\uFA70\uFA71\uFA72\uFA73\uFA74\uFA75\uFA76\uFA77\uFA78\uFA79\uFA7A\uFA7B\uFA7C\uFA7D\uFA7E\uFA7F\uFA80\uFA81\uFA82\uFA83\uFA84\uFA85\uFA86\uFA87\uFA88\uFA89\uFA8A\uFA8B\uFA8C\uFA8D\uFA8E\uFA8F\uFA90\uFA91\uFA92\uFA93\uFA94\uFA95\uFA96\uFA97\uFA98\uFA99\uFA9A\uFA9B\uFA9C\uFA9D\uFA9E\uFA9F\uFAA0\uFAA1\uFAA2\uFAA3\uFAA4\uFAA5\uFAA6\uFAA7\uFAA8\uFAA9\uFAAA\uFAAB\uFAAC\uFAAD\uFAAE\uFAAF\uFAB0\uFAB1\uFAB2\uFAB3\uFAB4\uFAB5\uFAB6\uFAB7\uFAB8\uFAB9\uFABA\uFABB\uFABC\uFABD\uFABE\uFABF\uFAC0\uFAC1\uFAC2\uFAC3\uFAC4\uFAC5\uFAC6\uFAC7\uFAC8\uFAC9\uFACA\uFACB\uFACC\uFACD\uFACE\uFACF\uFAD0\uFAD1\uFAD2\uFAD3\uFAD4\uFAD5\uFAD6\uFAD7\uFAD8\uFAD9\uFB1D\uFB1F\uFB20\uFB21\uFB22\uFB23\uFB24\uFB25\uFB26\uFB27\uFB28\uFB2A\uFB2B\uFB2C\uFB2D\uFB2E\uFB2F\uFB30\uFB31\uFB32\uFB33\uFB34\uFB35\uFB36\uFB38\uFB39\uFB3A\uFB3B\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46\uFB47\uFB48\uFB49\uFB4A\uFB4B\uFB4C\uFB4D\uFB4E\uFB4F\uFB50\uFB51\uFB52\uFB53\uFB54\uFB55\uFB56\uFB57\uFB58\uFB59\uFB5A\uFB5B\uFB5C\uFB5D\uFB5E\uFB5F\uFB60\uFB61\uFB62\uFB63\uFB64\uFB65\uFB66\uFB67\uFB68\uFB69\uFB6A\uFB6B\uFB6C\uFB6D\uFB6E\uFB6F\uFB70\uFB71\uFB72\uFB73\uFB74\uFB75\uFB76\uFB77\uFB78\uFB79\uFB7A\uFB7B\uFB7C\uFB7D\uFB7E\uFB7F\uFB80\uFB81\uFB82\uFB83\uFB84\uFB85\uFB86\uFB87\uFB88\uFB89\uFB8A\uFB8B\uFB8C\uFB8D\uFB8E\uFB8F\uFB90\uFB91\uFB92\uFB93\uFB94\uFB95\uFB96\uFB97\uFB98\uFB99\uFB9A\uFB9B\uFB9C\uFB9D\uFB9E\uFB9F\uFBA0\uFBA1\uFBA2\uFBA3\uFBA4\uFBA5\uFBA6\uFBA7\uFBA8\uFBA9\uFBAA\uFBAB\uFBAC\uFBAD\uFBAE\uFBAF\uFBB0\uFBB1\uFBD3\uFBD4\uFBD5\uFBD6\uFBD7\uFBD8\uFBD9\uFBDA\uFBDB\uFBDC\uFBDD\uFBDE\uFBDF\uFBE0\uFBE1\uFBE2\uFBE3\uFBE4\uFBE5\uFBE6\uFBE7\uFBE8\uFBE9\uFBEA\uFBEB\uFBEC\uFBED\uFBEE\uFBEF\uFBF0\uFBF1\uFBF2\uFBF3\uFBF4\uFBF5\uFBF6\uFBF7\uFBF8\uFBF9\uFBFA\uFBFB\uFBFC\uFBFD\uFBFE\uFBFF\uFC00\uFC01\uFC02\uFC03\uFC04\uFC05\uFC06\uFC07\uFC08\uFC09\uFC0A\uFC0B\uFC0C\uFC0D\uFC0E\uFC0F\uFC10\uFC11\uFC12\uFC13\uFC14\uFC15\uFC16\uFC17\uFC18\uFC19\uFC1A\uFC1B\uFC1C\uFC1D\uFC1E\uFC1F\uFC20\uFC21\uFC22\uFC23\uFC24\uFC25\uFC26\uFC27\uFC28\uFC29\uFC2A\uFC2B\uFC2C\uFC2D\uFC2E\uFC2F\uFC30\uFC31\uFC32\uFC33\uFC34\uFC35\uFC36\uFC37\uFC38\uFC39\uFC3A\uFC3B\uFC3C\uFC3D\uFC3E\uFC3F\uFC40\uFC41\uFC42\uFC43\uFC44\uFC45\uFC46\uFC47\uFC48\uFC49\uFC4A\uFC4B\uFC4C\uFC4D\uFC4E\uFC4F\uFC50\uFC51\uFC52\uFC53\uFC54\uFC55\uFC56\uFC57\uFC58\uFC59\uFC5A\uFC5B\uFC5C\uFC5D\uFC5E\uFC5F\uFC60\uFC61\uFC62\uFC63\uFC64\uFC65\uFC66\uFC67\uFC68\uFC69\uFC6A\uFC6B\uFC6C\uFC6D\uFC6E\uFC6F\uFC70\uFC71\uFC72\uFC73\uFC74\uFC75\uFC76\uFC77\uFC78\uFC79\uFC7A\uFC7B\uFC7C\uFC7D\uFC7E\uFC7F\uFC80\uFC81\uFC82\uFC83\uFC84\uFC85\uFC86\uFC87\uFC88\uFC89\uFC8A\uFC8B\uFC8C\uFC8D\uFC8E\uFC8F\uFC90\uFC91\uFC92\uFC93\uFC94\uFC95\uFC96\uFC97\uFC98\uFC99\uFC9A\uFC9B\uFC9C\uFC9D\uFC9E\uFC9F\uFCA0\uFCA1\uFCA2\uFCA3\uFCA4\uFCA5\uFCA6\uFCA7\uFCA8\uFCA9\uFCAA\uFCAB\uFCAC\uFCAD\uFCAE\uFCAF\uFCB0\uFCB1\uFCB2\uFCB3\uFCB4\uFCB5\uFCB6\uFCB7\uFCB8\uFCB9\uFCBA\uFCBB\uFCBC\uFCBD\uFCBE\uFCBF\uFCC0\uFCC1\uFCC2\uFCC3\uFCC4\uFCC5\uFCC6\uFCC7\uFCC8\uFCC9\uFCCA\uFCCB\uFCCC\uFCCD\uFCCE\uFCCF\uFCD0\uFCD1\uFCD2\uFCD3\uFCD4\uFCD5\uFCD6\uFCD7\uFCD8\uFCD9\uFCDA\uFCDB\uFCDC\uFCDD\uFCDE\uFCDF\uFCE0\uFCE1\uFCE2\uFCE3\uFCE4\uFCE5\uFCE6\uFCE7\uFCE8\uFCE9\uFCEA\uFCEB\uFCEC\uFCED\uFCEE\uFCEF\uFCF0\uFCF1\uFCF2\uFCF3\uFCF4\uFCF5\uFCF6\uFCF7\uFCF8\uFCF9\uFCFA\uFCFB\uFCFC\uFCFD\uFCFE\uFCFF\uFD00\uFD01\uFD02\uFD03\uFD04\uFD05\uFD06\uFD07\uFD08\uFD09\uFD0A\uFD0B\uFD0C\uFD0D\uFD0E\uFD0F\uFD10\uFD11\uFD12\uFD13\uFD14\uFD15\uFD16\uFD17\uFD18\uFD19\uFD1A\uFD1B\uFD1C\uFD1D\uFD1E\uFD1F\uFD20\uFD21\uFD22\uFD23\uFD24\uFD25\uFD26\uFD27\uFD28\uFD29\uFD2A\uFD2B\uFD2C\uFD2D\uFD2E\uFD2F\uFD30\uFD31\uFD32\uFD33\uFD34\uFD35\uFD36\uFD37\uFD38\uFD39\uFD3A\uFD3B\uFD3C\uFD3D\uFD50\uFD51\uFD52\uFD53\uFD54\uFD55\uFD56\uFD57\uFD58\uFD59\uFD5A\uFD5B\uFD5C\uFD5D\uFD5E\uFD5F\uFD60\uFD61\uFD62\uFD63\uFD64\uFD65\uFD66\uFD67\uFD68\uFD69\uFD6A\uFD6B\uFD6C\uFD6D\uFD6E\uFD6F\uFD70\uFD71\uFD72\uFD73\uFD74\uFD75\uFD76\uFD77\uFD78\uFD79\uFD7A\uFD7B\uFD7C\uFD7D\uFD7E\uFD7F\uFD80\uFD81\uFD82\uFD83\uFD84\uFD85\uFD86\uFD87\uFD88\uFD89\uFD8A\uFD8B\uFD8C\uFD8D\uFD8E\uFD8F\uFD92\uFD93\uFD94\uFD95\uFD96\uFD97\uFD98\uFD99\uFD9A\uFD9B\uFD9C\uFD9D\uFD9E\uFD9F\uFDA0\uFDA1\uFDA2\uFDA3\uFDA4\uFDA5\uFDA6\uFDA7\uFDA8\uFDA9\uFDAA\uFDAB\uFDAC\uFDAD\uFDAE\uFDAF\uFDB0\uFDB1\uFDB2\uFDB3\uFDB4\uFDB5\uFDB6\uFDB7\uFDB8\uFDB9\uFDBA\uFDBB\uFDBC\uFDBD\uFDBE\uFDBF\uFDC0\uFDC1\uFDC2\uFDC3\uFDC4\uFDC5\uFDC6\uFDC7\uFDF0\uFDF1\uFDF2\uFDF3\uFDF4\uFDF5\uFDF6\uFDF7\uFDF8\uFDF9\uFDFA\uFDFB\uFE70\uFE71\uFE72\uFE73\uFE74\uFE76\uFE77\uFE78\uFE79\uFE7A\uFE7B\uFE7C\uFE7D\uFE7E\uFE7F\uFE80\uFE81\uFE82\uFE83\uFE84\uFE85\uFE86\uFE87\uFE88\uFE89\uFE8A\uFE8B\uFE8C\uFE8D\uFE8E\uFE8F\uFE90\uFE91\uFE92\uFE93\uFE94\uFE95\uFE96\uFE97\uFE98\uFE99\uFE9A\uFE9B\uFE9C\uFE9D\uFE9E\uFE9F\uFEA0\uFEA1\uFEA2\uFEA3\uFEA4\uFEA5\uFEA6\uFEA7\uFEA8\uFEA9\uFEAA\uFEAB\uFEAC\uFEAD\uFEAE\uFEAF\uFEB0\uFEB1\uFEB2\uFEB3\uFEB4\uFEB5\uFEB6\uFEB7\uFEB8\uFEB9\uFEBA\uFEBB\uFEBC\uFEBD\uFEBE\uFEBF\uFEC0\uFEC1\uFEC2\uFEC3\uFEC4\uFEC5\uFEC6\uFEC7\uFEC8\uFEC9\uFECA\uFECB\uFECC\uFECD\uFECE\uFECF\uFED0\uFED1\uFED2\uFED3\uFED4\uFED5\uFED6\uFED7\uFED8\uFED9\uFEDA\uFEDB\uFEDC\uFEDD\uFEDE\uFEDF\uFEE0\uFEE1\uFEE2\uFEE3\uFEE4\uFEE5\uFEE6\uFEE7\uFEE8\uFEE9\uFEEA\uFEEB\uFEEC\uFEED\uFEEE\uFEEF\uFEF0\uFEF1\uFEF2\uFEF3\uFEF4\uFEF5\uFEF6\uFEF7\uFEF8\uFEF9\uFEFA\uFEFB\uFEFC\uFF66\uFF67\uFF68\uFF69\uFF6A\uFF6B\uFF6C\uFF6D\uFF6E\uFF6F\uFF71\uFF72\uFF73\uFF74\uFF75\uFF76\uFF77\uFF78\uFF79\uFF7A\uFF7B\uFF7C\uFF7D\uFF7E\uFF7F\uFF80\uFF81\uFF82\uFF83\uFF84\uFF85\uFF86\uFF87\uFF88\uFF89\uFF8A\uFF8B\uFF8C\uFF8D\uFF8E\uFF8F\uFF90\uFF91\uFF92\uFF93\uFF94\uFF95\uFF96\uFF97\uFF98\uFF99\uFF9A\uFF9B\uFF9C\uFF9D\uFFA0\uFFA1\uFFA2\uFFA3\uFFA4\uFFA5\uFFA6\uFFA7\uFFA8\uFFA9\uFFAA\uFFAB\uFFAC\uFFAD\uFFAE\uFFAF\uFFB0\uFFB1\uFFB2\uFFB3\uFFB4\uFFB5\uFFB6\uFFB7\uFFB8\uFFB9\uFFBA\uFFBB\uFFBC\uFFBD\uFFBE\uFFC2\uFFC3\uFFC4\uFFC5\uFFC6\uFFC7\uFFCA\uFFCB\uFFCC\uFFCD\uFFCE\uFFCF\uFFD2\uFFD3\uFFD4\uFFD5\uFFD6\uFFD7\uFFDA\uFFDB\uFFDC]
-
-// Letter, Titlecase
-Lt = [\u01C5\u01C8\u01CB\u01F2\u1F88\u1F89\u1F8A\u1F8B\u1F8C\u1F8D\u1F8E\u1F8F\u1F98\u1F99\u1F9A\u1F9B\u1F9C\u1F9D\u1F9E\u1F9F\u1FA8\u1FA9\u1FAA\u1FAB\u1FAC\u1FAD\u1FAE\u1FAF\u1FBC\u1FCC\u1FFC]
-
-// Letter, Uppercase
-Lu = [\u0041\u0042\u0043\u0044\u0045\u0046\u0047\u0048\u0049\u004A\u004B\u004C\u004D\u004E\u004F\u0050\u0051\u0052\u0053\u0054\u0055\u0056\u0057\u0058\u0059\u005A\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u00D0\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u00D8\u00D9\u00DA\u00DB\u00DC\u00DD\u00DE\u0100\u0102\u0104\u0106\u0108\u010A\u010C\u010E\u0110\u0112\u0114\u0116\u0118\u011A\u011C\u011E\u0120\u0122\u0124\u0126\u0128\u012A\u012C\u012E\u0130\u0132\u0134\u0136\u0139\u013B\u013D\u013F\u0141\u0143\u0145\u0147\u014A\u014C\u014E\u0150\u0152\u0154\u0156\u0158\u015A\u015C\u015E\u0160\u0162\u0164\u0166\u0168\u016A\u016C\u016E\u0170\u0172\u0174\u0176\u0178\u0179\u017B\u017D\u0181\u0182\u0184\u0186\u0187\u0189\u018A\u018B\u018E\u018F\u0190\u0191\u0193\u0194\u0196\u0197\u0198\u019C\u019D\u019F\u01A0\u01A2\u01A4\u01A6\u01A7\u01A9\u01AC\u01AE\u01AF\u01B1\u01B2\u01B3\u01B5\u01B7\u01B8\u01BC\u01C4\u01C7\u01CA\u01CD\u01CF\u01D1\u01D3\u01D5\u01D7\u01D9\u01DB\u01DE\u01E0\u01E2\u01E4\u01E6\u01E8\u01EA\u01EC\u01EE\u01F1\u01F4\u01F6\u01F7\u01F8\u01FA\u01FC\u01FE\u0200\u0202\u0204\u0206\u0208\u020A\u020C\u020E\u0210\u0212\u0214\u0216\u0218\u021A\u021C\u021E\u0220\u0222\u0224\u0226\u0228\u022A\u022C\u022E\u0230\u0232\u023A\u023B\u023D\u023E\u0241\u0243\u0244\u0245\u0246\u0248\u024A\u024C\u024E\u0370\u0372\u0376\u0386\u0388\u0389\u038A\u038C\u038E\u038F\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u0398\u0399\u039A\u039B\u039C\u039D\u039E\u039F\u03A0\u03A1\u03A3\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9\u03AA\u03AB\u03CF\u03D2\u03D3\u03D4\u03D8\u03DA\u03DC\u03DE\u03E0\u03E2\u03E4\u03E6\u03E8\u03EA\u03EC\u03EE\u03F4\u03F7\u03F9\u03FA\u03FD\u03FE\u03FF\u0400\u0401\u0402\u0403\u0404\u0405\u0406\u0407\u0408\u0409\u040A\u040B\u040C\u040D\u040E\u040F\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0460\u0462\u0464\u0466\u0468\u046A\u046C\u046E\u0470\u0472\u0474\u0476\u0478\u047A\u047C\u047E\u0480\u048A\u048C\u048E\u0490\u0492\u0494\u0496\u0498\u049A\u049C\u049E\u04A0\u04A2\u04A4\u04A6\u04A8\u04AA\u04AC\u04AE\u04B0\u04B2\u04B4\u04B6\u04B8\u04BA\u04BC\u04BE\u04C0\u04C1\u04C3\u04C5\u04C7\u04C9\u04CB\u04CD\u04D0\u04D2\u04D4\u04D6\u04D8\u04DA\u04DC\u04DE\u04E0\u04E2\u04E4\u04E6\u04E8\u04EA\u04EC\u04EE\u04F0\u04F2\u04F4\u04F6\u04F8\u04FA\u04FC\u04FE\u0500\u0502\u0504\u0506\u0508\u050A\u050C\u050E\u0510\u0512\u0514\u0516\u0518\u051A\u051C\u051E\u0520\u0522\u0531\u0532\u0533\u0534\u0535\u0536\u0537\u0538\u0539\u053A\u053B\u053C\u053D\u053E\u053F\u0540\u0541\u0542\u0543\u0544\u0545\u0546\u0547\u0548\u0549\u054A\u054B\u054C\u054D\u054E\u054F\u0550\u0551\u0552\u0553\u0554\u0555\u0556\u10A0\u10A1\u10A2\u10A3\u10A4\u10A5\u10A6\u10A7\u10A8\u10A9\u10AA\u10AB\u10AC\u10AD\u10AE\u10AF\u10B0\u10B1\u10B2\u10B3\u10B4\u10B5\u10B6\u10B7\u10B8\u10B9\u10BA\u10BB\u10BC\u10BD\u10BE\u10BF\u10C0\u10C1\u10C2\u10C3\u10C4\u10C5\u1E00\u1E02\u1E04\u1E06\u1E08\u1E0A\u1E0C\u1E0E\u1E10\u1E12\u1E14\u1E16\u1E18\u1E1A\u1E1C\u1E1E\u1E20\u1E22\u1E24\u1E26\u1E28\u1E2A\u1E2C\u1E2E\u1E30\u1E32\u1E34\u1E36\u1E38\u1E3A\u1E3C\u1E3E\u1E40\u1E42\u1E44\u1E46\u1E48\u1E4A\u1E4C\u1E4E\u1E50\u1E52\u1E54\u1E56\u1E58\u1E5A\u1E5C\u1E5E\u1E60\u1E62\u1E64\u1E66\u1E68\u1E6A\u1E6C\u1E6E\u1E70\u1E72\u1E74\u1E76\u1E78\u1E7A\u1E7C\u1E7E\u1E80\u1E82\u1E84\u1E86\u1E88\u1E8A\u1E8C\u1E8E\u1E90\u1E92\u1E94\u1E9E\u1EA0\u1EA2\u1EA4\u1EA6\u1EA8\u1EAA\u1EAC\u1EAE\u1EB0\u1EB2\u1EB4\u1EB6\u1EB8\u1EBA\u1EBC\u1EBE\u1EC0\u1EC2\u1EC4\u1EC6\u1EC8\u1ECA\u1ECC\u1ECE\u1ED0\u1ED2\u1ED4\u1ED6\u1ED8\u1EDA\u1EDC\u1EDE\u1EE0\u1EE2\u1EE4\u1EE6\u1EE8\u1EEA\u1EEC\u1EEE\u1EF0\u1EF2\u1EF4\u1EF6\u1EF8\u1EFA\u1EFC\u1EFE\u1F08\u1F09\u1F0A\u1F0B\u1F0C\u1F0D\u1F0E\u1F0F\u1F18\u1F19\u1F1A\u1F1B\u1F1C\u1F1D\u1F28\u1F29\u1F2A\u1F2B\u1F2C\u1F2D\u1F2E\u1F2F\u1F38\u1F39\u1F3A\u1F3B\u1F3C\u1F3D\u1F3E\u1F3F\u1F48\u1F49\u1F4A\u1F4B\u1F4C\u1F4D\u1F59\u1F5B\u1F5D\u1F5F\u1F68\u1F69\u1F6A\u1F6B\u1F6C\u1F6D\u1F6E\u1F6F\u1FB8\u1FB9\u1FBA\u1FBB\u1FC8\u1FC9\u1FCA\u1FCB\u1FD8\u1FD9\u1FDA\u1FDB\u1FE8\u1FE9\u1FEA\u1FEB\u1FEC\u1FF8\u1FF9\u1FFA\u1FFB\u2102\u2107\u210B\u210C\u210D\u2110\u2111\u2112\u2115\u2119\u211A\u211B\u211C\u211D\u2124\u2126\u2128\u212A\u212B\u212C\u212D\u2130\u2131\u2132\u2133\u213E\u213F\u2145\u2183\u2C00\u2C01\u2C02\u2C03\u2C04\u2C05\u2C06\u2C07\u2C08\u2C09\u2C0A\u2C0B\u2C0C\u2C0D\u2C0E\u2C0F\u2C10\u2C11\u2C12\u2C13\u2C14\u2C15\u2C16\u2C17\u2C18\u2C19\u2C1A\u2C1B\u2C1C\u2C1D\u2C1E\u2C1F\u2C20\u2C21\u2C22\u2C23\u2C24\u2C25\u2C26\u2C27\u2C28\u2C29\u2C2A\u2C2B\u2C2C\u2C2D\u2C2E\u2C60\u2C62\u2C63\u2C64\u2C67\u2C69\u2C6B\u2C6D\u2C6E\u2C6F\u2C72\u2C75\u2C80\u2C82\u2C84\u2C86\u2C88\u2C8A\u2C8C\u2C8E\u2C90\u2C92\u2C94\u2C96\u2C98\u2C9A\u2C9C\u2C9E\u2CA0\u2CA2\u2CA4\u2CA6\u2CA8\u2CAA\u2CAC\u2CAE\u2CB0\u2CB2\u2CB4\u2CB6\u2CB8\u2CBA\u2CBC\u2CBE\u2CC0\u2CC2\u2CC4\u2CC6\u2CC8\u2CCA\u2CCC\u2CCE\u2CD0\u2CD2\u2CD4\u2CD6\u2CD8\u2CDA\u2CDC\u2CDE\u2CE0\u2CE2\uA640\uA642\uA644\uA646\uA648\uA64A\uA64C\uA64E\uA650\uA652\uA654\uA656\uA658\uA65A\uA65C\uA65E\uA662\uA664\uA666\uA668\uA66A\uA66C\uA680\uA682\uA684\uA686\uA688\uA68A\uA68C\uA68E\uA690\uA692\uA694\uA696\uA722\uA724\uA726\uA728\uA72A\uA72C\uA72E\uA732\uA734\uA736\uA738\uA73A\uA73C\uA73E\uA740\uA742\uA744\uA746\uA748\uA74A\uA74C\uA74E\uA750\uA752\uA754\uA756\uA758\uA75A\uA75C\uA75E\uA760\uA762\uA764\uA766\uA768\uA76A\uA76C\uA76E\uA779\uA77B\uA77D\uA77E\uA780\uA782\uA784\uA786\uA78B\uFF21\uFF22\uFF23\uFF24\uFF25\uFF26\uFF27\uFF28\uFF29\uFF2A\uFF2B\uFF2C\uFF2D\uFF2E\uFF2F\uFF30\uFF31\uFF32\uFF33\uFF34\uFF35\uFF36\uFF37\uFF38\uFF39\uFF3A]
-
-// Mark, Spacing Combining
-Mc = [\u0903\u093E\u093F\u0940\u0949\u094A\u094B\u094C\u0982\u0983\u09BE\u09BF\u09C0\u09C7\u09C8\u09CB\u09CC\u09D7\u0A03\u0A3E\u0A3F\u0A40\u0A83\u0ABE\u0ABF\u0AC0\u0AC9\u0ACB\u0ACC\u0B02\u0B03\u0B3E\u0B40\u0B47\u0B48\u0B4B\u0B4C\u0B57\u0BBE\u0BBF\u0BC1\u0BC2\u0BC6\u0BC7\u0BC8\u0BCA\u0BCB\u0BCC\u0BD7\u0C01\u0C02\u0C03\u0C41\u0C42\u0C43\u0C44\u0C82\u0C83\u0CBE\u0CC0\u0CC1\u0CC2\u0CC3\u0CC4\u0CC7\u0CC8\u0CCA\u0CCB\u0CD5\u0CD6\u0D02\u0D03\u0D3E\u0D3F\u0D40\u0D46\u0D47\u0D48\u0D4A\u0D4B\u0D4C\u0D57\u0D82\u0D83\u0DCF\u0DD0\u0DD1\u0DD8\u0DD9\u0DDA\u0DDB\u0DDC\u0DDD\u0DDE\u0DDF\u0DF2\u0DF3\u0F3E\u0F3F\u0F7F\u102B\u102C\u1031\u1038\u103B\u103C\u1056\u1057\u1062\u1063\u1064\u1067\u1068\u1069\u106A\u106B\u106C\u106D\u1083\u1084\u1087\u1088\u1089\u108A\u108B\u108C\u108F\u17B6\u17BE\u17BF\u17C0\u17C1\u17C2\u17C3\u17C4\u17C5\u17C7\u17C8\u1923\u1924\u1925\u1926\u1929\u192A\u192B\u1930\u1931\u1933\u1934\u1935\u1936\u1937\u1938\u19B0\u19B1\u19B2\u19B3\u19B4\u19B5\u19B6\u19B7\u19B8\u19B9\u19BA\u19BB\u19BC\u19BD\u19BE\u19BF\u19C0\u19C8\u19C9\u1A19\u1A1A\u1A1B\u1B04\u1B35\u1B3B\u1B3D\u1B3E\u1B3F\u1B40\u1B41\u1B43\u1B44\u1B82\u1BA1\u1BA6\u1BA7\u1BAA\u1C24\u1C25\u1C26\u1C27\u1C28\u1C29\u1C2A\u1C2B\u1C34\u1C35\uA823\uA824\uA827\uA880\uA881\uA8B4\uA8B5\uA8B6\uA8B7\uA8B8\uA8B9\uA8BA\uA8BB\uA8BC\uA8BD\uA8BE\uA8BF\uA8C0\uA8C1\uA8C2\uA8C3\uA952\uA953\uAA2F\uAA30\uAA33\uAA34\uAA4D]
-
-// Mark, Nonspacing
-Mn = [\u0300\u0301\u0302\u0303\u0304\u0305\u0306\u0307\u0308\u0309\u030A\u030B\u030C\u030D\u030E\u030F\u0310\u0311\u0312\u0313\u0314\u0315\u0316\u0317\u0318\u0319\u031A\u031B\u031C\u031D\u031E\u031F\u0320\u0321\u0322\u0323\u0324\u0325\u0326\u0327\u0328\u0329\u032A\u032B\u032C\u032D\u032E\u032F\u0330\u0331\u0332\u0333\u0334\u0335\u0336\u0337\u0338\u0339\u033A\u033B\u033C\u033D\u033E\u033F\u0340\u0341\u0342\u0343\u0344\u0345\u0346\u0347\u0348\u0349\u034A\u034B\u034C\u034D\u034E\u034F\u0350\u0351\u0352\u0353\u0354\u0355\u0356\u0357\u0358\u0359\u035A\u035B\u035C\u035D\u035E\u035F\u0360\u0361\u0362\u0363\u0364\u0365\u0366\u0367\u0368\u0369\u036A\u036B\u036C\u036D\u036E\u036F\u0483\u0484\u0485\u0486\u0487\u0591\u0592\u0593\u0594\u0595\u0596\u0597\u0598\u0599\u059A\u059B\u059C\u059D\u059E\u059F\u05A0\u05A1\u05A2\u05A3\u05A4\u05A5\u05A6\u05A7\u05A8\u05A9\u05AA\u05AB\u05AC\u05AD\u05AE\u05AF\u05B0\u05B1\u05B2\u05B3\u05B4\u05B5\u05B6\u05B7\u05B8\u05B9\u05BA\u05BB\u05BC\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610\u0611\u0612\u0613\u0614\u0615\u0616\u0617\u0618\u0619\u061A\u064B\u064C\u064D\u064E\u064F\u0650\u0651\u0652\u0653\u0654\u0655\u0656\u0657\u0658\u0659\u065A\u065B\u065C\u065D\u065E\u0670\u06D6\u06D7\u06D8\u06D9\u06DA\u06DB\u06DC\u06DF\u06E0\u06E1\u06E2\u06E3\u06E4\u06E7\u06E8\u06EA\u06EB\u06EC\u06ED\u0711\u0730\u0731\u0732\u0733\u0734\u0735\u0736\u0737\u0738\u0739\u073A\u073B\u073C\u073D\u073E\u073F\u0740\u0741\u0742\u0743\u0744\u0745\u0746\u0747\u0748\u0749\u074A\u07A6\u07A7\u07A8\u07A9\u07AA\u07AB\u07AC\u07AD\u07AE\u07AF\u07B0\u07EB\u07EC\u07ED\u07EE\u07EF\u07F0\u07F1\u07F2\u07F3\u0901\u0902\u093C\u0941\u0942\u0943\u0944\u0945\u0946\u0947\u0948\u094D\u0951\u0952\u0953\u0954\u0962\u0963\u0981\u09BC\u09C1\u09C2\u09C3\u09C4\u09CD\u09E2\u09E3\u0A01\u0A02\u0A3C\u0A41\u0A42\u0A47\u0A48\u0A4B\u0A4C\u0A4D\u0A51\u0A70\u0A71\u0A75\u0A81\u0A82\u0ABC\u0AC1\u0AC2\u0AC3\u0AC4\u0AC5\u0AC7\u0AC8\u0ACD\u0AE2\u0AE3\u0B01\u0B3C\u0B3F\u0B41\u0B42\u0B43\u0B44\u0B4D\u0B56\u0B62\u0B63\u0B82\u0BC0\u0BCD\u0C3E\u0C3F\u0C40\u0C46\u0C47\u0C48\u0C4A\u0C4B\u0C4C\u0C4D\u0C55\u0C56\u0C62\u0C63\u0CBC\u0CBF\u0CC6\u0CCC\u0CCD\u0CE2\u0CE3\u0D41\u0D42\u0D43\u0D44\u0D4D\u0D62\u0D63\u0DCA\u0DD2\u0DD3\u0DD4\u0DD6\u0E31\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0EB1\u0EB4\u0EB5\u0EB6\u0EB7\u0EB8\u0EB9\u0EBB\u0EBC\u0EC8\u0EC9\u0ECA\u0ECB\u0ECC\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39\u0F71\u0F72\u0F73\u0F74\u0F75\u0F76\u0F77\u0F78\u0F79\u0F7A\u0F7B\u0F7C\u0F7D\u0F7E\u0F80\u0F81\u0F82\u0F83\u0F84\u0F86\u0F87\u0F90\u0F91\u0F92\u0F93\u0F94\u0F95\u0F96\u0F97\u0F99\u0F9A\u0F9B\u0F9C\u0F9D\u0F9E\u0F9F\u0FA0\u0FA1\u0FA2\u0FA3\u0FA4\u0FA5\u0FA6\u0FA7\u0FA8\u0FA9\u0FAA\u0FAB\u0FAC\u0FAD\u0FAE\u0FAF\u0FB0\u0FB1\u0FB2\u0FB3\u0FB4\u0FB5\u0FB6\u0FB7\u0FB8\u0FB9\u0FBA\u0FBB\u0FBC\u0FC6\u102D\u102E\u102F\u1030\u1032\u1033\u1034\u1035\u1036\u1037\u1039\u103A\u103D\u103E\u1058\u1059\u105E\u105F\u1060\u1071\u1072\u1073\u1074\u1082\u1085\u1086\u108D\u135F\u1712\u1713\u1714\u1732\u1733\u1734\u1752\u1753\u1772\u1773\u17B7\u17B8\u17B9\u17BA\u17BB\u17BC\u17BD\u17C6\u17C9\u17CA\u17CB\u17CC\u17CD\u17CE\u17CF\u17D0\u17D1\u17D2\u17D3\u17DD\u180B\u180C\u180D\u18A9\u1920\u1921\u1922\u1927\u1928\u1932\u1939\u193A\u193B\u1A17\u1A18\u1B00\u1B01\u1B02\u1B03\u1B34\u1B36\u1B37\u1B38\u1B39\u1B3A\u1B3C\u1B42\u1B6B\u1B6C\u1B6D\u1B6E\u1B6F\u1B70\u1B71\u1B72\u1B73\u1B80\u1B81\u1BA2\u1BA3\u1BA4\u1BA5\u1BA8\u1BA9\u1C2C\u1C2D\u1C2E\u1C2F\u1C30\u1C31\u1C32\u1C33\u1C36\u1C37\u1DC0\u1DC1\u1DC2\u1DC3\u1DC4\u1DC5\u1DC6\u1DC7\u1DC8\u1DC9\u1DCA\u1DCB\u1DCC\u1DCD\u1DCE\u1DCF\u1DD0\u1DD1\u1DD2\u1DD3\u1DD4\u1DD5\u1DD6\u1DD7\u1DD8\u1DD9\u1DDA\u1DDB\u1DDC\u1DDD\u1DDE\u1DDF\u1DE0\u1DE1\u1DE2\u1DE3\u1DE4\u1DE5\u1DE6\u1DFE\u1DFF\u20D0\u20D1\u20D2\u20D3\u20D4\u20D5\u20D6\u20D7\u20D8\u20D9\u20DA\u20DB\u20DC\u20E1\u20E5\u20E6\u20E7\u20E8\u20E9\u20EA\u20EB\u20EC\u20ED\u20EE\u20EF\u20F0\u2DE0\u2DE1\u2DE2\u2DE3\u2DE4\u2DE5\u2DE6\u2DE7\u2DE8\u2DE9\u2DEA\u2DEB\u2DEC\u2DED\u2DEE\u2DEF\u2DF0\u2DF1\u2DF2\u2DF3\u2DF4\u2DF5\u2DF6\u2DF7\u2DF8\u2DF9\u2DFA\u2DFB\u2DFC\u2DFD\u2DFE\u2DFF\u302A\u302B\u302C\u302D\u302E\u302F\u3099\u309A\uA66F\uA67C\uA67D\uA802\uA806\uA80B\uA825\uA826\uA8C4\uA926\uA927\uA928\uA929\uA92A\uA92B\uA92C\uA92D\uA947\uA948\uA949\uA94A\uA94B\uA94C\uA94D\uA94E\uA94F\uA950\uA951\uAA29\uAA2A\uAA2B\uAA2C\uAA2D\uAA2E\uAA31\uAA32\uAA35\uAA36\uAA43\uAA4C\uFB1E\uFE00\uFE01\uFE02\uFE03\uFE04\uFE05\uFE06\uFE07\uFE08\uFE09\uFE0A\uFE0B\uFE0C\uFE0D\uFE0E\uFE0F\uFE20\uFE21\uFE22\uFE23\uFE24\uFE25\uFE26]
-
-// Number, Decimal Digit
-Nd = [\u0030\u0031\u0032\u0033\u0034\u0035\u0036\u0037\u0038\u0039\u0660\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669\u06F0\u06F1\u06F2\u06F3\u06F4\u06F5\u06F6\u06F7\u06F8\u06F9\u07C0\u07C1\u07C2\u07C3\u07C4\u07C5\u07C6\u07C7\u07C8\u07C9\u0966\u0967\u0968\u0969\u096A\u096B\u096C\u096D\u096E\u096F\u09E6\u09E7\u09E8\u09E9\u09EA\u09EB\u09EC\u09ED\u09EE\u09EF\u0A66\u0A67\u0A68\u0A69\u0A6A\u0A6B\u0A6C\u0A6D\u0A6E\u0A6F\u0AE6\u0AE7\u0AE8\u0AE9\u0AEA\u0AEB\u0AEC\u0AED\u0AEE\u0AEF\u0B66\u0B67\u0B68\u0B69\u0B6A\u0B6B\u0B6C\u0B6D\u0B6E\u0B6F\u0BE6\u0BE7\u0BE8\u0BE9\u0BEA\u0BEB\u0BEC\u0BED\u0BEE\u0BEF\u0C66\u0C67\u0C68\u0C69\u0C6A\u0C6B\u0C6C\u0C6D\u0C6E\u0C6F\u0CE6\u0CE7\u0CE8\u0CE9\u0CEA\u0CEB\u0CEC\u0CED\u0CEE\u0CEF\u0D66\u0D67\u0D68\u0D69\u0D6A\u0D6B\u0D6C\u0D6D\u0D6E\u0D6F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u0ED0\u0ED1\u0ED2\u0ED3\u0ED4\u0ED5\u0ED6\u0ED7\u0ED8\u0ED9\u0F20\u0F21\u0F22\u0F23\u0F24\u0F25\u0F26\u0F27\u0F28\u0F29\u1040\u1041\u1042\u1043\u1044\u1045\u1046\u1047\u1048\u1049\u1090\u1091\u1092\u1093\u1094\u1095\u1096\u1097\u1098\u1099\u17E0\u17E1\u17E2\u17E3\u17E4\u17E5\u17E6\u17E7\u17E8\u17E9\u1810\u1811\u1812\u1813\u1814\u1815\u1816\u1817\u1818\u1819\u1946\u1947\u1948\u1949\u194A\u194B\u194C\u194D\u194E\u194F\u19D0\u19D1\u19D2\u19D3\u19D4\u19D5\u19D6\u19D7\u19D8\u19D9\u1B50\u1B51\u1B52\u1B53\u1B54\u1B55\u1B56\u1B57\u1B58\u1B59\u1BB0\u1BB1\u1BB2\u1BB3\u1BB4\u1BB5\u1BB6\u1BB7\u1BB8\u1BB9\u1C40\u1C41\u1C42\u1C43\u1C44\u1C45\u1C46\u1C47\u1C48\u1C49\u1C50\u1C51\u1C52\u1C53\u1C54\u1C55\u1C56\u1C57\u1C58\u1C59\uA620\uA621\uA622\uA623\uA624\uA625\uA626\uA627\uA628\uA629\uA8D0\uA8D1\uA8D2\uA8D3\uA8D4\uA8D5\uA8D6\uA8D7\uA8D8\uA8D9\uA900\uA901\uA902\uA903\uA904\uA905\uA906\uA907\uA908\uA909\uAA50\uAA51\uAA52\uAA53\uAA54\uAA55\uAA56\uAA57\uAA58\uAA59\uFF10\uFF11\uFF12\uFF13\uFF14\uFF15\uFF16\uFF17\uFF18\uFF19]
-
-// Number, Letter
-Nl = [\u16EE\u16EF\u16F0\u2160\u2161\u2162\u2163\u2164\u2165\u2166\u2167\u2168\u2169\u216A\u216B\u216C\u216D\u216E\u216F\u2170\u2171\u2172\u2173\u2174\u2175\u2176\u2177\u2178\u2179\u217A\u217B\u217C\u217D\u217E\u217F\u2180\u2181\u2182\u2185\u2186\u2187\u2188\u3007\u3021\u3022\u3023\u3024\u3025\u3026\u3027\u3028\u3029\u3038\u3039\u303A]
-
-// Punctuation, Connector
-Pc = [\u005F\u203F\u2040\u2054\uFE33\uFE34\uFE4D\uFE4E\uFE4F\uFF3F]
-
-// Separator, Space
-Zs = [\u0020\u00A0\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000]
-
-/* Automatic Semicolon Insertion */
-
-EOS
-  = __ ";"
-  / _ LineTerminatorSequence
-  / _ &"}"
-  / __ EOF
-
-EOSNoLineTerminator
-  = _ ";"
-  / _ LineTerminatorSequence
-  / _ &"}"
-  / _ EOF
-
-EOF
-  = !.
-
-/* Whitespace */
-
-_
-  = (WhiteSpace / MultiLineCommentNoLineTerminator / SingleLineComment)*
-
-__
-  = (WhiteSpace / LineTerminatorSequence / Comment)*
-
-/* ===== A.2 Number Conversions ===== */
-
-/*
- * Rules from this section are either unused or merged into previous section of
- * the grammar.
- */
-
-/* ===== A.3 Expressions ===== */
-
-PrimaryExpression
-  = ThisToken       { return { type: "This" }; }
-  / name:Identifier { return { type: "Variable", name: name }; }
-  / Literal
-  / ArrayLiteral
-  / ObjectLiteral
-  / "(" __ expression:Expression __ ")" { return expression; }
-
-ArrayLiteral
-  = "[" __ elements:ElementList? __ (Elision __)? "]" {
-      return {
-        type:     "ArrayLiteral",
-        elements: elements !== "" ? elements : []
-      };
-    }
-
-ElementList
-  = (Elision __)?
-    head:AssignmentExpression
-    tail:(__ "," __ Elision? __ AssignmentExpression)* {
-      var result = [head];
-      for (var i = 0; i < tail.length; i++) {
-        result.push(tail[i][5]);
-      }
-      return result;
-    }
-
-Elision
-  = "," (__ ",")*
-
-ObjectLiteral
-  = "{" __ properties:(PropertyNameAndValueList __ ("," __)?)? "}" {
-      return {
-        type:       "ObjectLiteral",
-        properties: properties !== "" ? properties[0] : []
-      };
-    }
-
-PropertyNameAndValueList
-  = head:PropertyAssignment tail:(__ "," __ PropertyAssignment)* {
-      var result = [head];
-      for (var i = 0; i < tail.length; i++) {
-        result.push(tail[i][3]);
-      }
-      return result;
-    }
-
-PropertyAssignment
-  = name:PropertyName __ ":" __ value:AssignmentExpression {
-      return {
-        type:  "PropertyAssignment",
-        name:  name,
-        value: value
-      };
-    }
-  / GetToken __ name:PropertyName __
-    "(" __ ")" __
-    "{" __ body:FunctionBody __ "}" {
-      return {
-        type: "GetterDefinition",
-        name: name,
-        body: body
-      };
-    }
-  / SetToken __ name:PropertyName __
-    "(" __ param:PropertySetParameterList __ ")" __
-    "{" __ body:FunctionBody __ "}" {
-      return {
-        type:  "SetterDefinition",
-        name:  name,
-        param: param,
-        body:  body
-      };
-    }
-
-PropertyName
-  = IdentifierName
-  / StringLiteral
-  / NumericLiteral
-
-PropertySetParameterList
-  = Identifier
-
-MemberExpression
-  = base:(
-        PrimaryExpression
-      / FunctionExpression
-      / NewToken __ constructor:MemberExpression __ arguments:Arguments {
-          return {
-            type:        "NewOperator",
-            constructor: constructor,
-            arguments:   arguments
-          };
-        }
-    )
-    accessors:(
-        __ "[" __ name:Expression __ "]" { return name; }
-      / __ "." __ name:IdentifierName    { return name; }
-    )* {
-      var result = base;
-      for (var i = 0; i < accessors.length; i++) {
-        result = {
-          type: "PropertyAccess",
-          base: result,
-          name: accessors[i]
-        };
-      }
-      return result;
-    }
-
-NewExpression
-  = MemberExpression
-  / NewToken __ constructor:NewExpression {
-      return {
-        type:        "NewOperator",
-        constructor: constructor,
-        arguments:   []
-      };
-    }
-
-CallExpression
-  = base:(
-      name:MemberExpression __ arguments:Arguments {
-        return {
-          type:      "FunctionCall",
-          name:      name,
-          arguments: arguments
-        };
-      }
-    )
-    argumentsOrAccessors:(
-        __ arguments:Arguments {
-          return {
-            type:      "FunctionCallArguments",
-            arguments: arguments
-          };
-        }
-      / __ "[" __ name:Expression __ "]" {
-          return {
-            type: "PropertyAccessProperty",
-            name: name
-          };
-        }
-      / __ "." __ name:IdentifierName {
-          return {
-            type: "PropertyAccessProperty",
-            name: name
-          };
-        }
-    )* {
-      var result = base;
-      for (var i = 0; i < argumentsOrAccessors.length; i++) {
-        switch (argumentsOrAccessors[i].type) {
-          case "FunctionCallArguments":
-            result = {
-              type:      "FuctionCall",
-              name:      result,
-              arguments: argumentsOrAccessors[i].arguments
-            };
-            break;
-          case "PropertyAccessProperty":
-            result = {
-              type: "PropertyAccess",
-              base: result,
-              name: argumentsOrAccessors[i].name
-            };
-            break;
-          default:
-            throw new Error(
-              "Invalid expression type: " + argumentsOrAccessors[i].type
-            );
-        }
-      }
-      return result;
-    }
-
-Arguments
-  = "(" __ arguments:ArgumentList? __ ")" {
-    return arguments !== "" ? arguments : [];
-  }
-
-ArgumentList
-  = head:AssignmentExpression tail:(__ "," __ AssignmentExpression)* {
-    var result = [head];
-    for (var i = 0; i < tail.length; i++) {
-      result.push(tail[i][3]);
-    }
-    return result;
-  }
-
-LeftHandSideExpression
-  = CallExpression
-  / NewExpression
-
-PostfixExpression
-  = expression:LeftHandSideExpression _ operator:PostfixOperator {
-      return {
-        type:       "PostfixExpression",
-        operator:   operator,
-        expression: expression
-      };
-    }
-  / LeftHandSideExpression
-
-PostfixOperator
-  = "++"
-  / "--"
-
-UnaryExpression
-  = PostfixExpression
-  / operator:UnaryOperator __ expression:UnaryExpression {
-      return {
-        type:       "UnaryExpression",
-        operator:   operator,
-        expression: expression
-      };
-    }
-
-UnaryOperator
-  = DeleteToken
-  / VoidToken
-  / TypeofToken
-  / "++"
-  / "--"
-  / "+"
-  / "-"
-  / "~"
-  /  "!"
-
-MultiplicativeExpression
-  = head:UnaryExpression
-    tail:(__ MultiplicativeOperator __ UnaryExpression)* {
-      var result = head;
-      for (var i = 0; i < tail.length; i++) {
-        result = {
-          type:     "BinaryExpression",
-          operator: tail[i][1],
-          left:     result,
-          right:    tail[i][3]
-        };
-      }
-      return result;
-    }
-
-MultiplicativeOperator
-  = operator:("*" / "/" / "%") !"=" { return operator; }
-
-AdditiveExpression
-  = head:MultiplicativeExpression
-    tail:(__ AdditiveOperator __ MultiplicativeExpression)* {
-      var result = head;
-      for (var i = 0; i < tail.length; i++) {
-        result = {
-          type:     "BinaryExpression",
-          operator: tail[i][1],
-          left:     result,
-          right:    tail[i][3]
-        };
-      }
-      return result;
-    }
-
-AdditiveOperator
-  = "+" !("+" / "=") { return "+"; }
-  / "-" !("-" / "=") { return "-"; }
-
-ShiftExpression
-  = head:AdditiveExpression
-    tail:(__ ShiftOperator __ AdditiveExpression)* {
-      var result = head;
-      for (var i = 0; i < tail.length; i++) {
-        result = {
-          type:     "BinaryExpression",
-          operator: tail[i][1],
-          left:     result,
-          right:    tail[i][3]
-        };
-      }
-      return result;
-    }
-
-ShiftOperator
-  = "<<"
-  / ">>>"
-  / ">>"
-
-RelationalExpression
-  = head:ShiftExpression
-    tail:(__ RelationalOperator __ ShiftExpression)* {
-      var result = head;
-      for (var i = 0; i < tail.length; i++) {
-        result = {
-          type:     "BinaryExpression",
-          operator: tail[i][1],
-          left:     result,
-          right:    tail[i][3]
-        };
-      }
-      return result;
-    }
-
-RelationalOperator
-  = "<="
-  / ">="
-  / "<"
-  / ">"
-  / InstanceofToken
-  / InToken
-
-RelationalExpressionNoIn
-  = head:ShiftExpression
-    tail:(__ RelationalOperatorNoIn __ ShiftExpression)* {
-      var result = head;
-      for (var i = 0; i < tail.length; i++) {
-        result = {
-          type:     "BinaryExpression",
-          operator: tail[i][1],
-          left:     result,
-          right:    tail[i][3]
-        };
-      }
-      return result;
-    }
-
-RelationalOperatorNoIn
-  = "<="
-  / ">="
-  / "<"
-  / ">"
-  / InstanceofToken
-
-EqualityExpression
-  = head:RelationalExpression
-    tail:(__ EqualityOperator __ RelationalExpression)* {
-      var result = head;
-      for (var i = 0; i < tail.length; i++) {
-        result = {
-          type:     "BinaryExpression",
-          operator: tail[i][1],
-          left:     result,
-          right:    tail[i][3]
-        };
-      }
-      return result;
-    }
-
-EqualityExpressionNoIn
-  = head:RelationalExpressionNoIn
-    tail:(__ EqualityOperator __ RelationalExpressionNoIn)* {
-      var result = head;
-      for (var i = 0; i < tail.length; i++) {
-        result = {
-          type:     "BinaryExpression",
-          operator: tail[i][1],
-          left:     result,
-          right:    tail[i][3]
-        };
-      }
-      return result;
-    }
-
-EqualityOperator
-  = "==="
-  / "!=="
-  / "=="
-  / "!="
-
-BitwiseANDExpression
-  = head:EqualityExpression
-    tail:(__ BitwiseANDOperator __ EqualityExpression)* {
-      var result = head;
-      for (var i = 0; i < tail.length; i++) {
-        result = {
-          type:     "BinaryExpression",
-          operator: tail[i][1],
-          left:     result,
-          right:    tail[i][3]
-        };
-      }
-      return result;
-    }
-
-BitwiseANDExpressionNoIn
-  = head:EqualityExpressionNoIn
-    tail:(__ BitwiseANDOperator __ EqualityExpressionNoIn)* {
-      var result = head;
-      for (var i = 0; i < tail.length; i++) {
-        result = {
-          type:     "BinaryExpression",
-          operator: tail[i][1],
-          left:     result,
-          right:    tail[i][3]
-        };
-      }
-      return result;
-    }
-
-BitwiseANDOperator
-  = "&" !("&" / "=") { return "&"; }
-
-BitwiseXORExpression
-  = head:BitwiseANDExpression
-    tail:(__ BitwiseXOROperator __ BitwiseANDExpression)* {
-      var result = head;
-      for (var i = 0; i < tail.length; i++) {
-        result = {
-          type:     "BinaryExpression",
-          operator: tail[i][1],
-          left:     result,
-          right:    tail[i][3]
-        };
-      }
-      return result;
-    }
-
-BitwiseXORExpressionNoIn
-  = head:BitwiseANDExpressionNoIn
-    tail:(__ BitwiseXOROperator __ BitwiseANDExpressionNoIn)* {
-      var result = head;
-      for (var i = 0; i < tail.length; i++) {
-        result = {
-          type:     "BinaryExpression",
-          operator: tail[i][1],
-          left:     result,
-          right:    tail[i][3]
-        };
-      }
-      return result;
-    }
-
-BitwiseXOROperator
-  = "^" !("^" / "=") { return "^"; }
-
-BitwiseORExpression
-  = head:BitwiseXORExpression
-    tail:(__ BitwiseOROperator __ BitwiseXORExpression)* {
-      var result = head;
-      for (var i = 0; i < tail.length; i++) {
-        result = {
-          type:     "BinaryExpression",
-          operator: tail[i][1],
-          left:     result,
-          right:    tail[i][3]
-        };
-      }
-      return result;
-    }
-
-BitwiseORExpressionNoIn
-  = head:BitwiseXORExpressionNoIn
-    tail:(__ BitwiseOROperator __ BitwiseXORExpressionNoIn)* {
-      var result = head;
-      for (var i = 0; i < tail.length; i++) {
-        result = {
-          type:     "BinaryExpression",
-          operator: tail[i][1],
-          left:     result,
-          right:    tail[i][3]
-        };
-      }
-      return result;
-    }
-
-BitwiseOROperator
-  = "|" !("|" / "=") { return "|"; }
-
-LogicalANDExpression
-  = head:BitwiseORExpression
-    tail:(__ LogicalANDOperator __ BitwiseORExpression)* {
-      var result = head;
-      for (var i = 0; i < tail.length; i++) {
-        result = {
-          type:     "BinaryExpression",
-          operator: tail[i][1],
-          left:     result,
-          right:    tail[i][3]
-        };
-      }
-      return result;
-    }
-
-LogicalANDExpressionNoIn
-  = head:BitwiseORExpressionNoIn
-    tail:(__ LogicalANDOperator __ BitwiseORExpressionNoIn)* {
-      var result = head;
-      for (var i = 0; i < tail.length; i++) {
-        result = {
-          type:     "BinaryExpression",
-          operator: tail[i][1],
-          left:     result,
-          right:    tail[i][3]
-        };
-      }
-      return result;
-    }
-
-LogicalANDOperator
-  = "&&" !"=" { return "&&"; }
-
-LogicalORExpression
-  = head:LogicalANDExpression
-    tail:(__ LogicalOROperator __ LogicalANDExpression)* {
-      var result = head;
-      for (var i = 0; i < tail.length; i++) {
-        result = {
-          type:     "BinaryExpression",
-          operator: tail[i][1],
-          left:     result,
-          right:    tail[i][3]
-        };
-      }
-      return result;
-    }
-
-LogicalORExpressionNoIn
-  = head:LogicalANDExpressionNoIn
-    tail:(__ LogicalOROperator __ LogicalANDExpressionNoIn)* {
-      var result = head;
-      for (var i = 0; i < tail.length; i++) {
-        result = {
-          type:     "BinaryExpression",
-          operator: tail[i][1],
-          left:     result,
-          right:    tail[i][3]
-        };
-      }
-      return result;
-    }
-
-LogicalOROperator
-  = "||" !"=" { return "||"; }
-
-ConditionalExpression
-  = condition:LogicalORExpression __
-    "?" __ trueExpression:AssignmentExpression __
-    ":" __ falseExpression:AssignmentExpression {
-      return {
-        type:            "ConditionalExpression",
-        condition:       condition,
-        trueExpression:  trueExpression,
-        falseExpression: falseExpression
-      };
-    }
-  / LogicalORExpression
-
-ConditionalExpressionNoIn
-  = condition:LogicalORExpressionNoIn __
-    "?" __ trueExpression:AssignmentExpressionNoIn __
-    ":" __ falseExpression:AssignmentExpressionNoIn {
-      return {
-        type:            "ConditionalExpression",
-        condition:       condition,
-        trueExpression:  trueExpression,
-        falseExpression: falseExpression
-      };
-    }
-  / LogicalORExpressionNoIn
-
-AssignmentExpression
-  = left:LeftHandSideExpression __
-    operator:AssignmentOperator __
-    right:AssignmentExpression {
-      return {
-        type:     "AssignmentExpression",
-        operator: operator,
-        left:     left,
-        right:    right
-      };
-    }
-  / ConditionalExpression
-
-AssignmentExpressionNoIn
-  = left:LeftHandSideExpression __
-    operator:AssignmentOperator __
-    right:AssignmentExpressionNoIn {
-      return {
-        type:     "AssignmentExpression",
-        operator: operator,
-        left:     left,
-        right:    right
-      };
-    }
-  / ConditionalExpressionNoIn
-
-AssignmentOperator
-  = "=" (!"=") { return "="; }
-  / "*="
-  / "/="
-  / "%="
-  / "+="
-  / "-="
-  / "<<="
-  / ">>="
-  / ">>>="
-  / "&="
-  / "^="
-  / "|="
-
-Expression
-  = head:AssignmentExpression
-    tail:(__ "," __ AssignmentExpression)* {
-      var result = head;
-      for (var i = 0; i < tail.length; i++) {
-        result = {
-          type:     "BinaryExpression",
-          operator: tail[i][1],
-          left:     result,
-          right:    tail[i][3]
-        };
-      }
-      return result;
-    }
-
-ExpressionNoIn
-  = head:AssignmentExpressionNoIn
-    tail:(__ "," __ AssignmentExpressionNoIn)* {
-      var result = head;
-      for (var i = 0; i < tail.length; i++) {
-        result = {
-          type:     "BinaryExpression",
-          operator: tail[i][1],
-          left:     result,
-          right:    tail[i][3]
-        };
-      }
-      return result;
-    }
-
-/* ===== A.4 Statements ===== */
-
-/*
- * The specification does not consider |FunctionDeclaration| and
- * |FunctionExpression| as statements, but JavaScript implementations do and so
- * are we. This syntax is actually used in the wild (e.g. by jQuery).
- */
-Statement
-  = Block
-  / VariableStatement
-  / EmptyStatement
-  / ExpressionStatement
-  / IfStatement
-  / IterationStatement
-  / ContinueStatement
-  / BreakStatement
-  / ReturnStatement
-  / WithStatement
-  / LabelledStatement
-  / SwitchStatement
-  / ThrowStatement
-  / TryStatement
-  / DebuggerStatement
-  / FunctionDeclaration
-  / FunctionExpression
-
-Block
-  = "{" __ statements:(StatementList __)? "}" {
-      return {
-        type:       "Block",
-        statements: statements !== "" ? statements[0] : []
-      };
-    }
-
-StatementList
-  = head:Statement tail:(__ Statement)* {
-      var result = [head];
-      for (var i = 0; i < tail.length; i++) {
-        result.push(tail[i][1]);
-      }
-      return result;
-    }
-
-VariableStatement
-  = VarToken __ declarations:VariableDeclarationList EOS {
-      return {
-        type:         "VariableStatement",
-        declarations: declarations
-      };
-    }
-
-VariableDeclarationList
-  = head:VariableDeclaration tail:(__ "," __ VariableDeclaration)* {
-      var result = [head];
-      for (var i = 0; i < tail.length; i++) {
-        result.push(tail[i][3]);
-      }
-      return result;
-    }
-
-VariableDeclarationListNoIn
-  = head:VariableDeclarationNoIn tail:(__ "," __ VariableDeclarationNoIn)* {
-      var result = [head];
-      for (var i = 0; i < tail.length; i++) {
-        result.push(tail[i][3]);
-      }
-      return result;
-    }
-
-VariableDeclaration
-  = name:Identifier __ value:Initialiser? {
-      return {
-        type:  "VariableDeclaration",
-        name:  name,
-        value: value !== "" ? value : null
-      };
-    }
-
-VariableDeclarationNoIn
-  = name:Identifier __ value:InitialiserNoIn? {
-      return {
-        type:  "VariableDeclaration",
-        name:  name,
-        value: value !== "" ? value : null
-      };
-    }
-
-Initialiser
-  = "=" (!"=") __ expression:AssignmentExpression { return expression; }
-
-InitialiserNoIn
-  = "=" (!"=") __ expression:AssignmentExpressionNoIn { return expression; }
-
-EmptyStatement
-  = ";" { return { type: "EmptyStatement" }; }
-
-ExpressionStatement
-  = !("{" / FunctionToken) expression:Expression EOS { return expression; }
-
-IfStatement
-  = IfToken __
-    "(" __ condition:Expression __ ")" __
-    ifStatement:Statement
-    elseStatement:(__ ElseToken __ Statement)? {
-      return {
-        type:          "IfStatement",
-        condition:     condition,
-        ifStatement:   ifStatement,
-        elseStatement: elseStatement !== "" ? elseStatement[3] : null
-      };
-    }
-
-IterationStatement
-  = DoWhileStatement
-  / WhileStatement
-  / ForStatement
-  / ForInStatement
-
-DoWhileStatement
-  = DoToken __
-    statement:Statement __
-    WhileToken __ "(" __ condition:Expression __ ")" EOS {
-      return {
-        type: "DoWhileStatement",
-        condition: condition,
-        statement: statement
-      };
-    }
-
-WhileStatement
-  = WhileToken __ "(" __ condition:Expression __ ")" __ statement:Statement {
-      return {
-        type: "WhileStatement",
-        condition: condition,
-        statement: statement
-      };
-    }
-
-ForStatement
-  = ForToken __
-    "(" __
-    initializer:(
-        VarToken __ declarations:VariableDeclarationListNoIn {
-          return {
-            type:         "VariableStatement",
-            declarations: declarations
-          };
-        }
-      / ExpressionNoIn?
-    ) __
-    ";" __
-    test:Expression? __
-    ";" __
-    counter:Expression? __
-    ")" __
-    statement:Statement
-    {
-      return {
-        type:        "ForStatement",
-        initializer: initializer !== "" ? initializer : null,
-        test:        test !== "" ? test : null,
-        counter:     counter !== "" ? counter : null,
-        statement:   statement
-      };
-    }
-
-ForInStatement
-  = ForToken __
-    "(" __
-    iterator:(
-        VarToken __ declaration:VariableDeclarationNoIn { return declaration; }
-      / LeftHandSideExpression
-    ) __
-    InToken __
-    collection:Expression __
-    ")" __
-    statement:Statement
-    {
-      return {
-        type:       "ForInStatement",
-        iterator:   iterator,
-        collection: collection,
-        statement:  statement
-      };
-    }
-
-ContinueStatement
-  = ContinueToken _
-    label:(
-        identifier:Identifier EOS { return identifier; }
-      / EOSNoLineTerminator       { return "";         }
-    ) {
-      return {
-        type:  "ContinueStatement",
-        label: label !== "" ? label : null
-      };
-    }
-
-BreakStatement
-  = BreakToken _
-    label:(
-        identifier:Identifier EOS { return identifier; }
-      / EOSNoLineTerminator       { return ""; }
-    ) {
-      return {
-        type:  "BreakStatement",
-        label: label !== "" ? label : null
-      };
-    }
-
-ReturnStatement
-  = ReturnToken _
-    value:(
-        expression:Expression EOS { return expression; }
-      / EOSNoLineTerminator       { return ""; }
-    ) {
-      return {
-        type:  "ReturnStatement",
-        value: value !== "" ? value : null
-      };
-    }
-
-WithStatement
-  = WithToken __ "(" __ environment:Expression __ ")" __ statement:Statement {
-      return {
-        type:        "WithStatement",
-        environment: environment,
-        statement:   statement
-      };
-    }
-
-SwitchStatement
-  = SwitchToken __ "(" __ expression:Expression __ ")" __ clauses:CaseBlock {
-      return {
-        type:       "SwitchStatement",
-        expression: expression,
-        clauses:    clauses
-      };
-    }
-
-CaseBlock
-  = "{" __
-    before:CaseClauses?
-    defaultAndAfter:(__ DefaultClause __ CaseClauses?)? __
-    "}" {
-      var before = before !== "" ? before : [];
-      if (defaultAndAfter !== "") {
-        var defaultClause = defaultAndAfter[1];
-        var clausesAfter = defaultAndAfter[3] !== ""
-          ? defaultAndAfter[3]
-          : [];
-      } else {
-        var defaultClause = null;
-        var clausesAfter = [];
-      }
-
-      return (defaultClause ? before.concat(defaultClause) : before).concat(clausesAfter);
-    }
-
-CaseClauses
-  = head:CaseClause tail:(__ CaseClause)* {
-      var result = [head];
-      for (var i = 0; i < tail.length; i++) {
-        result.push(tail[i][1]);
-      }
-      return result;
-    }
-
-CaseClause
-  = CaseToken __ selector:Expression __ ":" statements:(__ StatementList)? {
-      return {
-        type:       "CaseClause",
-        selector:   selector,
-        statements: statements !== "" ? statements[1] : []
-      };
-    }
-
-DefaultClause
-  = DefaultToken __ ":" statements:(__ StatementList)? {
-      return {
-        type:       "DefaultClause",
-        statements: statements !== "" ? statements[1] : []
-      };
-    }
-
-LabelledStatement
-  = label:Identifier __ ":" __ statement:Statement {
-      return {
-        type:      "LabelledStatement",
-        label:     label,
-        statement: statement
-      };
-    }
-
-ThrowStatement
-  = ThrowToken _ exception:Expression EOSNoLineTerminator {
-      return {
-        type:      "ThrowStatement",
-        exception: exception
-      };
-    }
-
-TryStatement
-  = TryToken __ block:Block __ catch_:Catch __ finally_:Finally {
-      return {
-        type:      "TryStatement",
-        block:     block,
-        "catch":   catch_,
-        "finally": finally_
-      };
-    }
-  / TryToken __ block:Block __ catch_:Catch {
-      return {
-        type:      "TryStatement",
-        block:     block,
-        "catch":   catch_,
-        "finally": null
-      };
-    }
-  / TryToken __ block:Block __ finally_:Finally {
-      return {
-        type:      "TryStatement",
-        block:     block,
-        "catch":   null,
-        "finally": finally_
-      };
-    }
-
-Catch
-  = CatchToken __ "(" __ identifier:Identifier __ ")" __ block:Block {
-      return {
-        type:       "Catch",
-        identifier: identifier,
-        block:      block
-      };
-    }
-
-Finally
-  = FinallyToken __ block:Block {
-      return {
-        type:  "Finally",
-        block: block
-      };
-    }
-
-DebuggerStatement
-  = DebuggerToken EOS { return { type: "DebuggerStatement" }; }
-
-/* ===== A.5 Functions and Programs ===== */
-
-FunctionDeclaration
-  = FunctionToken __ name:Identifier __
-    "(" __ params:FormalParameterList? __ ")" __
-    "{" __ elements:FunctionBody __ "}" {
-      return {
-        type:     "Function",
-        name:     name,
-        params:   params !== "" ? params : [],
-        elements: elements
-      };
-    }
-
-FunctionExpression
-  = FunctionToken __ name:Identifier? __
-    "(" __ params:FormalParameterList? __ ")" __
-    "{" __ elements:FunctionBody __ "}" {
-      return {
-        type:     "Function",
-        name:     name !== "" ? name : null,
-        params:   params !== "" ? params : [],
-        elements: elements
-      };
-    }
-
-FormalParameterList
-  = head:Identifier tail:(__ "," __ Identifier)* {
-      var result = [head];
-      for (var i = 0; i < tail.length; i++) {
-        result.push(tail[i][3]);
-      }
-      return result;
-    }
-
-FunctionBody
-  = elements:SourceElements? { return elements !== "" ? elements : []; }
-
-Program
-  = elements:SourceElements? {
-      return {
-        type:     "Program",
-        elements: elements !== "" ? elements : []
-      };
-    }
-
-SourceElements
-  = head:SourceElement tail:(__ SourceElement)* {
-      var result = [head];
-      for (var i = 0; i < tail.length; i++) {
-        result.push(tail[i][1]);
-      }
-      return result;
-    }
-
-/*
- * The specification also allows |FunctionDeclaration| here. We do it
- * implicitly, because we consider |FunctionDeclaration| and
- * |FunctionExpression| as statements. See the coment at the |Statement| rule.
- */
-SourceElement
-  = Statement
-
-/* ===== A.6 Universal Resource Identifier Character Classes ===== */
-
-/* Irrelevant. */
-
-/* ===== A.7 Regular Expressions ===== */
-
-/*
- * We treat regular expressions as opaque character sequences and we do not use
- * rules from this part of the grammar to parse them further.
- */
-
-/* ===== A.8 JSON ===== */
-
-/* Irrelevant. */
diff --git a/bin/node_modules/xcode/node_modules/pegjs/examples/json.pegjs b/bin/node_modules/xcode/node_modules/pegjs/examples/json.pegjs
deleted file mode 100644
index f2a34b1..0000000
--- a/bin/node_modules/xcode/node_modules/pegjs/examples/json.pegjs
+++ /dev/null
@@ -1,120 +0,0 @@
-/* JSON parser based on the grammar described at http://json.org/. */
-
-/* ===== Syntactical Elements ===== */
-
-start
-  = _ object:object { return object; }
-
-object
-  = "{" _ "}" _                 { return {};      }
-  / "{" _ members:members "}" _ { return members; }
-
-members
-  = head:pair tail:("," _ pair)* {
-      var result = {};
-      result[head[0]] = head[1];
-      for (var i = 0; i < tail.length; i++) {
-        result[tail[i][2][0]] = tail[i][2][1];
-      }
-      return result;
-    }
-
-pair
-  = name:string ":" _ value:value { return [name, value]; }
-
-array
-  = "[" _ "]" _                   { return [];       }
-  / "[" _ elements:elements "]" _ { return elements; }
-
-elements
-  = head:value tail:("," _ value)* {
-      var result = [head];
-      for (var i = 0; i < tail.length; i++) {
-        result.push(tail[i][2]);
-      }
-      return result;
-    }
-
-value
-  = string
-  / number
-  / object
-  / array
-  / "true" _  { return true;   }
-  / "false" _ { return false;  }
-  // FIXME: We can't return null here because that would mean parse failure.
-  / "null" _  { return "null"; }
-
-/* ===== Lexical Elements ===== */
-
-string "string"
-  = '"' '"' _             { return "";    }
-  / '"' chars:chars '"' _ { return chars; }
-
-chars
-  = chars:char+ { return chars.join(""); }
-
-char
-  // In the original JSON grammar: "any-Unicode-character-except-"-or-\-or-control-character"
-  = [^"\\\0-\x1F\x7f]
-  / '\\"'  { return '"';  }
-  / "\\\\" { return "\\"; }
-  / "\\/"  { return "/";  }
-  / "\\b"  { return "\b"; }
-  / "\\f"  { return "\f"; }
-  / "\\n"  { return "\n"; }
-  / "\\r"  { return "\r"; }
-  / "\\t"  { return "\t"; }
-  / "\\u" h1:hexDigit h2:hexDigit h3:hexDigit h4:hexDigit {
-      return String.fromCharCode(parseInt("0x" + h1 + h2 + h3 + h4));
-    }
-
-number "number"
-  = int_:int frac:frac exp:exp _ { return parseFloat(int_ + frac + exp); }
-  / int_:int frac:frac _         { return parseFloat(int_ + frac);       }
-  / int_:int exp:exp _           { return parseFloat(int_ + exp);        }
-  / int_:int _                   { return parseFloat(int_);              }
-
-int
-  = digit19:digit19 digits:digits     { return digit19 + digits;       }
-  / digit:digit
-  / "-" digit19:digit19 digits:digits { return "-" + digit19 + digits; }
-  / "-" digit:digit                   { return "-" + digit;            }
-
-frac
-  = "." digits:digits { return "." + digits; }
-
-exp
-  = e:e digits:digits { return e + digits; }
-
-digits
-  = digits:digit+ { return digits.join(""); }
-
-e
-  = e:[eE] sign:[+-]? { return e + sign; }
-
-/*
- * The following rules are not present in the original JSON gramar, but they are
- * assumed to exist implicitly.
- *
- * FIXME: Define them according to ECMA-262, 5th ed.
- */
-
-digit
-  = [0-9]
-
-digit19
-  = [1-9]
-
-hexDigit
-  = [0-9a-fA-F]
-
-/* ===== Whitespace ===== */
-
-_ "whitespace"
-  = whitespace*
-
-// Whitespace is undefined in the original JSON grammar, so I assume a simple
-// conventional definition consistent with ECMA-262, 5th ed.
-whitespace
-  = [ \t\n\r]
diff --git a/bin/node_modules/xcode/node_modules/pegjs/lib/peg.js b/bin/node_modules/xcode/node_modules/pegjs/lib/peg.js
deleted file mode 100644
index 94c9423..0000000
--- a/bin/node_modules/xcode/node_modules/pegjs/lib/peg.js
+++ /dev/null
@@ -1,5141 +0,0 @@
-/* PEG.js 0.6.2 (http://pegjs.majda.cz/) */
-
-(function() {
-
-var undefined;
-
-var PEG = {
-  /* PEG.js version. */
-  VERSION: "0.6.2",
-
-  /*
-   * Generates a parser from a specified grammar and returns it.
-   *
-   * The grammar must be a string in the format described by the metagramar in
-   * the parser.pegjs file.
-   *
-   * Throws |PEG.parser.SyntaxError| if the grammar contains a syntax error or
-   * |PEG.GrammarError| if it contains a semantic error. Note that not all
-   * errors are detected during the generation and some may protrude to the
-   * generated parser and cause its malfunction.
-   */
-  buildParser: function(grammar) {
-    return PEG.compiler.compile(PEG.parser.parse(grammar));
-  }
-};
-
-/* Thrown when the grammar contains an error. */
-
-PEG.GrammarError = function(message) {
-  this.name = "PEG.GrammarError";
-  this.message = message;
-};
-
-PEG.GrammarError.prototype = Error.prototype;
-
-function contains(array, value) {
-  /*
-   * Stupid IE does not have Array.prototype.indexOf, otherwise this function
-   * would be a one-liner.
-   */
-  var length = array.length;
-  for (var i = 0; i < length; i++) {
-    if (array[i] === value) {
-      return true;
-    }
-  }
-  return false;
-}
-
-function each(array, callback) {
-  var length = array.length;
-  for (var i = 0; i < length; i++) {
-    callback(array[i]);
-  }
-}
-
-function map(array, callback) {
-  var result = [];
-  var length = array.length;
-  for (var i = 0; i < length; i++) {
-    result[i] = callback(array[i]);
-  }
-  return result;
-}
-
-/*
- * Returns a string padded on the left to a desired length with a character.
- *
- * The code needs to be in sync with th code template in the compilation
- * function for "action" nodes.
- */
-function padLeft(input, padding, length) {
-  var result = input;
-
-  var padLength = length - input.length;
-  for (var i = 0; i < padLength; i++) {
-    result = padding + result;
-  }
-
-  return result;
-}
-
-/*
- * Returns an escape sequence for given character. Uses \x for characters <=
- * 0xFF to save space, \u for the rest.
- *
- * The code needs to be in sync with th code template in the compilation
- * function for "action" nodes.
- */
-function escape(ch) {
-  var charCode = ch.charCodeAt(0);
-
-  if (charCode <= 0xFF) {
-    var escapeChar = 'x';
-    var length = 2;
-  } else {
-    var escapeChar = 'u';
-    var length = 4;
-  }
-
-  return '\\' + escapeChar + padLeft(charCode.toString(16).toUpperCase(), '0', length);
-}
-
-/*
- * Surrounds the string with quotes and escapes characters inside so that the
- * result is a valid JavaScript string.
- *
- * The code needs to be in sync with th code template in the compilation
- * function for "action" nodes.
- */
-function quote(s) {
-  /*
-   * ECMA-262, 5th ed., 7.8.4: All characters may appear literally in a string
-   * literal except for the closing quote character, backslash, carriage return,
-   * line separator, paragraph separator, and line feed. Any character may
-   * appear in the form of an escape sequence.
-   *
-   * For portability, we also escape escape all non-ASCII characters.
-   */
-  return '"' + s
-    .replace(/\\/g, '\\\\')            // backslash
-    .replace(/"/g, '\\"')              // closing quote character
-    .replace(/\r/g, '\\r')             // carriage return
-    .replace(/\n/g, '\\n')             // line feed
-    .replace(/[\x80-\uFFFF]/g, escape) // non-ASCII characters
-    + '"';
-};
-
-/*
- * Escapes characters inside the string so that it can be used as a list of
- * characters in a character class of a regular expression.
- */
-function quoteForRegexpClass(s) {
-  /*
-   * Based on ECMA-262, 5th ed., 7.8.5 & 15.10.1.
-   *
-   * For portability, we also escape escape all non-ASCII characters.
-   */
-  return s
-    .replace(/\\/g, '\\\\')            // backslash
-    .replace(/\0/g, '\\0')             // null, IE needs this
-    .replace(/\//g, '\\/')             // closing slash
-    .replace(/]/g, '\\]')              // closing bracket
-    .replace(/-/g, '\\-')              // dash
-    .replace(/\r/g, '\\r')             // carriage return
-    .replace(/\n/g, '\\n')             // line feed
-    .replace(/[\x80-\uFFFF]/g, escape) // non-ASCII characters
-}
-
-/*
- * Builds a node visitor -- a function which takes a node and any number of
- * other parameters, calls an appropriate function according to the node type,
- * passes it all its parameters and returns its value. The functions for various
- * node types are passed in a parameter to |buildNodeVisitor| as a hash.
- */
-function buildNodeVisitor(functions) {
-  return function(node) {
-    return functions[node.type].apply(null, arguments);
-  }
-}
-PEG.parser = (function(){
-  /* Generated by PEG.js 0.6.2 (http://pegjs.majda.cz/). */
-  
-  var result = {
-    /*
-     * Parses the input with a generated parser. If the parsing is successfull,
-     * returns a value explicitly or implicitly specified by the grammar from
-     * which the parser was generated (see |PEG.buildParser|). If the parsing is
-     * unsuccessful, throws |PEG.parser.SyntaxError| describing the error.
-     */
-    parse: function(input, startRule) {
-      var parseFunctions = {
-        "__": parse___,
-        "action": parse_action,
-        "and": parse_and,
-        "braced": parse_braced,
-        "bracketDelimitedCharacter": parse_bracketDelimitedCharacter,
-        "choice": parse_choice,
-        "class": parse_class,
-        "classCharacter": parse_classCharacter,
-        "classCharacterRange": parse_classCharacterRange,
-        "colon": parse_colon,
-        "comment": parse_comment,
-        "digit": parse_digit,
-        "dot": parse_dot,
-        "doubleQuotedCharacter": parse_doubleQuotedCharacter,
-        "doubleQuotedLiteral": parse_doubleQuotedLiteral,
-        "eol": parse_eol,
-        "eolChar": parse_eolChar,
-        "eolEscapeSequence": parse_eolEscapeSequence,
-        "equals": parse_equals,
-        "grammar": parse_grammar,
-        "hexDigit": parse_hexDigit,
-        "hexEscapeSequence": parse_hexEscapeSequence,
-        "identifier": parse_identifier,
-        "initializer": parse_initializer,
-        "labeled": parse_labeled,
-        "letter": parse_letter,
-        "literal": parse_literal,
-        "lowerCaseLetter": parse_lowerCaseLetter,
-        "lparen": parse_lparen,
-        "multiLineComment": parse_multiLineComment,
-        "nonBraceCharacter": parse_nonBraceCharacter,
-        "nonBraceCharacters": parse_nonBraceCharacters,
-        "not": parse_not,
-        "plus": parse_plus,
-        "prefixed": parse_prefixed,
-        "primary": parse_primary,
-        "question": parse_question,
-        "rparen": parse_rparen,
-        "rule": parse_rule,
-        "semicolon": parse_semicolon,
-        "sequence": parse_sequence,
-        "simpleBracketDelimitedCharacter": parse_simpleBracketDelimitedCharacter,
-        "simpleDoubleQuotedCharacter": parse_simpleDoubleQuotedCharacter,
-        "simpleEscapeSequence": parse_simpleEscapeSequence,
-        "simpleSingleQuotedCharacter": parse_simpleSingleQuotedCharacter,
-        "singleLineComment": parse_singleLineComment,
-        "singleQuotedCharacter": parse_singleQuotedCharacter,
-        "singleQuotedLiteral": parse_singleQuotedLiteral,
-        "slash": parse_slash,
-        "star": parse_star,
-        "suffixed": parse_suffixed,
-        "unicodeEscapeSequence": parse_unicodeEscapeSequence,
-        "upperCaseLetter": parse_upperCaseLetter,
-        "whitespace": parse_whitespace,
-        "zeroEscapeSequence": parse_zeroEscapeSequence
-      };
-      
-      if (startRule !== undefined) {
-        if (parseFunctions[startRule] === undefined) {
-          throw new Error("Invalid rule name: " + quote(startRule) + ".");
-        }
-      } else {
-        startRule = "grammar";
-      }
-      
-      var pos = 0;
-      var reportMatchFailures = true;
-      var rightmostMatchFailuresPos = 0;
-      var rightmostMatchFailuresExpected = [];
-      var cache = {};
-      
-      function padLeft(input, padding, length) {
-        var result = input;
-        
-        var padLength = length - input.length;
-        for (var i = 0; i < padLength; i++) {
-          result = padding + result;
-        }
-        
-        return result;
-      }
-      
-      function escape(ch) {
-        var charCode = ch.charCodeAt(0);
-        
-        if (charCode <= 0xFF) {
-          var escapeChar = 'x';
-          var length = 2;
-        } else {
-          var escapeChar = 'u';
-          var length = 4;
-        }
-        
-        return '\\' + escapeChar + padLeft(charCode.toString(16).toUpperCase(), '0', length);
-      }
-      
-      function quote(s) {
-        /*
-         * ECMA-262, 5th ed., 7.8.4: All characters may appear literally in a
-         * string literal except for the closing quote character, backslash,
-         * carriage return, line separator, paragraph separator, and line feed.
-         * Any character may appear in the form of an escape sequence.
-         */
-        return '"' + s
-          .replace(/\\/g, '\\\\')            // backslash
-          .replace(/"/g, '\\"')              // closing quote character
-          .replace(/\r/g, '\\r')             // carriage return
-          .replace(/\n/g, '\\n')             // line feed
-          .replace(/[\x80-\uFFFF]/g, escape) // non-ASCII characters
-          + '"';
-      }
-      
-      function matchFailed(failure) {
-        if (pos < rightmostMatchFailuresPos) {
-          return;
-        }
-        
-        if (pos > rightmostMatchFailuresPos) {
-          rightmostMatchFailuresPos = pos;
-          rightmostMatchFailuresExpected = [];
-        }
-        
-        rightmostMatchFailuresExpected.push(failure);
-      }
-      
-      function parse_grammar() {
-        var cacheKey = 'grammar@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        
-        var savedPos0 = pos;
-        var savedPos1 = pos;
-        var result3 = parse___();
-        if (result3 !== null) {
-          var result7 = parse_initializer();
-          var result4 = result7 !== null ? result7 : '';
-          if (result4 !== null) {
-            var result6 = parse_rule();
-            if (result6 !== null) {
-              var result5 = [];
-              while (result6 !== null) {
-                result5.push(result6);
-                var result6 = parse_rule();
-              }
-            } else {
-              var result5 = null;
-            }
-            if (result5 !== null) {
-              var result1 = [result3, result4, result5];
-            } else {
-              var result1 = null;
-              pos = savedPos1;
-            }
-          } else {
-            var result1 = null;
-            pos = savedPos1;
-          }
-        } else {
-          var result1 = null;
-          pos = savedPos1;
-        }
-        var result2 = result1 !== null
-          ? (function(initializer, rules) {
-                var rulesConverted = {};
-                each(rules, function(rule) { rulesConverted[rule.name] = rule; });
-          
-                return {
-                  type:        "grammar",
-                  initializer: initializer !== "" ? initializer : null,
-                  rules:       rulesConverted,
-                  startRule:   rules[0].name
-                }
-              })(result1[1], result1[2])
-          : null;
-        if (result2 !== null) {
-          var result0 = result2;
-        } else {
-          var result0 = null;
-          pos = savedPos0;
-        }
-        
-        
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_initializer() {
-        var cacheKey = 'initializer@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        
-        var savedPos0 = pos;
-        var savedPos1 = pos;
-        var result3 = parse_action();
-        if (result3 !== null) {
-          var result5 = parse_semicolon();
-          var result4 = result5 !== null ? result5 : '';
-          if (result4 !== null) {
-            var result1 = [result3, result4];
-          } else {
-            var result1 = null;
-            pos = savedPos1;
-          }
-        } else {
-          var result1 = null;
-          pos = savedPos1;
-        }
-        var result2 = result1 !== null
-          ? (function(code) {
-                return {
-                  type: "initializer",
-                  code: code
-                };
-              })(result1[0])
-          : null;
-        if (result2 !== null) {
-          var result0 = result2;
-        } else {
-          var result0 = null;
-          pos = savedPos0;
-        }
-        
-        
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_rule() {
-        var cacheKey = 'rule@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        
-        var savedPos0 = pos;
-        var savedPos1 = pos;
-        var result3 = parse_identifier();
-        if (result3 !== null) {
-          var result10 = parse_literal();
-          if (result10 !== null) {
-            var result4 = result10;
-          } else {
-            if (input.substr(pos, 0) === "") {
-              var result9 = "";
-              pos += 0;
-            } else {
-              var result9 = null;
-              if (reportMatchFailures) {
-                matchFailed("\"\"");
-              }
-            }
-            if (result9 !== null) {
-              var result4 = result9;
-            } else {
-              var result4 = null;;
-            };
-          }
-          if (result4 !== null) {
-            var result5 = parse_equals();
-            if (result5 !== null) {
-              var result6 = parse_choice();
-              if (result6 !== null) {
-                var result8 = parse_semicolon();
-                var result7 = result8 !== null ? result8 : '';
-                if (result7 !== null) {
-                  var result1 = [result3, result4, result5, result6, result7];
-                } else {
-                  var result1 = null;
-                  pos = savedPos1;
-                }
-              } else {
-                var result1 = null;
-                pos = savedPos1;
-              }
-            } else {
-              var result1 = null;
-              pos = savedPos1;
-            }
-          } else {
-            var result1 = null;
-            pos = savedPos1;
-          }
-        } else {
-          var result1 = null;
-          pos = savedPos1;
-        }
-        var result2 = result1 !== null
-          ? (function(name, displayName, expression) {
-                return {
-                  type:        "rule",
-                  name:        name,
-                  displayName: displayName !== "" ? displayName : null,
-                  expression:  expression
-                };
-              })(result1[0], result1[1], result1[3])
-          : null;
-        if (result2 !== null) {
-          var result0 = result2;
-        } else {
-          var result0 = null;
-          pos = savedPos0;
-        }
-        
-        
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_choice() {
-        var cacheKey = 'choice@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        
-        var savedPos0 = pos;
-        var savedPos1 = pos;
-        var result3 = parse_sequence();
-        if (result3 !== null) {
-          var result4 = [];
-          var savedPos2 = pos;
-          var result6 = parse_slash();
-          if (result6 !== null) {
-            var result7 = parse_sequence();
-            if (result7 !== null) {
-              var result5 = [result6, result7];
-            } else {
-              var result5 = null;
-              pos = savedPos2;
-            }
-          } else {
-            var result5 = null;
-            pos = savedPos2;
-          }
-          while (result5 !== null) {
-            result4.push(result5);
-            var savedPos2 = pos;
-            var result6 = parse_slash();
-            if (result6 !== null) {
-              var result7 = parse_sequence();
-              if (result7 !== null) {
-                var result5 = [result6, result7];
-              } else {
-                var result5 = null;
-                pos = savedPos2;
-              }
-            } else {
-              var result5 = null;
-              pos = savedPos2;
-            }
-          }
-          if (result4 !== null) {
-            var result1 = [result3, result4];
-          } else {
-            var result1 = null;
-            pos = savedPos1;
-          }
-        } else {
-          var result1 = null;
-          pos = savedPos1;
-        }
-        var result2 = result1 !== null
-          ? (function(head, tail) {
-                if (tail.length > 0) {
-                  var alternatives = [head].concat(map(
-                      tail,
-                      function(element) { return element[1]; }
-                  ));
-                  return {
-                    type:         "choice",
-                    alternatives: alternatives
-                  }
-                } else {
-                  return head;
-                }
-              })(result1[0], result1[1])
-          : null;
-        if (result2 !== null) {
-          var result0 = result2;
-        } else {
-          var result0 = null;
-          pos = savedPos0;
-        }
-        
-        
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_sequence() {
-        var cacheKey = 'sequence@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        
-        var savedPos1 = pos;
-        var savedPos2 = pos;
-        var result8 = [];
-        var result10 = parse_labeled();
-        while (result10 !== null) {
-          result8.push(result10);
-          var result10 = parse_labeled();
-        }
-        if (result8 !== null) {
-          var result9 = parse_action();
-          if (result9 !== null) {
-            var result6 = [result8, result9];
-          } else {
-            var result6 = null;
-            pos = savedPos2;
-          }
-        } else {
-          var result6 = null;
-          pos = savedPos2;
-        }
-        var result7 = result6 !== null
-          ? (function(elements, code) {
-                var expression = elements.length != 1
-                  ? {
-                      type:     "sequence",
-                      elements: elements
-                    }
-                  : elements[0];
-                return {
-                  type:       "action",
-                  expression: expression,
-                  code:       code
-                };
-              })(result6[0], result6[1])
-          : null;
-        if (result7 !== null) {
-          var result5 = result7;
-        } else {
-          var result5 = null;
-          pos = savedPos1;
-        }
-        if (result5 !== null) {
-          var result0 = result5;
-        } else {
-          var savedPos0 = pos;
-          var result2 = [];
-          var result4 = parse_labeled();
-          while (result4 !== null) {
-            result2.push(result4);
-            var result4 = parse_labeled();
-          }
-          var result3 = result2 !== null
-            ? (function(elements) {
-                  return elements.length != 1
-                    ? {
-                        type:     "sequence",
-                        elements: elements
-                      }
-                    : elements[0];
-                })(result2)
-            : null;
-          if (result3 !== null) {
-            var result1 = result3;
-          } else {
-            var result1 = null;
-            pos = savedPos0;
-          }
-          if (result1 !== null) {
-            var result0 = result1;
-          } else {
-            var result0 = null;;
-          };
-        }
-        
-        
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_labeled() {
-        var cacheKey = 'labeled@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        
-        var savedPos0 = pos;
-        var savedPos1 = pos;
-        var result5 = parse_identifier();
-        if (result5 !== null) {
-          var result6 = parse_colon();
-          if (result6 !== null) {
-            var result7 = parse_prefixed();
-            if (result7 !== null) {
-              var result3 = [result5, result6, result7];
-            } else {
-              var result3 = null;
-              pos = savedPos1;
-            }
-          } else {
-            var result3 = null;
-            pos = savedPos1;
-          }
-        } else {
-          var result3 = null;
-          pos = savedPos1;
-        }
-        var result4 = result3 !== null
-          ? (function(label, expression) {
-                return {
-                  type:       "labeled",
-                  label:      label,
-                  expression: expression
-                };
-              })(result3[0], result3[2])
-          : null;
-        if (result4 !== null) {
-          var result2 = result4;
-        } else {
-          var result2 = null;
-          pos = savedPos0;
-        }
-        if (result2 !== null) {
-          var result0 = result2;
-        } else {
-          var result1 = parse_prefixed();
-          if (result1 !== null) {
-            var result0 = result1;
-          } else {
-            var result0 = null;;
-          };
-        }
-        
-        
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_prefixed() {
-        var cacheKey = 'prefixed@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        
-        var savedPos6 = pos;
-        var savedPos7 = pos;
-        var result20 = parse_and();
-        if (result20 !== null) {
-          var result21 = parse_action();
-          if (result21 !== null) {
-            var result18 = [result20, result21];
-          } else {
-            var result18 = null;
-            pos = savedPos7;
-          }
-        } else {
-          var result18 = null;
-          pos = savedPos7;
-        }
-        var result19 = result18 !== null
-          ? (function(code) {
-                return {
-                  type: "semantic_and",
-                  code: code
-                };
-              })(result18[1])
-          : null;
-        if (result19 !== null) {
-          var result17 = result19;
-        } else {
-          var result17 = null;
-          pos = savedPos6;
-        }
-        if (result17 !== null) {
-          var result0 = result17;
-        } else {
-          var savedPos4 = pos;
-          var savedPos5 = pos;
-          var result15 = parse_and();
-          if (result15 !== null) {
-            var result16 = parse_suffixed();
-            if (result16 !== null) {
-              var result13 = [result15, result16];
-            } else {
-              var result13 = null;
-              pos = savedPos5;
-            }
-          } else {
-            var result13 = null;
-            pos = savedPos5;
-          }
-          var result14 = result13 !== null
-            ? (function(expression) {
-                  return {
-                    type:       "simple_and",
-                    expression: expression
-                  };
-                })(result13[1])
-            : null;
-          if (result14 !== null) {
-            var result12 = result14;
-          } else {
-            var result12 = null;
-            pos = savedPos4;
-          }
-          if (result12 !== null) {
-            var result0 = result12;
-          } else {
-            var savedPos2 = pos;
-            var savedPos3 = pos;
-            var result10 = parse_not();
-            if (result10 !== null) {
-              var result11 = parse_action();
-              if (result11 !== null) {
-                var result8 = [result10, result11];
-              } else {
-                var result8 = null;
-                pos = savedPos3;
-              }
-            } else {
-              var result8 = null;
-              pos = savedPos3;
-            }
-            var result9 = result8 !== null
-              ? (function(code) {
-                    return {
-                      type: "semantic_not",
-                      code: code
-                    };
-                  })(result8[1])
-              : null;
-            if (result9 !== null) {
-              var result7 = result9;
-            } else {
-              var result7 = null;
-              pos = savedPos2;
-            }
-            if (result7 !== null) {
-              var result0 = result7;
-            } else {
-              var savedPos0 = pos;
-              var savedPos1 = pos;
-              var result5 = parse_not();
-              if (result5 !== null) {
-                var result6 = parse_suffixed();
-                if (result6 !== null) {
-                  var result3 = [result5, result6];
-                } else {
-                  var result3 = null;
-                  pos = savedPos1;
-                }
-              } else {
-                var result3 = null;
-                pos = savedPos1;
-              }
-              var result4 = result3 !== null
-                ? (function(expression) {
-                      return {
-                        type:       "simple_not",
-                        expression: expression
-                      };
-                    })(result3[1])
-                : null;
-              if (result4 !== null) {
-                var result2 = result4;
-              } else {
-                var result2 = null;
-                pos = savedPos0;
-              }
-              if (result2 !== null) {
-                var result0 = result2;
-              } else {
-                var result1 = parse_suffixed();
-                if (result1 !== null) {
-                  var result0 = result1;
-                } else {
-                  var result0 = null;;
-                };
-              };
-            };
-          };
-        }
-        
-        
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_suffixed() {
-        var cacheKey = 'suffixed@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        
-        var savedPos4 = pos;
-        var savedPos5 = pos;
-        var result15 = parse_primary();
-        if (result15 !== null) {
-          var result16 = parse_question();
-          if (result16 !== null) {
-            var result13 = [result15, result16];
-          } else {
-            var result13 = null;
-            pos = savedPos5;
-          }
-        } else {
-          var result13 = null;
-          pos = savedPos5;
-        }
-        var result14 = result13 !== null
-          ? (function(expression) {
-                return {
-                  type:       "optional",
-                  expression: expression
-                };
-              })(result13[0])
-          : null;
-        if (result14 !== null) {
-          var result12 = result14;
-        } else {
-          var result12 = null;
-          pos = savedPos4;
-        }
-        if (result12 !== null) {
-          var result0 = result12;
-        } else {
-          var savedPos2 = pos;
-          var savedPos3 = pos;
-          var result10 = parse_primary();
-          if (result10 !== null) {
-            var result11 = parse_star();
-            if (result11 !== null) {
-              var result8 = [result10, result11];
-            } else {
-              var result8 = null;
-              pos = savedPos3;
-            }
-          } else {
-            var result8 = null;
-            pos = savedPos3;
-          }
-          var result9 = result8 !== null
-            ? (function(expression) {
-                  return {
-                    type:       "zero_or_more",
-                    expression: expression
-                  };
-                })(result8[0])
-            : null;
-          if (result9 !== null) {
-            var result7 = result9;
-          } else {
-            var result7 = null;
-            pos = savedPos2;
-          }
-          if (result7 !== null) {
-            var result0 = result7;
-          } else {
-            var savedPos0 = pos;
-            var savedPos1 = pos;
-            var result5 = parse_primary();
-            if (result5 !== null) {
-              var result6 = parse_plus();
-              if (result6 !== null) {
-                var result3 = [result5, result6];
-              } else {
-                var result3 = null;
-                pos = savedPos1;
-              }
-            } else {
-              var result3 = null;
-              pos = savedPos1;
-            }
-            var result4 = result3 !== null
-              ? (function(expression) {
-                    return {
-                      type:       "one_or_more",
-                      expression: expression
-                    };
-                  })(result3[0])
-              : null;
-            if (result4 !== null) {
-              var result2 = result4;
-            } else {
-              var result2 = null;
-              pos = savedPos0;
-            }
-            if (result2 !== null) {
-              var result0 = result2;
-            } else {
-              var result1 = parse_primary();
-              if (result1 !== null) {
-                var result0 = result1;
-              } else {
-                var result0 = null;;
-              };
-            };
-          };
-        }
-        
-        
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_primary() {
-        var cacheKey = 'primary@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        
-        var savedPos4 = pos;
-        var savedPos5 = pos;
-        var result17 = parse_identifier();
-        if (result17 !== null) {
-          var savedPos6 = pos;
-          var savedReportMatchFailuresVar0 = reportMatchFailures;
-          reportMatchFailures = false;
-          var savedPos7 = pos;
-          var result23 = parse_literal();
-          if (result23 !== null) {
-            var result20 = result23;
-          } else {
-            if (input.substr(pos, 0) === "") {
-              var result22 = "";
-              pos += 0;
-            } else {
-              var result22 = null;
-              if (reportMatchFailures) {
-                matchFailed("\"\"");
-              }
-            }
-            if (result22 !== null) {
-              var result20 = result22;
-            } else {
-              var result20 = null;;
-            };
-          }
-          if (result20 !== null) {
-            var result21 = parse_equals();
-            if (result21 !== null) {
-              var result19 = [result20, result21];
-            } else {
-              var result19 = null;
-              pos = savedPos7;
-            }
-          } else {
-            var result19 = null;
-            pos = savedPos7;
-          }
-          reportMatchFailures = savedReportMatchFailuresVar0;
-          if (result19 === null) {
-            var result18 = '';
-          } else {
-            var result18 = null;
-            pos = savedPos6;
-          }
-          if (result18 !== null) {
-            var result15 = [result17, result18];
-          } else {
-            var result15 = null;
-            pos = savedPos5;
-          }
-        } else {
-          var result15 = null;
-          pos = savedPos5;
-        }
-        var result16 = result15 !== null
-          ? (function(name) {
-                return {
-                  type: "rule_ref",
-                  name: name
-                };
-              })(result15[0])
-          : null;
-        if (result16 !== null) {
-          var result14 = result16;
-        } else {
-          var result14 = null;
-          pos = savedPos4;
-        }
-        if (result14 !== null) {
-          var result0 = result14;
-        } else {
-          var savedPos3 = pos;
-          var result12 = parse_literal();
-          var result13 = result12 !== null
-            ? (function(value) {
-                  return {
-                    type:  "literal",
-                    value: value
-                  };
-                })(result12)
-            : null;
-          if (result13 !== null) {
-            var result11 = result13;
-          } else {
-            var result11 = null;
-            pos = savedPos3;
-          }
-          if (result11 !== null) {
-            var result0 = result11;
-          } else {
-            var savedPos2 = pos;
-            var result9 = parse_dot();
-            var result10 = result9 !== null
-              ? (function() { return { type: "any" }; })()
-              : null;
-            if (result10 !== null) {
-              var result8 = result10;
-            } else {
-              var result8 = null;
-              pos = savedPos2;
-            }
-            if (result8 !== null) {
-              var result0 = result8;
-            } else {
-              var result7 = parse_class();
-              if (result7 !== null) {
-                var result0 = result7;
-              } else {
-                var savedPos0 = pos;
-                var savedPos1 = pos;
-                var result4 = parse_lparen();
-                if (result4 !== null) {
-                  var result5 = parse_choice();
-                  if (result5 !== null) {
-                    var result6 = parse_rparen();
-                    if (result6 !== null) {
-                      var result2 = [result4, result5, result6];
-                    } else {
-                      var result2 = null;
-                      pos = savedPos1;
-                    }
-                  } else {
-                    var result2 = null;
-                    pos = savedPos1;
-                  }
-                } else {
-                  var result2 = null;
-                  pos = savedPos1;
-                }
-                var result3 = result2 !== null
-                  ? (function(expression) { return expression; })(result2[1])
-                  : null;
-                if (result3 !== null) {
-                  var result1 = result3;
-                } else {
-                  var result1 = null;
-                  pos = savedPos0;
-                }
-                if (result1 !== null) {
-                  var result0 = result1;
-                } else {
-                  var result0 = null;;
-                };
-              };
-            };
-          };
-        }
-        
-        
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_action() {
-        var cacheKey = 'action@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        var savedReportMatchFailures = reportMatchFailures;
-        reportMatchFailures = false;
-        var savedPos0 = pos;
-        var savedPos1 = pos;
-        var result3 = parse_braced();
-        if (result3 !== null) {
-          var result4 = parse___();
-          if (result4 !== null) {
-            var result1 = [result3, result4];
-          } else {
-            var result1 = null;
-            pos = savedPos1;
-          }
-        } else {
-          var result1 = null;
-          pos = savedPos1;
-        }
-        var result2 = result1 !== null
-          ? (function(braced) { return braced.substr(1, braced.length - 2); })(result1[0])
-          : null;
-        if (result2 !== null) {
-          var result0 = result2;
-        } else {
-          var result0 = null;
-          pos = savedPos0;
-        }
-        reportMatchFailures = savedReportMatchFailures;
-        if (reportMatchFailures && result0 === null) {
-          matchFailed("action");
-        }
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_braced() {
-        var cacheKey = 'braced@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        
-        var savedPos0 = pos;
-        var savedPos1 = pos;
-        if (input.substr(pos, 1) === "{") {
-          var result3 = "{";
-          pos += 1;
-        } else {
-          var result3 = null;
-          if (reportMatchFailures) {
-            matchFailed("\"{\"");
-          }
-        }
-        if (result3 !== null) {
-          var result4 = [];
-          var result8 = parse_braced();
-          if (result8 !== null) {
-            var result6 = result8;
-          } else {
-            var result7 = parse_nonBraceCharacter();
-            if (result7 !== null) {
-              var result6 = result7;
-            } else {
-              var result6 = null;;
-            };
-          }
-          while (result6 !== null) {
-            result4.push(result6);
-            var result8 = parse_braced();
-            if (result8 !== null) {
-              var result6 = result8;
-            } else {
-              var result7 = parse_nonBraceCharacter();
-              if (result7 !== null) {
-                var result6 = result7;
-              } else {
-                var result6 = null;;
-              };
-            }
-          }
-          if (result4 !== null) {
-            if (input.substr(pos, 1) === "}") {
-              var result5 = "}";
-              pos += 1;
-            } else {
-              var result5 = null;
-              if (reportMatchFailures) {
-                matchFailed("\"}\"");
-              }
-            }
-            if (result5 !== null) {
-              var result1 = [result3, result4, result5];
-            } else {
-              var result1 = null;
-              pos = savedPos1;
-            }
-          } else {
-            var result1 = null;
-            pos = savedPos1;
-          }
-        } else {
-          var result1 = null;
-          pos = savedPos1;
-        }
-        var result2 = result1 !== null
-          ? (function(parts) {
-                return "{" + parts.join("") + "}";
-              })(result1[1])
-          : null;
-        if (result2 !== null) {
-          var result0 = result2;
-        } else {
-          var result0 = null;
-          pos = savedPos0;
-        }
-        
-        
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_nonBraceCharacters() {
-        var cacheKey = 'nonBraceCharacters@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        
-        var savedPos0 = pos;
-        var result3 = parse_nonBraceCharacter();
-        if (result3 !== null) {
-          var result1 = [];
-          while (result3 !== null) {
-            result1.push(result3);
-            var result3 = parse_nonBraceCharacter();
-          }
-        } else {
-          var result1 = null;
-        }
-        var result2 = result1 !== null
-          ? (function(chars) { return chars.join(""); })(result1)
-          : null;
-        if (result2 !== null) {
-          var result0 = result2;
-        } else {
-          var result0 = null;
-          pos = savedPos0;
-        }
-        
-        
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_nonBraceCharacter() {
-        var cacheKey = 'nonBraceCharacter@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        
-        if (input.substr(pos).match(/^[^{}]/) !== null) {
-          var result0 = input.charAt(pos);
-          pos++;
-        } else {
-          var result0 = null;
-          if (reportMatchFailures) {
-            matchFailed("[^{}]");
-          }
-        }
-        
-        
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_equals() {
-        var cacheKey = 'equals@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        
-        var savedPos0 = pos;
-        var savedPos1 = pos;
-        if (input.substr(pos, 1) === "=") {
-          var result3 = "=";
-          pos += 1;
-        } else {
-          var result3 = null;
-          if (reportMatchFailures) {
-            matchFailed("\"=\"");
-          }
-        }
-        if (result3 !== null) {
-          var result4 = parse___();
-          if (result4 !== null) {
-            var result1 = [result3, result4];
-          } else {
-            var result1 = null;
-            pos = savedPos1;
-          }
-        } else {
-          var result1 = null;
-          pos = savedPos1;
-        }
-        var result2 = result1 !== null
-          ? (function() { return "="; })()
-          : null;
-        if (result2 !== null) {
-          var result0 = result2;
-        } else {
-          var result0 = null;
-          pos = savedPos0;
-        }
-        
-        
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_colon() {
-        var cacheKey = 'colon@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        
-        var savedPos0 = pos;
-        var savedPos1 = pos;
-        if (input.substr(pos, 1) === ":") {
-          var result3 = ":";
-          pos += 1;
-        } else {
-          var result3 = null;
-          if (reportMatchFailures) {
-            matchFailed("\":\"");
-          }
-        }
-        if (result3 !== null) {
-          var result4 = parse___();
-          if (result4 !== null) {
-            var result1 = [result3, result4];
-          } else {
-            var result1 = null;
-            pos = savedPos1;
-          }
-        } else {
-          var result1 = null;
-          pos = savedPos1;
-        }
-        var result2 = result1 !== null
-          ? (function() { return ":"; })()
-          : null;
-        if (result2 !== null) {
-          var result0 = result2;
-        } else {
-          var result0 = null;
-          pos = savedPos0;
-        }
-        
-        
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_semicolon() {
-        var cacheKey = 'semicolon@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        
-        var savedPos0 = pos;
-        var savedPos1 = pos;
-        if (input.substr(pos, 1) === ";") {
-          var result3 = ";";
-          pos += 1;
-        } else {
-          var result3 = null;
-          if (reportMatchFailures) {
-            matchFailed("\";\"");
-          }
-        }
-        if (result3 !== null) {
-          var result4 = parse___();
-          if (result4 !== null) {
-            var result1 = [result3, result4];
-          } else {
-            var result1 = null;
-            pos = savedPos1;
-          }
-        } else {
-          var result1 = null;
-          pos = savedPos1;
-        }
-        var result2 = result1 !== null
-          ? (function() { return ";"; })()
-          : null;
-        if (result2 !== null) {
-          var result0 = result2;
-        } else {
-          var result0 = null;
-          pos = savedPos0;
-        }
-        
-        
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_slash() {
-        var cacheKey = 'slash@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        
-        var savedPos0 = pos;
-        var savedPos1 = pos;
-        if (input.substr(pos, 1) === "/") {
-          var result3 = "/";
-          pos += 1;
-        } else {
-          var result3 = null;
-          if (reportMatchFailures) {
-            matchFailed("\"/\"");
-          }
-        }
-        if (result3 !== null) {
-          var result4 = parse___();
-          if (result4 !== null) {
-            var result1 = [result3, result4];
-          } else {
-            var result1 = null;
-            pos = savedPos1;
-          }
-        } else {
-          var result1 = null;
-          pos = savedPos1;
-        }
-        var result2 = result1 !== null
-          ? (function() { return "/"; })()
-          : null;
-        if (result2 !== null) {
-          var result0 = result2;
-        } else {
-          var result0 = null;
-          pos = savedPos0;
-        }
-        
-        
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_and() {
-        var cacheKey = 'and@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        
-        var savedPos0 = pos;
-        var savedPos1 = pos;
-        if (input.substr(pos, 1) === "&") {
-          var result3 = "&";
-          pos += 1;
-        } else {
-          var result3 = null;
-          if (reportMatchFailures) {
-            matchFailed("\"&\"");
-          }
-        }
-        if (result3 !== null) {
-          var result4 = parse___();
-          if (result4 !== null) {
-            var result1 = [result3, result4];
-          } else {
-            var result1 = null;
-            pos = savedPos1;
-          }
-        } else {
-          var result1 = null;
-          pos = savedPos1;
-        }
-        var result2 = result1 !== null
-          ? (function() { return "&"; })()
-          : null;
-        if (result2 !== null) {
-          var result0 = result2;
-        } else {
-          var result0 = null;
-          pos = savedPos0;
-        }
-        
-        
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_not() {
-        var cacheKey = 'not@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        
-        var savedPos0 = pos;
-        var savedPos1 = pos;
-        if (input.substr(pos, 1) === "!") {
-          var result3 = "!";
-          pos += 1;
-        } else {
-          var result3 = null;
-          if (reportMatchFailures) {
-            matchFailed("\"!\"");
-          }
-        }
-        if (result3 !== null) {
-          var result4 = parse___();
-          if (result4 !== null) {
-            var result1 = [result3, result4];
-          } else {
-            var result1 = null;
-            pos = savedPos1;
-          }
-        } else {
-          var result1 = null;
-          pos = savedPos1;
-        }
-        var result2 = result1 !== null
-          ? (function() { return "!"; })()
-          : null;
-        if (result2 !== null) {
-          var result0 = result2;
-        } else {
-          var result0 = null;
-          pos = savedPos0;
-        }
-        
-        
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_question() {
-        var cacheKey = 'question@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        
-        var savedPos0 = pos;
-        var savedPos1 = pos;
-        if (input.substr(pos, 1) === "?") {
-          var result3 = "?";
-          pos += 1;
-        } else {
-          var result3 = null;
-          if (reportMatchFailures) {
-            matchFailed("\"?\"");
-          }
-        }
-        if (result3 !== null) {
-          var result4 = parse___();
-          if (result4 !== null) {
-            var result1 = [result3, result4];
-          } else {
-            var result1 = null;
-            pos = savedPos1;
-          }
-        } else {
-          var result1 = null;
-          pos = savedPos1;
-        }
-        var result2 = result1 !== null
-          ? (function() { return "?"; })()
-          : null;
-        if (result2 !== null) {
-          var result0 = result2;
-        } else {
-          var result0 = null;
-          pos = savedPos0;
-        }
-        
-        
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_star() {
-        var cacheKey = 'star@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        
-        var savedPos0 = pos;
-        var savedPos1 = pos;
-        if (input.substr(pos, 1) === "*") {
-          var result3 = "*";
-          pos += 1;
-        } else {
-          var result3 = null;
-          if (reportMatchFailures) {
-            matchFailed("\"*\"");
-          }
-        }
-        if (result3 !== null) {
-          var result4 = parse___();
-          if (result4 !== null) {
-            var result1 = [result3, result4];
-          } else {
-            var result1 = null;
-            pos = savedPos1;
-          }
-        } else {
-          var result1 = null;
-          pos = savedPos1;
-        }
-        var result2 = result1 !== null
-          ? (function() { return "*"; })()
-          : null;
-        if (result2 !== null) {
-          var result0 = result2;
-        } else {
-          var result0 = null;
-          pos = savedPos0;
-        }
-        
-        
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_plus() {
-        var cacheKey = 'plus@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        
-        var savedPos0 = pos;
-        var savedPos1 = pos;
-        if (input.substr(pos, 1) === "+") {
-          var result3 = "+";
-          pos += 1;
-        } else {
-          var result3 = null;
-          if (reportMatchFailures) {
-            matchFailed("\"+\"");
-          }
-        }
-        if (result3 !== null) {
-          var result4 = parse___();
-          if (result4 !== null) {
-            var result1 = [result3, result4];
-          } else {
-            var result1 = null;
-            pos = savedPos1;
-          }
-        } else {
-          var result1 = null;
-          pos = savedPos1;
-        }
-        var result2 = result1 !== null
-          ? (function() { return "+"; })()
-          : null;
-        if (result2 !== null) {
-          var result0 = result2;
-        } else {
-          var result0 = null;
-          pos = savedPos0;
-        }
-        
-        
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_lparen() {
-        var cacheKey = 'lparen@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        
-        var savedPos0 = pos;
-        var savedPos1 = pos;
-        if (input.substr(pos, 1) === "(") {
-          var result3 = "(";
-          pos += 1;
-        } else {
-          var result3 = null;
-          if (reportMatchFailures) {
-            matchFailed("\"(\"");
-          }
-        }
-        if (result3 !== null) {
-          var result4 = parse___();
-          if (result4 !== null) {
-            var result1 = [result3, result4];
-          } else {
-            var result1 = null;
-            pos = savedPos1;
-          }
-        } else {
-          var result1 = null;
-          pos = savedPos1;
-        }
-        var result2 = result1 !== null
-          ? (function() { return "("; })()
-          : null;
-        if (result2 !== null) {
-          var result0 = result2;
-        } else {
-          var result0 = null;
-          pos = savedPos0;
-        }
-        
-        
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_rparen() {
-        var cacheKey = 'rparen@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        
-        var savedPos0 = pos;
-        var savedPos1 = pos;
-        if (input.substr(pos, 1) === ")") {
-          var result3 = ")";
-          pos += 1;
-        } else {
-          var result3 = null;
-          if (reportMatchFailures) {
-            matchFailed("\")\"");
-          }
-        }
-        if (result3 !== null) {
-          var result4 = parse___();
-          if (result4 !== null) {
-            var result1 = [result3, result4];
-          } else {
-            var result1 = null;
-            pos = savedPos1;
-          }
-        } else {
-          var result1 = null;
-          pos = savedPos1;
-        }
-        var result2 = result1 !== null
-          ? (function() { return ")"; })()
-          : null;
-        if (result2 !== null) {
-          var result0 = result2;
-        } else {
-          var result0 = null;
-          pos = savedPos0;
-        }
-        
-        
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_dot() {
-        var cacheKey = 'dot@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        
-        var savedPos0 = pos;
-        var savedPos1 = pos;
-        if (input.substr(pos, 1) === ".") {
-          var result3 = ".";
-          pos += 1;
-        } else {
-          var result3 = null;
-          if (reportMatchFailures) {
-            matchFailed("\".\"");
-          }
-        }
-        if (result3 !== null) {
-          var result4 = parse___();
-          if (result4 !== null) {
-            var result1 = [result3, result4];
-          } else {
-            var result1 = null;
-            pos = savedPos1;
-          }
-        } else {
-          var result1 = null;
-          pos = savedPos1;
-        }
-        var result2 = result1 !== null
-          ? (function() { return "."; })()
-          : null;
-        if (result2 !== null) {
-          var result0 = result2;
-        } else {
-          var result0 = null;
-          pos = savedPos0;
-        }
-        
-        
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_identifier() {
-        var cacheKey = 'identifier@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        var savedReportMatchFailures = reportMatchFailures;
-        reportMatchFailures = false;
-        var savedPos0 = pos;
-        var savedPos1 = pos;
-        var result13 = parse_letter();
-        if (result13 !== null) {
-          var result3 = result13;
-        } else {
-          if (input.substr(pos, 1) === "_") {
-            var result12 = "_";
-            pos += 1;
-          } else {
-            var result12 = null;
-            if (reportMatchFailures) {
-              matchFailed("\"_\"");
-            }
-          }
-          if (result12 !== null) {
-            var result3 = result12;
-          } else {
-            if (input.substr(pos, 1) === "$") {
-              var result11 = "$";
-              pos += 1;
-            } else {
-              var result11 = null;
-              if (reportMatchFailures) {
-                matchFailed("\"$\"");
-              }
-            }
-            if (result11 !== null) {
-              var result3 = result11;
-            } else {
-              var result3 = null;;
-            };
-          };
-        }
-        if (result3 !== null) {
-          var result4 = [];
-          var result10 = parse_letter();
-          if (result10 !== null) {
-            var result6 = result10;
-          } else {
-            var result9 = parse_digit();
-            if (result9 !== null) {
-              var result6 = result9;
-            } else {
-              if (input.substr(pos, 1) === "_") {
-                var result8 = "_";
-                pos += 1;
-              } else {
-                var result8 = null;
-                if (reportMatchFailures) {
-                  matchFailed("\"_\"");
-                }
-              }
-              if (result8 !== null) {
-                var result6 = result8;
-              } else {
-                if (input.substr(pos, 1) === "$") {
-                  var result7 = "$";
-                  pos += 1;
-                } else {
-                  var result7 = null;
-                  if (reportMatchFailures) {
-                    matchFailed("\"$\"");
-                  }
-                }
-                if (result7 !== null) {
-                  var result6 = result7;
-                } else {
-                  var result6 = null;;
-                };
-              };
-            };
-          }
-          while (result6 !== null) {
-            result4.push(result6);
-            var result10 = parse_letter();
-            if (result10 !== null) {
-              var result6 = result10;
-            } else {
-              var result9 = parse_digit();
-              if (result9 !== null) {
-                var result6 = result9;
-              } else {
-                if (input.substr(pos, 1) === "_") {
-                  var result8 = "_";
-                  pos += 1;
-                } else {
-                  var result8 = null;
-                  if (reportMatchFailures) {
-                    matchFailed("\"_\"");
-                  }
-                }
-                if (result8 !== null) {
-                  var result6 = result8;
-                } else {
-                  if (input.substr(pos, 1) === "$") {
-                    var result7 = "$";
-                    pos += 1;
-                  } else {
-                    var result7 = null;
-                    if (reportMatchFailures) {
-                      matchFailed("\"$\"");
-                    }
-                  }
-                  if (result7 !== null) {
-                    var result6 = result7;
-                  } else {
-                    var result6 = null;;
-                  };
-                };
-              };
-            }
-          }
-          if (result4 !== null) {
-            var result5 = parse___();
-            if (result5 !== null) {
-              var result1 = [result3, result4, result5];
-            } else {
-              var result1 = null;
-              pos = savedPos1;
-            }
-          } else {
-            var result1 = null;
-            pos = savedPos1;
-          }
-        } else {
-          var result1 = null;
-          pos = savedPos1;
-        }
-        var result2 = result1 !== null
-          ? (function(head, tail) {
-                return head + tail.join("");
-              })(result1[0], result1[1])
-          : null;
-        if (result2 !== null) {
-          var result0 = result2;
-        } else {
-          var result0 = null;
-          pos = savedPos0;
-        }
-        reportMatchFailures = savedReportMatchFailures;
-        if (reportMatchFailures && result0 === null) {
-          matchFailed("identifier");
-        }
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_literal() {
-        var cacheKey = 'literal@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        var savedReportMatchFailures = reportMatchFailures;
-        reportMatchFailures = false;
-        var savedPos0 = pos;
-        var savedPos1 = pos;
-        var result6 = parse_doubleQuotedLiteral();
-        if (result6 !== null) {
-          var result3 = result6;
-        } else {
-          var result5 = parse_singleQuotedLiteral();
-          if (result5 !== null) {
-            var result3 = result5;
-          } else {
-            var result3 = null;;
-          };
-        }
-        if (result3 !== null) {
-          var result4 = parse___();
-          if (result4 !== null) {
-            var result1 = [result3, result4];
-          } else {
-            var result1 = null;
-            pos = savedPos1;
-          }
-        } else {
-          var result1 = null;
-          pos = savedPos1;
-        }
-        var result2 = result1 !== null
-          ? (function(literal) { return literal; })(result1[0])
-          : null;
-        if (result2 !== null) {
-          var result0 = result2;
-        } else {
-          var result0 = null;
-          pos = savedPos0;
-        }
-        reportMatchFailures = savedReportMatchFailures;
-        if (reportMatchFailures && result0 === null) {
-          matchFailed("literal");
-        }
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_doubleQuotedLiteral() {
-        var cacheKey = 'doubleQuotedLiteral@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        
-        var savedPos0 = pos;
-        var savedPos1 = pos;
-        if (input.substr(pos, 1) === "\"") {
-          var result3 = "\"";
-          pos += 1;
-        } else {
-          var result3 = null;
-          if (reportMatchFailures) {
-            matchFailed("\"\\\"\"");
-          }
-        }
-        if (result3 !== null) {
-          var result4 = [];
-          var result6 = parse_doubleQuotedCharacter();
-          while (result6 !== null) {
-            result4.push(result6);
-            var result6 = parse_doubleQuotedCharacter();
-          }
-          if (result4 !== null) {
-            if (input.substr(pos, 1) === "\"") {
-              var result5 = "\"";
-              pos += 1;
-            } else {
-              var result5 = null;
-              if (reportMatchFailures) {
-                matchFailed("\"\\\"\"");
-              }
-            }
-            if (result5 !== null) {
-              var result1 = [result3, result4, result5];
-            } else {
-              var result1 = null;
-              pos = savedPos1;
-            }
-          } else {
-            var result1 = null;
-            pos = savedPos1;
-          }
-        } else {
-          var result1 = null;
-          pos = savedPos1;
-        }
-        var result2 = result1 !== null
-          ? (function(chars) { return chars.join(""); })(result1[1])
-          : null;
-        if (result2 !== null) {
-          var result0 = result2;
-        } else {
-          var result0 = null;
-          pos = savedPos0;
-        }
-        
-        
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_doubleQuotedCharacter() {
-        var cacheKey = 'doubleQuotedCharacter@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        
-        var result6 = parse_simpleDoubleQuotedCharacter();
-        if (result6 !== null) {
-          var result0 = result6;
-        } else {
-          var result5 = parse_simpleEscapeSequence();
-          if (result5 !== null) {
-            var result0 = result5;
-          } else {
-            var result4 = parse_zeroEscapeSequence();
-            if (result4 !== null) {
-              var result0 = result4;
-            } else {
-              var result3 = parse_hexEscapeSequence();
-              if (result3 !== null) {
-                var result0 = result3;
-              } else {
-                var result2 = parse_unicodeEscapeSequence();
-                if (result2 !== null) {
-                  var result0 = result2;
-                } else {
-                  var result1 = parse_eolEscapeSequence();
-                  if (result1 !== null) {
-                    var result0 = result1;
-                  } else {
-                    var result0 = null;;
-                  };
-                };
-              };
-            };
-          };
-        }
-        
-        
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_simpleDoubleQuotedCharacter() {
-        var cacheKey = 'simpleDoubleQuotedCharacter@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        
-        var savedPos0 = pos;
-        var savedPos1 = pos;
-        var savedPos2 = pos;
-        var savedReportMatchFailuresVar0 = reportMatchFailures;
-        reportMatchFailures = false;
-        if (input.substr(pos, 1) === "\"") {
-          var result8 = "\"";
-          pos += 1;
-        } else {
-          var result8 = null;
-          if (reportMatchFailures) {
-            matchFailed("\"\\\"\"");
-          }
-        }
-        if (result8 !== null) {
-          var result5 = result8;
-        } else {
-          if (input.substr(pos, 1) === "\\") {
-            var result7 = "\\";
-            pos += 1;
-          } else {
-            var result7 = null;
-            if (reportMatchFailures) {
-              matchFailed("\"\\\\\"");
-            }
-          }
-          if (result7 !== null) {
-            var result5 = result7;
-          } else {
-            var result6 = parse_eolChar();
-            if (result6 !== null) {
-              var result5 = result6;
-            } else {
-              var result5 = null;;
-            };
-          };
-        }
-        reportMatchFailures = savedReportMatchFailuresVar0;
-        if (result5 === null) {
-          var result3 = '';
-        } else {
-          var result3 = null;
-          pos = savedPos2;
-        }
-        if (result3 !== null) {
-          if (input.length > pos) {
-            var result4 = input.charAt(pos);
-            pos++;
-          } else {
-            var result4 = null;
-            if (reportMatchFailures) {
-              matchFailed('any character');
-            }
-          }
-          if (result4 !== null) {
-            var result1 = [result3, result4];
-          } else {
-            var result1 = null;
-            pos = savedPos1;
-          }
-        } else {
-          var result1 = null;
-          pos = savedPos1;
-        }
-        var result2 = result1 !== null
-          ? (function(char_) { return char_; })(result1[1])
-          : null;
-        if (result2 !== null) {
-          var result0 = result2;
-        } else {
-          var result0 = null;
-          pos = savedPos0;
-        }
-        
-        
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_singleQuotedLiteral() {
-        var cacheKey = 'singleQuotedLiteral@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        
-        var savedPos0 = pos;
-        var savedPos1 = pos;
-        if (input.substr(pos, 1) === "'") {
-          var result3 = "'";
-          pos += 1;
-        } else {
-          var result3 = null;
-          if (reportMatchFailures) {
-            matchFailed("\"'\"");
-          }
-        }
-        if (result3 !== null) {
-          var result4 = [];
-          var result6 = parse_singleQuotedCharacter();
-          while (result6 !== null) {
-            result4.push(result6);
-            var result6 = parse_singleQuotedCharacter();
-          }
-          if (result4 !== null) {
-            if (input.substr(pos, 1) === "'") {
-              var result5 = "'";
-              pos += 1;
-            } else {
-              var result5 = null;
-              if (reportMatchFailures) {
-                matchFailed("\"'\"");
-              }
-            }
-            if (result5 !== null) {
-              var result1 = [result3, result4, result5];
-            } else {
-              var result1 = null;
-              pos = savedPos1;
-            }
-          } else {
-            var result1 = null;
-            pos = savedPos1;
-          }
-        } else {
-          var result1 = null;
-          pos = savedPos1;
-        }
-        var result2 = result1 !== null
-          ? (function(chars) { return chars.join(""); })(result1[1])
-          : null;
-        if (result2 !== null) {
-          var result0 = result2;
-        } else {
-          var result0 = null;
-          pos = savedPos0;
-        }
-        
-        
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_singleQuotedCharacter() {
-        var cacheKey = 'singleQuotedCharacter@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        
-        var result6 = parse_simpleSingleQuotedCharacter();
-        if (result6 !== null) {
-          var result0 = result6;
-        } else {
-          var result5 = parse_simpleEscapeSequence();
-          if (result5 !== null) {
-            var result0 = result5;
-          } else {
-            var result4 = parse_zeroEscapeSequence();
-            if (result4 !== null) {
-              var result0 = result4;
-            } else {
-              var result3 = parse_hexEscapeSequence();
-              if (result3 !== null) {
-                var result0 = result3;
-              } else {
-                var result2 = parse_unicodeEscapeSequence();
-                if (result2 !== null) {
-                  var result0 = result2;
-                } else {
-                  var result1 = parse_eolEscapeSequence();
-                  if (result1 !== null) {
-                    var result0 = result1;
-                  } else {
-                    var result0 = null;;
-                  };
-                };
-              };
-            };
-          };
-        }
-        
-        
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_simpleSingleQuotedCharacter() {
-        var cacheKey = 'simpleSingleQuotedCharacter@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        
-        var savedPos0 = pos;
-        var savedPos1 = pos;
-        var savedPos2 = pos;
-        var savedReportMatchFailuresVar0 = reportMatchFailures;
-        reportMatchFailures = false;
-        if (input.substr(pos, 1) === "'") {
-          var result8 = "'";
-          pos += 1;
-        } else {
-          var result8 = null;
-          if (reportMatchFailures) {
-            matchFailed("\"'\"");
-          }
-        }
-        if (result8 !== null) {
-          var result5 = result8;
-        } else {
-          if (input.substr(pos, 1) === "\\") {
-            var result7 = "\\";
-            pos += 1;
-          } else {
-            var result7 = null;
-            if (reportMatchFailures) {
-              matchFailed("\"\\\\\"");
-            }
-          }
-          if (result7 !== null) {
-            var result5 = result7;
-          } else {
-            var result6 = parse_eolChar();
-            if (result6 !== null) {
-              var result5 = result6;
-            } else {
-              var result5 = null;;
-            };
-          };
-        }
-        reportMatchFailures = savedReportMatchFailuresVar0;
-        if (result5 === null) {
-          var result3 = '';
-        } else {
-          var result3 = null;
-          pos = savedPos2;
-        }
-        if (result3 !== null) {
-          if (input.length > pos) {
-            var result4 = input.charAt(pos);
-            pos++;
-          } else {
-            var result4 = null;
-            if (reportMatchFailures) {
-              matchFailed('any character');
-            }
-          }
-          if (result4 !== null) {
-            var result1 = [result3, result4];
-          } else {
-            var result1 = null;
-            pos = savedPos1;
-          }
-        } else {
-          var result1 = null;
-          pos = savedPos1;
-        }
-        var result2 = result1 !== null
-          ? (function(char_) { return char_; })(result1[1])
-          : null;
-        if (result2 !== null) {
-          var result0 = result2;
-        } else {
-          var result0 = null;
-          pos = savedPos0;
-        }
-        
-        
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_class() {
-        var cacheKey = 'class@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        var savedReportMatchFailures = reportMatchFailures;
-        reportMatchFailures = false;
-        var savedPos0 = pos;
-        var savedPos1 = pos;
-        if (input.substr(pos, 1) === "[") {
-          var result3 = "[";
-          pos += 1;
-        } else {
-          var result3 = null;
-          if (reportMatchFailures) {
-            matchFailed("\"[\"");
-          }
-        }
-        if (result3 !== null) {
-          if (input.substr(pos, 1) === "^") {
-            var result11 = "^";
-            pos += 1;
-          } else {
-            var result11 = null;
-            if (reportMatchFailures) {
-              matchFailed("\"^\"");
-            }
-          }
-          var result4 = result11 !== null ? result11 : '';
-          if (result4 !== null) {
-            var result5 = [];
-            var result10 = parse_classCharacterRange();
-            if (result10 !== null) {
-              var result8 = result10;
-            } else {
-              var result9 = parse_classCharacter();
-              if (result9 !== null) {
-                var result8 = result9;
-              } else {
-                var result8 = null;;
-              };
-            }
-            while (result8 !== null) {
-              result5.push(result8);
-              var result10 = parse_classCharacterRange();
-              if (result10 !== null) {
-                var result8 = result10;
-              } else {
-                var result9 = parse_classCharacter();
-                if (result9 !== null) {
-                  var result8 = result9;
-                } else {
-                  var result8 = null;;
-                };
-              }
-            }
-            if (result5 !== null) {
-              if (input.substr(pos, 1) === "]") {
-                var result6 = "]";
-                pos += 1;
-              } else {
-                var result6 = null;
-                if (reportMatchFailures) {
-                  matchFailed("\"]\"");
-                }
-              }
-              if (result6 !== null) {
-                var result7 = parse___();
-                if (result7 !== null) {
-                  var result1 = [result3, result4, result5, result6, result7];
-                } else {
-                  var result1 = null;
-                  pos = savedPos1;
-                }
-              } else {
-                var result1 = null;
-                pos = savedPos1;
-              }
-            } else {
-              var result1 = null;
-              pos = savedPos1;
-            }
-          } else {
-            var result1 = null;
-            pos = savedPos1;
-          }
-        } else {
-          var result1 = null;
-          pos = savedPos1;
-        }
-        var result2 = result1 !== null
-          ? (function(inverted, parts) {
-                var partsConverted = map(parts, function(part) { return part.data; });
-                var rawText = "["
-                  + inverted
-                  + map(parts, function(part) { return part.rawText; }).join("")
-                  + "]";
-          
-                return {
-                  type:     "class",
-                  inverted: inverted === "^",
-                  parts:    partsConverted,
-                  // FIXME: Get the raw text from the input directly.
-                  rawText:  rawText
-                };
-              })(result1[1], result1[2])
-          : null;
-        if (result2 !== null) {
-          var result0 = result2;
-        } else {
-          var result0 = null;
-          pos = savedPos0;
-        }
-        reportMatchFailures = savedReportMatchFailures;
-        if (reportMatchFailures && result0 === null) {
-          matchFailed("character class");
-        }
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_classCharacterRange() {
-        var cacheKey = 'classCharacterRange@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        
-        var savedPos0 = pos;
-        var savedPos1 = pos;
-        var result3 = parse_classCharacter();
-        if (result3 !== null) {
-          if (input.substr(pos, 1) === "-") {
-            var result4 = "-";
-            pos += 1;
-          } else {
-            var result4 = null;
-            if (reportMatchFailures) {
-              matchFailed("\"-\"");
-            }
-          }
-          if (result4 !== null) {
-            var result5 = parse_classCharacter();
-            if (result5 !== null) {
-              var result1 = [result3, result4, result5];
-            } else {
-              var result1 = null;
-              pos = savedPos1;
-            }
-          } else {
-            var result1 = null;
-            pos = savedPos1;
-          }
-        } else {
-          var result1 = null;
-          pos = savedPos1;
-        }
-        var result2 = result1 !== null
-          ? (function(begin, end) {
-                if (begin.data.charCodeAt(0) > end.data.charCodeAt(0)) {
-                  throw new this.SyntaxError(
-                    "Invalid character range: " + begin.rawText + "-" + end.rawText + "."
-                  );
-                }
-          
-                return {
-                  data:    [begin.data, end.data],
-                  // FIXME: Get the raw text from the input directly.
-                  rawText: begin.rawText + "-" + end.rawText
-                }
-              })(result1[0], result1[2])
-          : null;
-        if (result2 !== null) {
-          var result0 = result2;
-        } else {
-          var result0 = null;
-          pos = savedPos0;
-        }
-        
-        
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_classCharacter() {
-        var cacheKey = 'classCharacter@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        
-        var savedPos0 = pos;
-        var result1 = parse_bracketDelimitedCharacter();
-        var result2 = result1 !== null
-          ? (function(char_) {
-                return {
-                  data:    char_,
-                  // FIXME: Get the raw text from the input directly.
-                  rawText: quoteForRegexpClass(char_)
-                };
-              })(result1)
-          : null;
-        if (result2 !== null) {
-          var result0 = result2;
-        } else {
-          var result0 = null;
-          pos = savedPos0;
-        }
-        
-        
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_bracketDelimitedCharacter() {
-        var cacheKey = 'bracketDelimitedCharacter@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        
-        var result6 = parse_simpleBracketDelimitedCharacter();
-        if (result6 !== null) {
-          var result0 = result6;
-        } else {
-          var result5 = parse_simpleEscapeSequence();
-          if (result5 !== null) {
-            var result0 = result5;
-          } else {
-            var result4 = parse_zeroEscapeSequence();
-            if (result4 !== null) {
-              var result0 = result4;
-            } else {
-              var result3 = parse_hexEscapeSequence();
-              if (result3 !== null) {
-                var result0 = result3;
-              } else {
-                var result2 = parse_unicodeEscapeSequence();
-                if (result2 !== null) {
-                  var result0 = result2;
-                } else {
-                  var result1 = parse_eolEscapeSequence();
-                  if (result1 !== null) {
-                    var result0 = result1;
-                  } else {
-                    var result0 = null;;
-                  };
-                };
-              };
-            };
-          };
-        }
-        
-        
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_simpleBracketDelimitedCharacter() {
-        var cacheKey = 'simpleBracketDelimitedCharacter@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        
-        var savedPos0 = pos;
-        var savedPos1 = pos;
-        var savedPos2 = pos;
-        var savedReportMatchFailuresVar0 = reportMatchFailures;
-        reportMatchFailures = false;
-        if (input.substr(pos, 1) === "]") {
-          var result8 = "]";
-          pos += 1;
-        } else {
-          var result8 = null;
-          if (reportMatchFailures) {
-            matchFailed("\"]\"");
-          }
-        }
-        if (result8 !== null) {
-          var result5 = result8;
-        } else {
-          if (input.substr(pos, 1) === "\\") {
-            var result7 = "\\";
-            pos += 1;
-          } else {
-            var result7 = null;
-            if (reportMatchFailures) {
-              matchFailed("\"\\\\\"");
-            }
-          }
-          if (result7 !== null) {
-            var result5 = result7;
-          } else {
-            var result6 = parse_eolChar();
-            if (result6 !== null) {
-              var result5 = result6;
-            } else {
-              var result5 = null;;
-            };
-          };
-        }
-        reportMatchFailures = savedReportMatchFailuresVar0;
-        if (result5 === null) {
-          var result3 = '';
-        } else {
-          var result3 = null;
-          pos = savedPos2;
-        }
-        if (result3 !== null) {
-          if (input.length > pos) {
-            var result4 = input.charAt(pos);
-            pos++;
-          } else {
-            var result4 = null;
-            if (reportMatchFailures) {
-              matchFailed('any character');
-            }
-          }
-          if (result4 !== null) {
-            var result1 = [result3, result4];
-          } else {
-            var result1 = null;
-            pos = savedPos1;
-          }
-        } else {
-          var result1 = null;
-          pos = savedPos1;
-        }
-        var result2 = result1 !== null
-          ? (function(char_) { return char_; })(result1[1])
-          : null;
-        if (result2 !== null) {
-          var result0 = result2;
-        } else {
-          var result0 = null;
-          pos = savedPos0;
-        }
-        
-        
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_simpleEscapeSequence() {
-        var cacheKey = 'simpleEscapeSequence@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        
-        var savedPos0 = pos;
-        var savedPos1 = pos;
-        if (input.substr(pos, 1) === "\\") {
-          var result3 = "\\";
-          pos += 1;
-        } else {
-          var result3 = null;
-          if (reportMatchFailures) {
-            matchFailed("\"\\\\\"");
-          }
-        }
-        if (result3 !== null) {
-          var savedPos2 = pos;
-          var savedReportMatchFailuresVar0 = reportMatchFailures;
-          reportMatchFailures = false;
-          var result10 = parse_digit();
-          if (result10 !== null) {
-            var result6 = result10;
-          } else {
-            if (input.substr(pos, 1) === "x") {
-              var result9 = "x";
-              pos += 1;
-            } else {
-              var result9 = null;
-              if (reportMatchFailures) {
-                matchFailed("\"x\"");
-              }
-            }
-            if (result9 !== null) {
-              var result6 = result9;
-            } else {
-              if (input.substr(pos, 1) === "u") {
-                var result8 = "u";
-                pos += 1;
-              } else {
-                var result8 = null;
-                if (reportMatchFailures) {
-                  matchFailed("\"u\"");
-                }
-              }
-              if (result8 !== null) {
-                var result6 = result8;
-              } else {
-                var result7 = parse_eolChar();
-                if (result7 !== null) {
-                  var result6 = result7;
-                } else {
-                  var result6 = null;;
-                };
-              };
-            };
-          }
-          reportMatchFailures = savedReportMatchFailuresVar0;
-          if (result6 === null) {
-            var result4 = '';
-          } else {
-            var result4 = null;
-            pos = savedPos2;
-          }
-          if (result4 !== null) {
-            if (input.length > pos) {
-              var result5 = input.charAt(pos);
-              pos++;
-            } else {
-              var result5 = null;
-              if (reportMatchFailures) {
-                matchFailed('any character');
-              }
-            }
-            if (result5 !== null) {
-              var result1 = [result3, result4, result5];
-            } else {
-              var result1 = null;
-              pos = savedPos1;
-            }
-          } else {
-            var result1 = null;
-            pos = savedPos1;
-          }
-        } else {
-          var result1 = null;
-          pos = savedPos1;
-        }
-        var result2 = result1 !== null
-          ? (function(char_) {
-                return char_
-                  .replace("b", "\b")
-                  .replace("f", "\f")
-                  .replace("n", "\n")
-                  .replace("r", "\r")
-                  .replace("t", "\t")
-                  .replace("v", "\x0B") // IE does not recognize "\v".
-              })(result1[2])
-          : null;
-        if (result2 !== null) {
-          var result0 = result2;
-        } else {
-          var result0 = null;
-          pos = savedPos0;
-        }
-        
-        
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_zeroEscapeSequence() {
-        var cacheKey = 'zeroEscapeSequence@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        
-        var savedPos0 = pos;
-        var savedPos1 = pos;
-        if (input.substr(pos, 2) === "\\0") {
-          var result3 = "\\0";
-          pos += 2;
-        } else {
-          var result3 = null;
-          if (reportMatchFailures) {
-            matchFailed("\"\\\\0\"");
-          }
-        }
-        if (result3 !== null) {
-          var savedPos2 = pos;
-          var savedReportMatchFailuresVar0 = reportMatchFailures;
-          reportMatchFailures = false;
-          var result5 = parse_digit();
-          reportMatchFailures = savedReportMatchFailuresVar0;
-          if (result5 === null) {
-            var result4 = '';
-          } else {
-            var result4 = null;
-            pos = savedPos2;
-          }
-          if (result4 !== null) {
-            var result1 = [result3, result4];
-          } else {
-            var result1 = null;
-            pos = savedPos1;
-          }
-        } else {
-          var result1 = null;
-          pos = savedPos1;
-        }
-        var result2 = result1 !== null
-          ? (function() { return "\0"; })()
-          : null;
-        if (result2 !== null) {
-          var result0 = result2;
-        } else {
-          var result0 = null;
-          pos = savedPos0;
-        }
-        
-        
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_hexEscapeSequence() {
-        var cacheKey = 'hexEscapeSequence@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        
-        var savedPos0 = pos;
-        var savedPos1 = pos;
-        if (input.substr(pos, 2) === "\\x") {
-          var result3 = "\\x";
-          pos += 2;
-        } else {
-          var result3 = null;
-          if (reportMatchFailures) {
-            matchFailed("\"\\\\x\"");
-          }
-        }
-        if (result3 !== null) {
-          var result4 = parse_hexDigit();
-          if (result4 !== null) {
-            var result5 = parse_hexDigit();
-            if (result5 !== null) {
-              var result1 = [result3, result4, result5];
-            } else {
-              var result1 = null;
-              pos = savedPos1;
-            }
-          } else {
-            var result1 = null;
-            pos = savedPos1;
-          }
-        } else {
-          var result1 = null;
-          pos = savedPos1;
-        }
-        var result2 = result1 !== null
-          ? (function(h1, h2) {
-                return String.fromCharCode(parseInt("0x" + h1 + h2));
-              })(result1[1], result1[2])
-          : null;
-        if (result2 !== null) {
-          var result0 = result2;
-        } else {
-          var result0 = null;
-          pos = savedPos0;
-        }
-        
-        
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_unicodeEscapeSequence() {
-        var cacheKey = 'unicodeEscapeSequence@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        
-        var savedPos0 = pos;
-        var savedPos1 = pos;
-        if (input.substr(pos, 2) === "\\u") {
-          var result3 = "\\u";
-          pos += 2;
-        } else {
-          var result3 = null;
-          if (reportMatchFailures) {
-            matchFailed("\"\\\\u\"");
-          }
-        }
-        if (result3 !== null) {
-          var result4 = parse_hexDigit();
-          if (result4 !== null) {
-            var result5 = parse_hexDigit();
-            if (result5 !== null) {
-              var result6 = parse_hexDigit();
-              if (result6 !== null) {
-                var result7 = parse_hexDigit();
-                if (result7 !== null) {
-                  var result1 = [result3, result4, result5, result6, result7];
-                } else {
-                  var result1 = null;
-                  pos = savedPos1;
-                }
-              } else {
-                var result1 = null;
-                pos = savedPos1;
-              }
-            } else {
-              var result1 = null;
-              pos = savedPos1;
-            }
-          } else {
-            var result1 = null;
-            pos = savedPos1;
-          }
-        } else {
-          var result1 = null;
-          pos = savedPos1;
-        }
-        var result2 = result1 !== null
-          ? (function(h1, h2, h3, h4) {
-                return String.fromCharCode(parseInt("0x" + h1 + h2 + h3 + h4));
-              })(result1[1], result1[2], result1[3], result1[4])
-          : null;
-        if (result2 !== null) {
-          var result0 = result2;
-        } else {
-          var result0 = null;
-          pos = savedPos0;
-        }
-        
-        
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_eolEscapeSequence() {
-        var cacheKey = 'eolEscapeSequence@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        
-        var savedPos0 = pos;
-        var savedPos1 = pos;
-        if (input.substr(pos, 1) === "\\") {
-          var result3 = "\\";
-          pos += 1;
-        } else {
-          var result3 = null;
-          if (reportMatchFailures) {
-            matchFailed("\"\\\\\"");
-          }
-        }
-        if (result3 !== null) {
-          var result4 = parse_eol();
-          if (result4 !== null) {
-            var result1 = [result3, result4];
-          } else {
-            var result1 = null;
-            pos = savedPos1;
-          }
-        } else {
-          var result1 = null;
-          pos = savedPos1;
-        }
-        var result2 = result1 !== null
-          ? (function(eol) { return eol; })(result1[1])
-          : null;
-        if (result2 !== null) {
-          var result0 = result2;
-        } else {
-          var result0 = null;
-          pos = savedPos0;
-        }
-        
-        
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_digit() {
-        var cacheKey = 'digit@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        
-        if (input.substr(pos).match(/^[0-9]/) !== null) {
-          var result0 = input.charAt(pos);
-          pos++;
-        } else {
-          var result0 = null;
-          if (reportMatchFailures) {
-            matchFailed("[0-9]");
-          }
-        }
-        
-        
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_hexDigit() {
-        var cacheKey = 'hexDigit@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        
-        if (input.substr(pos).match(/^[0-9a-fA-F]/) !== null) {
-          var result0 = input.charAt(pos);
-          pos++;
-        } else {
-          var result0 = null;
-          if (reportMatchFailures) {
-            matchFailed("[0-9a-fA-F]");
-          }
-        }
-        
-        
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_letter() {
-        var cacheKey = 'letter@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        
-        var result2 = parse_lowerCaseLetter();
-        if (result2 !== null) {
-          var result0 = result2;
-        } else {
-          var result1 = parse_upperCaseLetter();
-          if (result1 !== null) {
-            var result0 = result1;
-          } else {
-            var result0 = null;;
-          };
-        }
-        
-        
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_lowerCaseLetter() {
-        var cacheKey = 'lowerCaseLetter@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        
-        if (input.substr(pos).match(/^[a-z]/) !== null) {
-          var result0 = input.charAt(pos);
-          pos++;
-        } else {
-          var result0 = null;
-          if (reportMatchFailures) {
-            matchFailed("[a-z]");
-          }
-        }
-        
-        
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_upperCaseLetter() {
-        var cacheKey = 'upperCaseLetter@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        
-        if (input.substr(pos).match(/^[A-Z]/) !== null) {
-          var result0 = input.charAt(pos);
-          pos++;
-        } else {
-          var result0 = null;
-          if (reportMatchFailures) {
-            matchFailed("[A-Z]");
-          }
-        }
-        
-        
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse___() {
-        var cacheKey = '__@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        
-        var result0 = [];
-        var result4 = parse_whitespace();
-        if (result4 !== null) {
-          var result1 = result4;
-        } else {
-          var result3 = parse_eol();
-          if (result3 !== null) {
-            var result1 = result3;
-          } else {
-            var result2 = parse_comment();
-            if (result2 !== null) {
-              var result1 = result2;
-            } else {
-              var result1 = null;;
-            };
-          };
-        }
-        while (result1 !== null) {
-          result0.push(result1);
-          var result4 = parse_whitespace();
-          if (result4 !== null) {
-            var result1 = result4;
-          } else {
-            var result3 = parse_eol();
-            if (result3 !== null) {
-              var result1 = result3;
-            } else {
-              var result2 = parse_comment();
-              if (result2 !== null) {
-                var result1 = result2;
-              } else {
-                var result1 = null;;
-              };
-            };
-          }
-        }
-        
-        
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_comment() {
-        var cacheKey = 'comment@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        var savedReportMatchFailures = reportMatchFailures;
-        reportMatchFailures = false;
-        var result2 = parse_singleLineComment();
-        if (result2 !== null) {
-          var result0 = result2;
-        } else {
-          var result1 = parse_multiLineComment();
-          if (result1 !== null) {
-            var result0 = result1;
-          } else {
-            var result0 = null;;
-          };
-        }
-        reportMatchFailures = savedReportMatchFailures;
-        if (reportMatchFailures && result0 === null) {
-          matchFailed("comment");
-        }
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_singleLineComment() {
-        var cacheKey = 'singleLineComment@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        
-        var savedPos0 = pos;
-        if (input.substr(pos, 2) === "//") {
-          var result1 = "//";
-          pos += 2;
-        } else {
-          var result1 = null;
-          if (reportMatchFailures) {
-            matchFailed("\"//\"");
-          }
-        }
-        if (result1 !== null) {
-          var result2 = [];
-          var savedPos1 = pos;
-          var savedPos2 = pos;
-          var savedReportMatchFailuresVar0 = reportMatchFailures;
-          reportMatchFailures = false;
-          var result6 = parse_eolChar();
-          reportMatchFailures = savedReportMatchFailuresVar0;
-          if (result6 === null) {
-            var result4 = '';
-          } else {
-            var result4 = null;
-            pos = savedPos2;
-          }
-          if (result4 !== null) {
-            if (input.length > pos) {
-              var result5 = input.charAt(pos);
-              pos++;
-            } else {
-              var result5 = null;
-              if (reportMatchFailures) {
-                matchFailed('any character');
-              }
-            }
-            if (result5 !== null) {
-              var result3 = [result4, result5];
-            } else {
-              var result3 = null;
-              pos = savedPos1;
-            }
-          } else {
-            var result3 = null;
-            pos = savedPos1;
-          }
-          while (result3 !== null) {
-            result2.push(result3);
-            var savedPos1 = pos;
-            var savedPos2 = pos;
-            var savedReportMatchFailuresVar0 = reportMatchFailures;
-            reportMatchFailures = false;
-            var result6 = parse_eolChar();
-            reportMatchFailures = savedReportMatchFailuresVar0;
-            if (result6 === null) {
-              var result4 = '';
-            } else {
-              var result4 = null;
-              pos = savedPos2;
-            }
-            if (result4 !== null) {
-              if (input.length > pos) {
-                var result5 = input.charAt(pos);
-                pos++;
-              } else {
-                var result5 = null;
-                if (reportMatchFailures) {
-                  matchFailed('any character');
-                }
-              }
-              if (result5 !== null) {
-                var result3 = [result4, result5];
-              } else {
-                var result3 = null;
-                pos = savedPos1;
-              }
-            } else {
-              var result3 = null;
-              pos = savedPos1;
-            }
-          }
-          if (result2 !== null) {
-            var result0 = [result1, result2];
-          } else {
-            var result0 = null;
-            pos = savedPos0;
-          }
-        } else {
-          var result0 = null;
-          pos = savedPos0;
-        }
-        
-        
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_multiLineComment() {
-        var cacheKey = 'multiLineComment@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        
-        var savedPos0 = pos;
-        if (input.substr(pos, 2) === "/*") {
-          var result1 = "/*";
-          pos += 2;
-        } else {
-          var result1 = null;
-          if (reportMatchFailures) {
-            matchFailed("\"/*\"");
-          }
-        }
-        if (result1 !== null) {
-          var result2 = [];
-          var savedPos1 = pos;
-          var savedPos2 = pos;
-          var savedReportMatchFailuresVar0 = reportMatchFailures;
-          reportMatchFailures = false;
-          if (input.substr(pos, 2) === "*/") {
-            var result7 = "*/";
-            pos += 2;
-          } else {
-            var result7 = null;
-            if (reportMatchFailures) {
-              matchFailed("\"*/\"");
-            }
-          }
-          reportMatchFailures = savedReportMatchFailuresVar0;
-          if (result7 === null) {
-            var result5 = '';
-          } else {
-            var result5 = null;
-            pos = savedPos2;
-          }
-          if (result5 !== null) {
-            if (input.length > pos) {
-              var result6 = input.charAt(pos);
-              pos++;
-            } else {
-              var result6 = null;
-              if (reportMatchFailures) {
-                matchFailed('any character');
-              }
-            }
-            if (result6 !== null) {
-              var result4 = [result5, result6];
-            } else {
-              var result4 = null;
-              pos = savedPos1;
-            }
-          } else {
-            var result4 = null;
-            pos = savedPos1;
-          }
-          while (result4 !== null) {
-            result2.push(result4);
-            var savedPos1 = pos;
-            var savedPos2 = pos;
-            var savedReportMatchFailuresVar0 = reportMatchFailures;
-            reportMatchFailures = false;
-            if (input.substr(pos, 2) === "*/") {
-              var result7 = "*/";
-              pos += 2;
-            } else {
-              var result7 = null;
-              if (reportMatchFailures) {
-                matchFailed("\"*/\"");
-              }
-            }
-            reportMatchFailures = savedReportMatchFailuresVar0;
-            if (result7 === null) {
-              var result5 = '';
-            } else {
-              var result5 = null;
-              pos = savedPos2;
-            }
-            if (result5 !== null) {
-              if (input.length > pos) {
-                var result6 = input.charAt(pos);
-                pos++;
-              } else {
-                var result6 = null;
-                if (reportMatchFailures) {
-                  matchFailed('any character');
-                }
-              }
-              if (result6 !== null) {
-                var result4 = [result5, result6];
-              } else {
-                var result4 = null;
-                pos = savedPos1;
-              }
-            } else {
-              var result4 = null;
-              pos = savedPos1;
-            }
-          }
-          if (result2 !== null) {
-            if (input.substr(pos, 2) === "*/") {
-              var result3 = "*/";
-              pos += 2;
-            } else {
-              var result3 = null;
-              if (reportMatchFailures) {
-                matchFailed("\"*/\"");
-              }
-            }
-            if (result3 !== null) {
-              var result0 = [result1, result2, result3];
-            } else {
-              var result0 = null;
-              pos = savedPos0;
-            }
-          } else {
-            var result0 = null;
-            pos = savedPos0;
-          }
-        } else {
-          var result0 = null;
-          pos = savedPos0;
-        }
-        
-        
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_eol() {
-        var cacheKey = 'eol@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        var savedReportMatchFailures = reportMatchFailures;
-        reportMatchFailures = false;
-        if (input.substr(pos, 1) === "\n") {
-          var result5 = "\n";
-          pos += 1;
-        } else {
-          var result5 = null;
-          if (reportMatchFailures) {
-            matchFailed("\"\\n\"");
-          }
-        }
-        if (result5 !== null) {
-          var result0 = result5;
-        } else {
-          if (input.substr(pos, 2) === "\r\n") {
-            var result4 = "\r\n";
-            pos += 2;
-          } else {
-            var result4 = null;
-            if (reportMatchFailures) {
-              matchFailed("\"\\r\\n\"");
-            }
-          }
-          if (result4 !== null) {
-            var result0 = result4;
-          } else {
-            if (input.substr(pos, 1) === "\r") {
-              var result3 = "\r";
-              pos += 1;
-            } else {
-              var result3 = null;
-              if (reportMatchFailures) {
-                matchFailed("\"\\r\"");
-              }
-            }
-            if (result3 !== null) {
-              var result0 = result3;
-            } else {
-              if (input.substr(pos, 1) === "\u2028") {
-                var result2 = "\u2028";
-                pos += 1;
-              } else {
-                var result2 = null;
-                if (reportMatchFailures) {
-                  matchFailed("\"\\u2028\"");
-                }
-              }
-              if (result2 !== null) {
-                var result0 = result2;
-              } else {
-                if (input.substr(pos, 1) === "\u2029") {
-                  var result1 = "\u2029";
-                  pos += 1;
-                } else {
-                  var result1 = null;
-                  if (reportMatchFailures) {
-                    matchFailed("\"\\u2029\"");
-                  }
-                }
-                if (result1 !== null) {
-                  var result0 = result1;
-                } else {
-                  var result0 = null;;
-                };
-              };
-            };
-          };
-        }
-        reportMatchFailures = savedReportMatchFailures;
-        if (reportMatchFailures && result0 === null) {
-          matchFailed("end of line");
-        }
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_eolChar() {
-        var cacheKey = 'eolChar@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        
-        if (input.substr(pos).match(/^[\n\r\u2028\u2029]/) !== null) {
-          var result0 = input.charAt(pos);
-          pos++;
-        } else {
-          var result0 = null;
-          if (reportMatchFailures) {
-            matchFailed("[\\n\\r\\u2028\\u2029]");
-          }
-        }
-        
-        
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_whitespace() {
-        var cacheKey = 'whitespace@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        var savedReportMatchFailures = reportMatchFailures;
-        reportMatchFailures = false;
-        if (input.substr(pos).match(/^[ 	\xA0\uFEFF\u1680\u180E\u2000-\u200A\u202F\u205F\u3000]/) !== null) {
-          var result0 = input.charAt(pos);
-          pos++;
-        } else {
-          var result0 = null;
-          if (reportMatchFailures) {
-            matchFailed("[ 	\\xA0\\uFEFF\\u1680\\u180E\\u2000-\\u200A\\u202F\\u205F\\u3000]");
-          }
-        }
-        reportMatchFailures = savedReportMatchFailures;
-        if (reportMatchFailures && result0 === null) {
-          matchFailed("whitespace");
-        }
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function buildErrorMessage() {
-        function buildExpected(failuresExpected) {
-          failuresExpected.sort();
-          
-          var lastFailure = null;
-          var failuresExpectedUnique = [];
-          for (var i = 0; i < failuresExpected.length; i++) {
-            if (failuresExpected[i] !== lastFailure) {
-              failuresExpectedUnique.push(failuresExpected[i]);
-              lastFailure = failuresExpected[i];
-            }
-          }
-          
-          switch (failuresExpectedUnique.length) {
-            case 0:
-              return 'end of input';
-            case 1:
-              return failuresExpectedUnique[0];
-            default:
-              return failuresExpectedUnique.slice(0, failuresExpectedUnique.length - 1).join(', ')
-                + ' or '
-                + failuresExpectedUnique[failuresExpectedUnique.length - 1];
-          }
-        }
-        
-        var expected = buildExpected(rightmostMatchFailuresExpected);
-        var actualPos = Math.max(pos, rightmostMatchFailuresPos);
-        var actual = actualPos < input.length
-          ? quote(input.charAt(actualPos))
-          : 'end of input';
-        
-        return 'Expected ' + expected + ' but ' + actual + ' found.';
-      }
-      
-      function computeErrorPosition() {
-        /*
-         * The first idea was to use |String.split| to break the input up to the
-         * error position along newlines and derive the line and column from
-         * there. However IE's |split| implementation is so broken that it was
-         * enough to prevent it.
-         */
-        
-        var line = 1;
-        var column = 1;
-        var seenCR = false;
-        
-        for (var i = 0; i <  rightmostMatchFailuresPos; i++) {
-          var ch = input.charAt(i);
-          if (ch === '\n') {
-            if (!seenCR) { line++; }
-            column = 1;
-            seenCR = false;
-          } else if (ch === '\r' | ch === '\u2028' || ch === '\u2029') {
-            line++;
-            column = 1;
-            seenCR = true;
-          } else {
-            column++;
-            seenCR = false;
-          }
-        }
-        
-        return { line: line, column: column };
-      }
-      
-      
-      
-      var result = parseFunctions[startRule]();
-      
-      /*
-       * The parser is now in one of the following three states:
-       *
-       * 1. The parser successfully parsed the whole input.
-       *
-       *    - |result !== null|
-       *    - |pos === input.length|
-       *    - |rightmostMatchFailuresExpected| may or may not contain something
-       *
-       * 2. The parser successfully parsed only a part of the input.
-       *
-       *    - |result !== null|
-       *    - |pos < input.length|
-       *    - |rightmostMatchFailuresExpected| may or may not contain something
-       *
-       * 3. The parser did not successfully parse any part of the input.
-       *
-       *   - |result === null|
-       *   - |pos === 0|
-       *   - |rightmostMatchFailuresExpected| contains at least one failure
-       *
-       * All code following this comment (including called functions) must
-       * handle these states.
-       */
-      if (result === null || pos !== input.length) {
-        var errorPosition = computeErrorPosition();
-        throw new this.SyntaxError(
-          buildErrorMessage(),
-          errorPosition.line,
-          errorPosition.column
-        );
-      }
-      
-      return result;
-    },
-    
-    /* Returns the parser source code. */
-    toSource: function() { return this._source; }
-  };
-  
-  /* Thrown when a parser encounters a syntax error. */
-  
-  result.SyntaxError = function(message, line, column) {
-    this.name = 'SyntaxError';
-    this.message = message;
-    this.line = line;
-    this.column = column;
-  };
-  
-  result.SyntaxError.prototype = Error.prototype;
-  
-  return result;
-})();
-PEG.compiler = {
-  /*
-   * Generates a parser from a specified grammar AST. Throws |PEG.GrammarError|
-   * if the AST contains a semantic error. Note that not all errors are detected
-   * during the generation and some may protrude to the generated parser and
-   * cause its malfunction.
-   */
-  compile: function(ast) {
-    var CHECK_NAMES = [
-      "missingReferencedRules",
-      "leftRecursion"
-    ];
-
-    var PASS_NAMES = [
-      "proxyRules"
-    ];
-
-    for (var i = 0; i < CHECK_NAMES.length; i++) {
-      this.checks[CHECK_NAMES[i]](ast);
-    }
-
-    for (var i = 0; i < PASS_NAMES.length; i++) {
-      ast = this.passes[PASS_NAMES[i]](ast);
-    }
-
-    var source = this.emitter(ast);
-    var result = eval(source);
-    result._source = source;
-
-    return result;
-  }
-};
-
-/*
- * Checks made on the grammar AST before compilation. Each check is a function
- * that is passed the AST and does not return anything. If the check passes, the
- * function does not do anything special, otherwise it throws
- * |PEG.GrammarError|. The order in which the checks are run is specified in
- * |PEG.compiler.compile| and should be the same as the order of definitions
- * here.
- */
-PEG.compiler.checks = {
-  /* Checks that all referenced rules exist. */
-  missingReferencedRules: function(ast) {
-    function nop() {}
-
-    function checkExpression(node) { check(node.expression); }
-
-    function checkSubnodes(propertyName) {
-      return function(node) { each(node[propertyName], check); };
-    }
-
-    var check = buildNodeVisitor({
-      grammar:
-        function(node) {
-          for (var name in node.rules) {
-            check(node.rules[name]);
-          }
-        },
-
-      rule:         checkExpression,
-      choice:       checkSubnodes("alternatives"),
-      sequence:     checkSubnodes("elements"),
-      labeled:      checkExpression,
-      simple_and:   checkExpression,
-      simple_not:   checkExpression,
-      semantic_and: nop,
-      semantic_not: nop,
-      optional:     checkExpression,
-      zero_or_more: checkExpression,
-      one_or_more:  checkExpression,
-      action:       checkExpression,
-
-      rule_ref:
-        function(node) {
-          if (ast.rules[node.name] === undefined) {
-            throw new PEG.GrammarError(
-              "Referenced rule \"" + node.name + "\" does not exist."
-            );
-          }
-        },
-
-      literal:      nop,
-      any:          nop,
-      "class":      nop
-    });
-
-    check(ast);
-  },
-
-  /* Checks that no left recursion is present. */
-  leftRecursion: function(ast) {
-    function nop() {}
-
-    function checkExpression(node, appliedRules) {
-      check(node.expression, appliedRules);
-    }
-
-    var check = buildNodeVisitor({
-      grammar:
-        function(node, appliedRules) {
-          for (var name in node.rules) {
-            check(node.rules[name], appliedRules);
-          }
-        },
-
-      rule:
-        function(node, appliedRules) {
-          check(node.expression, appliedRules.concat(node.name));
-        },
-
-      choice:
-        function(node, appliedRules) {
-          each(node.alternatives, function(alternative) {
-            check(alternative, appliedRules);
-          });
-        },
-
-      sequence:
-        function(node, appliedRules) {
-          if (node.elements.length > 0) {
-            check(node.elements[0], appliedRules);
-          }
-        },
-
-      labeled:      checkExpression,
-      simple_and:   checkExpression,
-      simple_not:   checkExpression,
-      semantic_and: nop,
-      semantic_not: nop,
-      optional:     checkExpression,
-      zero_or_more: checkExpression,
-      one_or_more:  checkExpression,
-      action:       checkExpression,
-
-      rule_ref:
-        function(node, appliedRules) {
-          if (contains(appliedRules, node.name)) {
-            throw new PEG.GrammarError(
-              "Left recursion detected for rule \"" + node.name + "\"."
-            );
-          }
-          check(ast.rules[node.name], appliedRules);
-        },
-
-      literal:      nop,
-      any:          nop,
-      "class":      nop
-    });
-
-    check(ast, []);
-  }
-};
-/*
- * Optimalization passes made on the grammar AST before compilation. Each pass
- * is a function that is passed the AST and returns a new AST. The AST can be
- * modified in-place by the pass. The order in which the passes are run is
- * specified in |PEG.compiler.compile| and should be the same as the order of
- * definitions here.
- */
-PEG.compiler.passes = {
-  /*
-   * Removes proxy rules -- that is, rules that only delegate to other rule.
-   */
-  proxyRules: function(ast) {
-    function isProxyRule(node) {
-      return node.type === "rule" && node.expression.type === "rule_ref";
-    }
-
-    function replaceRuleRefs(ast, from, to) {
-      function nop() {}
-
-      function replaceInExpression(node, from, to) {
-        replace(node.expression, from, to);
-      }
-
-      function replaceInSubnodes(propertyName) {
-        return function(node, from, to) {
-          each(node[propertyName], function(subnode) {
-            replace(subnode, from, to);
-          });
-        };
-      }
-
-      var replace = buildNodeVisitor({
-        grammar:
-          function(node, from, to) {
-            for (var name in node.rules) {
-              replace(node.rules[name], from, to);
-            }
-          },
-
-        rule:         replaceInExpression,
-        choice:       replaceInSubnodes("alternatives"),
-        sequence:     replaceInSubnodes("elements"),
-        labeled:      replaceInExpression,
-        simple_and:   replaceInExpression,
-        simple_not:   replaceInExpression,
-        semantic_and: nop,
-        semantic_not: nop,
-        optional:     replaceInExpression,
-        zero_or_more: replaceInExpression,
-        one_or_more:  replaceInExpression,
-        action:       replaceInExpression,
-
-        rule_ref:
-          function(node, from, to) {
-            if (node.name === from) {
-              node.name = to;
-            }
-          },
-
-        literal:      nop,
-        any:          nop,
-        "class":      nop
-      });
-
-      replace(ast, from, to);
-    }
-
-    for (var name in ast.rules) {
-      if (isProxyRule(ast.rules[name])) {
-        replaceRuleRefs(ast, ast.rules[name].name, ast.rules[name].expression.name);
-        if (name === ast.startRule) {
-          ast.startRule = ast.rules[name].expression.name;
-        }
-        delete ast.rules[name];
-      }
-    }
-
-    return ast;
-  }
-};
-/* Emits the generated code for the AST. */
-PEG.compiler.emitter = function(ast) {
-  /*
-   * Takes parts of code, interpolates variables inside them and joins them with
-   * a newline.
-   *
-   * Variables are delimited with "${" and "}" and their names must be valid
-   * identifiers (i.e. they must match [a-zA-Z_][a-zA-Z0-9_]*). Variable values
-   * are specified as properties of the last parameter (if this is an object,
-   * otherwise empty variable set is assumed). Undefined variables result in
-   * throwing |Error|.
-   *
-   * There can be a filter specified after the variable name, prefixed with "|".
-   * The filter name must be a valid identifier. The only recognized filter
-   * right now is "string", which quotes the variable value as a JavaScript
-   * string. Unrecognized filters result in throwing |Error|.
-   *
-   * If any part has multiple lines and the first line is indented by some
-   * amount of whitespace (as defined by the /\s+/ JavaScript regular
-   * expression), second to last lines are indented by the same amount of
-   * whitespace. This results in nicely indented multiline code in variables
-   * without making the templates look ugly.
-   *
-   * Examples:
-   *
-   *   formatCode("foo", "bar");                           // "foo\nbar"
-   *   formatCode("foo", "${bar}", { bar: "baz" });        // "foo\nbaz"
-   *   formatCode("foo", "${bar}");                        // throws Error
-   *   formatCode("foo", "${bar|string}", { bar: "baz" }); // "foo\n\"baz\""
-   *   formatCode("foo", "${bar|eeek}", { bar: "baz" });   // throws Error
-   *   formatCode("foo", "${bar}", { bar: "  baz\nqux" }); // "foo\n  baz\n  qux"
-   */
-  function formatCode() {
-    function interpolateVariablesInParts(parts) {
-      return map(parts, function(part) {
-        return part.replace(
-          /\$\{([a-zA-Z_][a-zA-Z0-9_]*)(\|([a-zA-Z_][a-zA-Z0-9_]*))?\}/g,
-          function(match, name, dummy, filter) {
-            var value = vars[name];
-            if (value === undefined) {
-              throw new Error("Undefined variable: \"" + name + "\".");
-            }
-
-            if (filter !== undefined && filter != "") { // JavaScript engines differ here.
-              if (filter === "string") {
-                return quote(value);
-              } else {
-                throw new Error("Unrecognized filter: \"" + filter + "\".");
-              }
-            } else {
-              return value;
-            }
-          }
-        );
-      });
-    }
-
-    function indentMultilineParts(parts) {
-      return map(parts, function(part) {
-        if (!/\n/.test(part)) { return part; }
-
-        var firstLineWhitespacePrefix = part.match(/^\s*/)[0];
-        var lines = part.split("\n");
-        var linesIndented = [lines[0]].concat(
-          map(lines.slice(1), function(line) {
-            return firstLineWhitespacePrefix + line;
-          })
-        );
-        return linesIndented.join("\n");
-      });
-    }
-
-    var args = Array.prototype.slice.call(arguments);
-    var vars = args[args.length - 1] instanceof Object ? args.pop() : {};
-
-    return indentMultilineParts(interpolateVariablesInParts(args)).join("\n");
-  };
-
-  /* Unique ID generator. */
-  var UID = {
-    _counters: {},
-
-    next: function(prefix) {
-      this._counters[prefix] = this._counters[prefix] || 0;
-      return prefix + this._counters[prefix]++;
-    },
-
-    reset: function() {
-      this._counters = {};
-    }
-  };
-
-  var emit = buildNodeVisitor({
-    grammar: function(node) {
-      var initializerCode = node.initializer !== null
-        ? emit(node.initializer)
-        : "";
-
-      var parseFunctionTableItems = [];
-      for (var name in node.rules) {
-        parseFunctionTableItems.push(quote(name) + ": parse_" + name);
-      }
-      parseFunctionTableItems.sort();
-
-      var parseFunctionDefinitions = [];
-      for (var name in node.rules) {
-        parseFunctionDefinitions.push(emit(node.rules[name]));
-      }
-
-      return formatCode(
-        "(function(){",
-        "  /* Generated by PEG.js 0.6.2 (http://pegjs.majda.cz/). */",
-        "  ",
-        "  var result = {",
-        "    /*",
-        "     * Parses the input with a generated parser. If the parsing is successfull,",
-        "     * returns a value explicitly or implicitly specified by the grammar from",
-        "     * which the parser was generated (see |PEG.buildParser|). If the parsing is",
-        "     * unsuccessful, throws |PEG.parser.SyntaxError| describing the error.",
-        "     */",
-        "    parse: function(input, startRule) {",
-        "      var parseFunctions = {",
-        "        ${parseFunctionTableItems}",
-        "      };",
-        "      ",
-        "      if (startRule !== undefined) {",
-        "        if (parseFunctions[startRule] === undefined) {",
-        "          throw new Error(\"Invalid rule name: \" + quote(startRule) + \".\");",
-        "        }",
-        "      } else {",
-        "        startRule = ${startRule|string};",
-        "      }",
-        "      ",
-        "      var pos = 0;",
-        "      var reportMatchFailures = true;",
-        "      var rightmostMatchFailuresPos = 0;",
-        "      var rightmostMatchFailuresExpected = [];",
-        "      var cache = {};",
-        "      ",
-        /* This needs to be in sync with |padLeft| in utils.js. */
-        "      function padLeft(input, padding, length) {",
-        "        var result = input;",
-        "        ",
-        "        var padLength = length - input.length;",
-        "        for (var i = 0; i < padLength; i++) {",
-        "          result = padding + result;",
-        "        }",
-        "        ",
-        "        return result;",
-        "      }",
-        "      ",
-        /* This needs to be in sync with |escape| in utils.js. */
-        "      function escape(ch) {",
-        "        var charCode = ch.charCodeAt(0);",
-        "        ",
-        "        if (charCode <= 0xFF) {",
-        "          var escapeChar = 'x';",
-        "          var length = 2;",
-        "        } else {",
-        "          var escapeChar = 'u';",
-        "          var length = 4;",
-        "        }",
-        "        ",
-        "        return '\\\\' + escapeChar + padLeft(charCode.toString(16).toUpperCase(), '0', length);",
-        "      }",
-        "      ",
-        /* This needs to be in sync with |quote| in utils.js. */
-        "      function quote(s) {",
-        "        /*",
-        "         * ECMA-262, 5th ed., 7.8.4: All characters may appear literally in a",
-        "         * string literal except for the closing quote character, backslash,",
-        "         * carriage return, line separator, paragraph separator, and line feed.",
-        "         * Any character may appear in the form of an escape sequence.",
-        "         */",
-        "        return '\"' + s",
-        "          .replace(/\\\\/g, '\\\\\\\\')            // backslash",
-        "          .replace(/\"/g, '\\\\\"')              // closing quote character",
-        "          .replace(/\\r/g, '\\\\r')             // carriage return",
-        "          .replace(/\\n/g, '\\\\n')             // line feed",
-        "          .replace(/[\\x80-\\uFFFF]/g, escape) // non-ASCII characters",
-        "          + '\"';",
-        "      }",
-        "      ",
-        "      function matchFailed(failure) {",
-        "        if (pos < rightmostMatchFailuresPos) {",
-        "          return;",
-        "        }",
-        "        ",
-        "        if (pos > rightmostMatchFailuresPos) {",
-        "          rightmostMatchFailuresPos = pos;",
-        "          rightmostMatchFailuresExpected = [];",
-        "        }",
-        "        ",
-        "        rightmostMatchFailuresExpected.push(failure);",
-        "      }",
-        "      ",
-        "      ${parseFunctionDefinitions}",
-        "      ",
-        "      function buildErrorMessage() {",
-        "        function buildExpected(failuresExpected) {",
-        "          failuresExpected.sort();",
-        "          ",
-        "          var lastFailure = null;",
-        "          var failuresExpectedUnique = [];",
-        "          for (var i = 0; i < failuresExpected.length; i++) {",
-        "            if (failuresExpected[i] !== lastFailure) {",
-        "              failuresExpectedUnique.push(failuresExpected[i]);",
-        "              lastFailure = failuresExpected[i];",
-        "            }",
-        "          }",
-        "          ",
-        "          switch (failuresExpectedUnique.length) {",
-        "            case 0:",
-        "              return 'end of input';",
-        "            case 1:",
-        "              return failuresExpectedUnique[0];",
-        "            default:",
-        "              return failuresExpectedUnique.slice(0, failuresExpectedUnique.length - 1).join(', ')",
-        "                + ' or '",
-        "                + failuresExpectedUnique[failuresExpectedUnique.length - 1];",
-        "          }",
-        "        }",
-        "        ",
-        "        var expected = buildExpected(rightmostMatchFailuresExpected);",
-        "        var actualPos = Math.max(pos, rightmostMatchFailuresPos);",
-        "        var actual = actualPos < input.length",
-        "          ? quote(input.charAt(actualPos))",
-        "          : 'end of input';",
-        "        ",
-        "        return 'Expected ' + expected + ' but ' + actual + ' found.';",
-        "      }",
-        "      ",
-        "      function computeErrorPosition() {",
-        "        /*",
-        "         * The first idea was to use |String.split| to break the input up to the",
-        "         * error position along newlines and derive the line and column from",
-        "         * there. However IE's |split| implementation is so broken that it was",
-        "         * enough to prevent it.",
-        "         */",
-        "        ",
-        "        var line = 1;",
-        "        var column = 1;",
-        "        var seenCR = false;",
-        "        ",
-        "        for (var i = 0; i <  rightmostMatchFailuresPos; i++) {",
-        "          var ch = input.charAt(i);",
-        "          if (ch === '\\n') {",
-        "            if (!seenCR) { line++; }",
-        "            column = 1;",
-        "            seenCR = false;",
-        "          } else if (ch === '\\r' | ch === '\\u2028' || ch === '\\u2029') {",
-        "            line++;",
-        "            column = 1;",
-        "            seenCR = true;",
-        "          } else {",
-        "            column++;",
-        "            seenCR = false;",
-        "          }",
-        "        }",
-        "        ",
-        "        return { line: line, column: column };",
-        "      }",
-        "      ",
-        "      ${initializerCode}",
-        "      ",
-        "      var result = parseFunctions[startRule]();",
-        "      ",
-        "      /*",
-        "       * The parser is now in one of the following three states:",
-        "       *",
-        "       * 1. The parser successfully parsed the whole input.",
-        "       *",
-        "       *    - |result !== null|",
-        "       *    - |pos === input.length|",
-        "       *    - |rightmostMatchFailuresExpected| may or may not contain something",
-        "       *",
-        "       * 2. The parser successfully parsed only a part of the input.",
-        "       *",
-        "       *    - |result !== null|",
-        "       *    - |pos < input.length|",
-        "       *    - |rightmostMatchFailuresExpected| may or may not contain something",
-        "       *",
-        "       * 3. The parser did not successfully parse any part of the input.",
-        "       *",
-        "       *   - |result === null|",
-        "       *   - |pos === 0|",
-        "       *   - |rightmostMatchFailuresExpected| contains at least one failure",
-        "       *",
-        "       * All code following this comment (including called functions) must",
-        "       * handle these states.",
-        "       */",
-        "      if (result === null || pos !== input.length) {",
-        "        var errorPosition = computeErrorPosition();",
-        "        throw new this.SyntaxError(",
-        "          buildErrorMessage(),",
-        "          errorPosition.line,",
-        "          errorPosition.column",
-        "        );",
-        "      }",
-        "      ",
-        "      return result;",
-        "    },",
-        "    ",
-        "    /* Returns the parser source code. */",
-        "    toSource: function() { return this._source; }",
-        "  };",
-        "  ",
-        "  /* Thrown when a parser encounters a syntax error. */",
-        "  ",
-        "  result.SyntaxError = function(message, line, column) {",
-        "    this.name = 'SyntaxError';",
-        "    this.message = message;",
-        "    this.line = line;",
-        "    this.column = column;",
-        "  };",
-        "  ",
-        "  result.SyntaxError.prototype = Error.prototype;",
-        "  ",
-        "  return result;",
-        "})()",
-        {
-          initializerCode:          initializerCode,
-          parseFunctionTableItems:  parseFunctionTableItems.join(",\n"),
-          parseFunctionDefinitions: parseFunctionDefinitions.join("\n\n"),
-          startRule:                node.startRule
-        }
-      );
-    },
-
-    initializer: function(node) {
-      return node.code;
-    },
-
-    rule: function(node) {
-      /*
-       * We want to reset variable names at the beginning of every function so
-       * that a little change in the source grammar does not change variables in
-       * all the generated code. This is desired especially when one has the
-       * generated grammar stored in a VCS (this is true e.g. for our
-       * metagrammar).
-       */
-      UID.reset();
-
-      var resultVar = UID.next("result");
-
-      if (node.displayName !== null) {
-        var setReportMatchFailuresCode = formatCode(
-          "var savedReportMatchFailures = reportMatchFailures;",
-          "reportMatchFailures = false;"
-        );
-        var restoreReportMatchFailuresCode = formatCode(
-          "reportMatchFailures = savedReportMatchFailures;"
-        );
-        var reportMatchFailureCode = formatCode(
-          "if (reportMatchFailures && ${resultVar} === null) {",
-          "  matchFailed(${displayName|string});",
-          "}",
-          {
-            displayName: node.displayName,
-            resultVar:   resultVar
-          }
-        );
-      } else {
-        var setReportMatchFailuresCode = "";
-        var restoreReportMatchFailuresCode = "";
-        var reportMatchFailureCode = "";
-      }
-
-      return formatCode(
-        "function parse_${name}() {",
-        "  var cacheKey = '${name}@' + pos;",
-        "  var cachedResult = cache[cacheKey];",
-        "  if (cachedResult) {",
-        "    pos = cachedResult.nextPos;",
-        "    return cachedResult.result;",
-        "  }",
-        "  ",
-        "  ${setReportMatchFailuresCode}",
-        "  ${code}",
-        "  ${restoreReportMatchFailuresCode}",
-        "  ${reportMatchFailureCode}",
-        "  ",
-        "  cache[cacheKey] = {",
-        "    nextPos: pos,",
-        "    result:  ${resultVar}",
-        "  };",
-        "  return ${resultVar};",
-        "}",
-        {
-          name:                           node.name,
-          setReportMatchFailuresCode:     setReportMatchFailuresCode,
-          restoreReportMatchFailuresCode: restoreReportMatchFailuresCode,
-          reportMatchFailureCode:         reportMatchFailureCode,
-          code:                           emit(node.expression, resultVar),
-          resultVar:                      resultVar
-        }
-      );
-    },
-
-    /*
-     * The contract for all code fragments generated by the following functions
-     * is as follows:
-     *
-     * * The code fragment should try to match a part of the input starting with
-     * the position indicated in |pos|. That position may point past the end of
-     * the input.
-     *
-     * * If the code fragment matches the input, it advances |pos| after the
-     *   matched part of the input and sets variable with a name stored in
-     *   |resultVar| to appropriate value, which is always non-null.
-     *
-     * * If the code fragment does not match the input, it does not change |pos|
-     *   and it sets a variable with a name stored in |resultVar| to |null|.
-     */
-
-    choice: function(node, resultVar) {
-      var code = formatCode(
-        "var ${resultVar} = null;",
-        { resultVar: resultVar }
-      );
-
-      for (var i = node.alternatives.length - 1; i >= 0; i--) {
-        var alternativeResultVar = UID.next("result");
-        code = formatCode(
-          "${alternativeCode}",
-          "if (${alternativeResultVar} !== null) {",
-          "  var ${resultVar} = ${alternativeResultVar};",
-          "} else {",
-          "  ${code};",
-          "}",
-          {
-            alternativeCode:      emit(node.alternatives[i], alternativeResultVar),
-            alternativeResultVar: alternativeResultVar,
-            code:                 code,
-            resultVar:            resultVar
-          }
-        );
-      }
-
-      return code;
-    },
-
-    sequence: function(node, resultVar) {
-      var savedPosVar = UID.next("savedPos");
-
-      var elementResultVars = map(node.elements, function() {
-        return UID.next("result")
-      });
-
-      var code = formatCode(
-        "var ${resultVar} = ${elementResultVarArray};",
-        {
-          resultVar:             resultVar,
-          elementResultVarArray: "[" + elementResultVars.join(", ") + "]"
-        }
-      );
-
-      for (var i = node.elements.length - 1; i >= 0; i--) {
-        code = formatCode(
-          "${elementCode}",
-          "if (${elementResultVar} !== null) {",
-          "  ${code}",
-          "} else {",
-          "  var ${resultVar} = null;",
-          "  pos = ${savedPosVar};",
-          "}",
-          {
-            elementCode:      emit(node.elements[i], elementResultVars[i]),
-            elementResultVar: elementResultVars[i],
-            code:             code,
-            savedPosVar:      savedPosVar,
-            resultVar:        resultVar
-          }
-        );
-      }
-
-      return formatCode(
-        "var ${savedPosVar} = pos;",
-        "${code}",
-        {
-          code:        code,
-          savedPosVar: savedPosVar
-        }
-      );
-    },
-
-    labeled: function(node, resultVar) {
-      return emit(node.expression, resultVar);
-    },
-
-    simple_and: function(node, resultVar) {
-      var savedPosVar                 = UID.next("savedPos");
-      var savedReportMatchFailuresVar = UID.next("savedReportMatchFailuresVar");
-      var expressionResultVar         = UID.next("result");
-
-      return formatCode(
-        "var ${savedPosVar} = pos;",
-        "var ${savedReportMatchFailuresVar} = reportMatchFailures;",
-        "reportMatchFailures = false;",
-        "${expressionCode}",
-        "reportMatchFailures = ${savedReportMatchFailuresVar};",
-        "if (${expressionResultVar} !== null) {",
-        "  var ${resultVar} = '';",
-        "  pos = ${savedPosVar};",
-        "} else {",
-        "  var ${resultVar} = null;",
-        "}",
-        {
-          expressionCode:              emit(node.expression, expressionResultVar),
-          expressionResultVar:         expressionResultVar,
-          savedPosVar:                 savedPosVar,
-          savedReportMatchFailuresVar: savedReportMatchFailuresVar,
-          resultVar:                   resultVar
-        }
-      );
-    },
-
-    simple_not: function(node, resultVar) {
-      var savedPosVar                 = UID.next("savedPos");
-      var savedReportMatchFailuresVar = UID.next("savedReportMatchFailuresVar");
-      var expressionResultVar         = UID.next("result");
-
-      return formatCode(
-        "var ${savedPosVar} = pos;",
-        "var ${savedReportMatchFailuresVar} = reportMatchFailures;",
-        "reportMatchFailures = false;",
-        "${expressionCode}",
-        "reportMatchFailures = ${savedReportMatchFailuresVar};",
-        "if (${expressionResultVar} === null) {",
-        "  var ${resultVar} = '';",
-        "} else {",
-        "  var ${resultVar} = null;",
-        "  pos = ${savedPosVar};",
-        "}",
-        {
-          expressionCode:              emit(node.expression, expressionResultVar),
-          expressionResultVar:         expressionResultVar,
-          savedPosVar:                 savedPosVar,
-          savedReportMatchFailuresVar: savedReportMatchFailuresVar,
-          resultVar:                   resultVar
-        }
-      );
-    },
-
-    semantic_and: function(node, resultVar) {
-      return formatCode(
-        "var ${resultVar} = (function() {${actionCode}})() ? '' : null;",
-        {
-          actionCode:  node.code,
-          resultVar:   resultVar
-        }
-      );
-    },
-
-    semantic_not: function(node, resultVar) {
-      return formatCode(
-        "var ${resultVar} = (function() {${actionCode}})() ? null : '';",
-        {
-          actionCode:  node.code,
-          resultVar:   resultVar
-        }
-      );
-    },
-
-    optional: function(node, resultVar) {
-      var expressionResultVar = UID.next("result");
-
-      return formatCode(
-        "${expressionCode}",
-        "var ${resultVar} = ${expressionResultVar} !== null ? ${expressionResultVar} : '';",
-        {
-          expressionCode:      emit(node.expression, expressionResultVar),
-          expressionResultVar: expressionResultVar,
-          resultVar:           resultVar
-        }
-      );
-    },
-
-    zero_or_more: function(node, resultVar) {
-      var expressionResultVar = UID.next("result");
-
-      return formatCode(
-        "var ${resultVar} = [];",
-        "${expressionCode}",
-        "while (${expressionResultVar} !== null) {",
-        "  ${resultVar}.push(${expressionResultVar});",
-        "  ${expressionCode}",
-        "}",
-        {
-          expressionCode:      emit(node.expression, expressionResultVar),
-          expressionResultVar: expressionResultVar,
-          resultVar:           resultVar
-        }
-      );
-    },
-
-    one_or_more: function(node, resultVar) {
-      var expressionResultVar = UID.next("result");
-
-      return formatCode(
-        "${expressionCode}",
-        "if (${expressionResultVar} !== null) {",
-        "  var ${resultVar} = [];",
-        "  while (${expressionResultVar} !== null) {",
-        "    ${resultVar}.push(${expressionResultVar});",
-        "    ${expressionCode}",
-        "  }",
-        "} else {",
-        "  var ${resultVar} = null;",
-        "}",
-        {
-          expressionCode:      emit(node.expression, expressionResultVar),
-          expressionResultVar: expressionResultVar,
-          resultVar:           resultVar
-        }
-      );
-    },
-
-    action: function(node, resultVar) {
-      /*
-       * In case of sequences, we splat their elements into function arguments
-       * one by one. Example:
-       *
-       *   start: a:"a" b:"b" c:"c" { alert(arguments.length) }  // => 3
-       *
-       * This behavior is reflected in this function.
-       */
-
-      var expressionResultVar = UID.next("result");
-      var actionResultVar     = UID.next("result");
-      var savedPosVar         = UID.next("savedPos");
-
-      if (node.expression.type === "sequence") {
-        var formalParams = [];
-        var actualParams = [];
-
-        var elements = node.expression.elements;
-        var elementsLength = elements.length;
-        for (var i = 0; i < elementsLength; i++) {
-          if (elements[i].type === "labeled") {
-            formalParams.push(elements[i].label);
-            actualParams.push(expressionResultVar + "[" + i + "]");
-          }
-        }
-      } else if (node.expression.type === "labeled") {
-        var formalParams = [node.expression.label];
-        var actualParams = [expressionResultVar];
-      } else {
-        var formalParams = [];
-        var actualParams = [];
-      }
-
-      return formatCode(
-        "var ${savedPosVar} = pos;",
-        "${expressionCode}",
-        "var ${actionResultVar} = ${expressionResultVar} !== null",
-        "  ? (function(${formalParams}) {${actionCode}})(${actualParams})",
-        "  : null;",
-        "if (${actionResultVar} !== null) {",
-        "  var ${resultVar} = ${actionResultVar};",
-        "} else {",
-        "  var ${resultVar} = null;",
-        "  pos = ${savedPosVar};",
-        "}",
-        {
-          expressionCode:      emit(node.expression, expressionResultVar),
-          expressionResultVar: expressionResultVar,
-          actionCode:          node.code,
-          actionResultVar:     actionResultVar,
-          formalParams:        formalParams.join(", "),
-          actualParams:        actualParams.join(", "),
-          savedPosVar:         savedPosVar,
-          resultVar:           resultVar
-        }
-      );
-    },
-
-    rule_ref: function(node, resultVar) {
-      return formatCode(
-        "var ${resultVar} = ${ruleMethod}();",
-        {
-          ruleMethod: "parse_" + node.name,
-          resultVar:  resultVar
-        }
-      );
-    },
-
-    literal: function(node, resultVar) {
-      return formatCode(
-        "if (input.substr(pos, ${length}) === ${value|string}) {",
-        "  var ${resultVar} = ${value|string};",
-        "  pos += ${length};",
-        "} else {",
-        "  var ${resultVar} = null;",
-        "  if (reportMatchFailures) {",
-        "    matchFailed(${valueQuoted|string});",
-        "  }",
-        "}",
-        {
-          value:       node.value,
-          valueQuoted: quote(node.value),
-          length:      node.value.length,
-          resultVar:   resultVar
-        }
-      );
-    },
-
-    any: function(node, resultVar) {
-      return formatCode(
-        "if (input.length > pos) {",
-        "  var ${resultVar} = input.charAt(pos);",
-        "  pos++;",
-        "} else {",
-        "  var ${resultVar} = null;",
-        "  if (reportMatchFailures) {",
-        "    matchFailed('any character');",
-        "  }",
-        "}",
-        { resultVar: resultVar }
-      );
-    },
-
-    "class": function(node, resultVar) {
-      if (node.parts.length > 0) {
-        var regexp = "/^["
-          + (node.inverted ? "^" : "")
-          + map(node.parts, function(part) {
-              return part instanceof Array
-                ? quoteForRegexpClass(part[0])
-                  + "-"
-                  + quoteForRegexpClass(part[1])
-                : quoteForRegexpClass(part);
-            }).join("")
-          + "]/";
-      } else {
-        /*
-         * Stupid IE considers regexps /[]/ and /[^]/ syntactically invalid, so
-         * we translate them into euqivalents it can handle.
-         */
-        var regexp = node.inverted ? "/^[\\S\\s]/" : "/^(?!)/";
-      }
-
-      return formatCode(
-        "if (input.substr(pos).match(${regexp}) !== null) {",
-        "  var ${resultVar} = input.charAt(pos);",
-        "  pos++;",
-        "} else {",
-        "  var ${resultVar} = null;",
-        "  if (reportMatchFailures) {",
-        "    matchFailed(${rawText|string});",
-        "  }",
-        "}",
-        {
-          regexp:    regexp,
-          rawText:   node.rawText,
-          resultVar: resultVar
-        }
-      );
-    }
-  });
-
-  return emit(ast);
-};
-
-if (typeof module === "object") {
-  module.exports = PEG;
-} else if (typeof window === "object") {
-  window.PEG = PEG;
-} else {
-  throw new Error("Can't export PEG library (no \"module\" nor \"window\" object detected).");
-}
-
-})();
\ No newline at end of file
diff --git a/bin/node_modules/xcode/node_modules/pegjs/package.json b/bin/node_modules/xcode/node_modules/pegjs/package.json
deleted file mode 100644
index e716ce4..0000000
--- a/bin/node_modules/xcode/node_modules/pegjs/package.json
+++ /dev/null
@@ -1,57 +0,0 @@
-{
-  "name": "pegjs",
-  "version": "0.6.2",
-  "description": "Parser generator for JavaScript",
-  "homepage": "http://pegjs.majda.cz/",
-  "author": {
-    "name": "David Majda",
-    "email": "david@majda.cz",
-    "url": "http://majda.cz/"
-  },
-  "main": "lib/peg",
-  "bin": {
-    "pegjs": "bin/pegjs"
-  },
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/dmajda/pegjs.git"
-  },
-  "devDependencies": {
-    "jake": ">= 0.1.10",
-    "uglify-js": ">= 0.0.5"
-  },
-  "engines": {
-    "node": ">= 0.4.4"
-  },
-  "_npmJsonOpts": {
-    "file": "/home/dmajda/.npm/pegjs/0.6.2/package/package.json",
-    "wscript": false,
-    "contributors": false,
-    "serverjs": false
-  },
-  "_id": "pegjs@0.6.2",
-  "dependencies": {},
-  "_engineSupported": true,
-  "_npmVersion": "1.0.15",
-  "_nodeVersion": "v0.4.8",
-  "_defaultsLoaded": true,
-  "dist": {
-    "shasum": "74651f8a800e444db688e4eeae8edb65637a17a5",
-    "tarball": "http://registry.npmjs.org/pegjs/-/pegjs-0.6.2.tgz"
-  },
-  "scripts": {},
-  "maintainers": [
-    {
-      "name": "dmajda",
-      "email": "david@majda.cz"
-    }
-  ],
-  "directories": {},
-  "_shasum": "74651f8a800e444db688e4eeae8edb65637a17a5",
-  "_from": "pegjs@0.6.2",
-  "_resolved": "https://registry.npmjs.org/pegjs/-/pegjs-0.6.2.tgz",
-  "bugs": {
-    "url": "https://github.com/dmajda/pegjs/issues"
-  },
-  "readme": "ERROR: No README data found!"
-}
diff --git a/bin/node_modules/xcode/package.json b/bin/node_modules/xcode/package.json
deleted file mode 100644
index f1ca6d6..0000000
--- a/bin/node_modules/xcode/package.json
+++ /dev/null
@@ -1,90 +0,0 @@
-{
-  "author": {
-    "name": "Andrew Lunny",
-    "email": "alunny@gmail.com"
-  },
-  "name": "xcode",
-  "description": "parser for xcodeproj/project.pbxproj files",
-  "version": "0.8.2",
-  "main": "index.js",
-  "repository": {
-    "url": "git+https://github.com/alunny/node-xcode.git"
-  },
-  "engines": {
-    "node": ">=0.6.7"
-  },
-  "dependencies": {
-    "pegjs": "0.6.2",
-    "node-uuid": "1.3.3"
-  },
-  "devDependencies": {
-    "nodeunit": "0.9.0"
-  },
-  "scripts": {
-    "test": "nodeunit test/parser test"
-  },
-  "contributors": [
-    {
-      "name": "Andrew Lunny",
-      "url": "@alunny"
-    },
-    {
-      "name": "Anis Kadri",
-      "url": "@imhotep"
-    },
-    {
-      "name": "Mike Reinstein",
-      "url": "@mreinstein"
-    },
-    {
-      "name": "Filip Maj",
-      "url": "@filmaj"
-    },
-    {
-      "name": "Brett Rudd",
-      "url": "@goya"
-    },
-    {
-      "name": "Bob Easterday",
-      "url": "@bobeast"
-    }
-  ],
-  "gitHead": "2f1362730854702d0f71b058a09abbb39614bae9",
-  "bugs": {
-    "url": "https://github.com/alunny/node-xcode/issues"
-  },
-  "homepage": "https://github.com/alunny/node-xcode#readme",
-  "_id": "xcode@0.8.2",
-  "_shasum": "86631086a6934a23ae4066d2272bb55dde87ca77",
-  "_from": "xcode@",
-  "_npmVersion": "2.14.0",
-  "_nodeVersion": "0.12.4",
-  "_npmUser": {
-    "name": "anis",
-    "email": "anis.kadri@gmail.com"
-  },
-  "dist": {
-    "shasum": "86631086a6934a23ae4066d2272bb55dde87ca77",
-    "tarball": "http://registry.npmjs.org/xcode/-/xcode-0.8.2.tgz"
-  },
-  "maintainers": [
-    {
-      "name": "alunny",
-      "email": "alunny@gmail.com"
-    },
-    {
-      "name": "filmaj",
-      "email": "maj.fil@gmail.com"
-    },
-    {
-      "name": "shepheb",
-      "email": "braden.shepherdson@gmail.com"
-    },
-    {
-      "name": "anis",
-      "email": "anis.kadri@gmail.com"
-    }
-  ],
-  "directories": {},
-  "_resolved": "https://registry.npmjs.org/xcode/-/xcode-0.8.2.tgz"
-}